dsh-context-budget:保持本地模型上下文在 GPU 可控範圍內的插件

前言

DeepSeek Harness (DSH) 在處理本地模型時,模型聲明的上下文窗口往往並不實用。隨着上下文長度增加,預填充速度會顯著下降,導致首字延遲大幅增加,甚至導致 GPU 在窗口完全填滿前掛起。一個 27B 模型可能在 100K 上下文前保持 300 tokens/s 的速度,一旦超過 100K,速度可能跌至 70 tokens/s,導致後續回覆需要數分鐘才能開始。

爲了解決這個問題,dsh-context-budget 插件通過測量預填充速度、設置硬上限並在超限時提前壓縮,幫助將本地模型的上下文保持在 GPU 能夠良好處理的範圍內。

核心功能

該插件負責在每次智能體步驟前,對受保護的提供程序路由進行檢查,確保上下文不會超出 GPU 的處理能力。

  1. 上下文控制:將本地模型上下文保持在 GPU 能夠良好處理的範圍內。
  2. 壓縮策略:當上下文達到模型聲明的上下文窗口的固定比例時,進行壓縮。
  3. 多維度檢查:
    • hardCeilingTokens:硬性上限檢查。
    • maxTtftMs:測量首字延遲(Time to First Token),超過設定值則觸發。
    • maxColdPrefillMs:預測冷預填充時間,即如果服務器緩存丟失,當前上下文預填充所需的時間。
  4. 動作執行:支持 warn(僅打印警告)或 compact(執行壓縮)兩種動作。
  5. 監控命令:提供 /context-budget 命令,用於查看當前值、歷史測量樣本及預測的冷預填充時間。

安裝與啓用

首先,使用官方提供的命令安裝插件。插件通過 DSH 的包管理器加載。

dsh plugin --profile web add dsh-context-budget

安裝完成後,需要編輯配置文件。配置文件路徑通常爲 ~/.dsh/profiles/web/cordis.patch.yml。在該文件中添加 context-budget 配置塊。

- id: context-budget
  config:
    providers:
      llamacpp:
        hardCeilingTokens: 110000    # 可選,硬性上下文 token 上限
        maxTtftMs: 180000            # 可選,首字延遲上限,單位毫秒
        maxColdPrefillMs: 600000     # 可選,冷預填充時間上限,單位毫秒
        retainTokens: 24000          # 壓縮時保留的 token 數量(默認 16000)
        action: warn                 # 動作:warn(默認)或 compact

配置完成後,重啓 dsh web 並打開新會話。可通過 dsh --profile web --dump-config 驗證配置是否生效。

典型用法

配置好插件後,插件會在後臺運行。當配置的檢查項被觸發時,會根據 action 設置打印日誌或執行壓縮。

若要查看當前的上下文狀態、歷史採樣數據和預測的冷預填充時間,可在會話中直接輸入命令:

/context-budget

輸出示例展示了當前上下文的 token 數量、各檢查項的觸發狀態、最近幾次預填充速率的採樣(包含冷/熱狀態)、預測的冷預填充耗時以及壓縮所需的時間估算。

適用場景與注意

該插件適合在本地運行大參數模型時使用,以避免上下文過長導致的性能急劇下降。

  1. 生態共存:插件與 DSH 自帶的 compaction-basic 共存。如果會話的智能體預設沒有配置壓縮引擎,compact 動作會退化爲 warn。
  2. 測量範圍:壓縮摘要請求本身不計入測量。觀察到的慢速回復在上下文被重寫後會遺忘,因此一次壓縮不會觸發連鎖反應。
  3. 日誌輸出:只有在檢查項觸發時纔會打印日誌。如果會話始終在限制範圍內,終端將不會有任何輸出。
  4. 來源說明:該插件由社區維護,不屬於 DeepSeek 官方產品。源碼與目錄信息可參考下方鏈接。

總結

dsh-context-budget 提供了一種基於實際測量數據的上下文管理方案,通過軟硬結合的檢查機制,有效解決了本地模型在長上下文下的性能衰減問題。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜