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 提供了一种基于实际测量数据的上下文管理方案,通过软硬结合的检查机制,有效解决了本地模型在长上下文下的性能衰减问题。

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

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

小夜