dsh-gpu-cleanup:DSH Web UI 一键释放 GPU 显存

前言

在 DeepSeek Harness(DSH)里用 llama-swap 做本地模型调度时,模型一旦加载就会长期占着 VRAM。换模型、调试插件或暂时不用推理,若只能重启整个 DSH 或手动找进程,既慢又容易误关调度器。下面介绍社区插件 dsh-gpu-cleanup:在 Web UI 里点一次,卸载 llama-swap 上已加载的模型并清扫陈旧引擎进程,同时保留 llama-swap 本身,下次对话仍可按需加载。

这是什么

dsh-gpu-cleanup 是 fataldeity-lab 维护的 DSH Web UI 插件(MIT,当前包版本 0.2.1,peer 对齐 DSH 0.2.0-rc.2)。分类属于模型推理相关能力:面向「本地 llama-swap + llama.cpp 系引擎」场景,解决显存释放与进程残留不同步的问题。

浏览器无法直接调用 llama-swap(跨端口且无 CORS),因此插件在 DSH 宿主进程里起本机控制服务,页面只访问 http://127.0.0.1:11436。

核心功能

两个入口均为一次点击、无二次确认:

  1. 设置 → 插件配置 → dsh-gpu-cleanup:大按钮「一键释放显存」,附带控制服务健康状态与完整日志;
  2. 对话页右上角(Session log 旁)「释放显存」小按钮,结果在右下角浮层(Esc 关闭,成功约 12 秒后自动收起)。

点击后宿主端大致执行:

  • 对 llama-swap 调用 POST /api/models/unload,卸载全部已加载模型(不结束 llama-swap);
  • 扫描并结束残留的 llama-server / ninfer-serve / strata 引擎,仅终止启动超过 90 秒的进程,避免打断刚启动、正在生成的引擎;
  • 复核清扫结果:taskkill 失败会如实报「清理失败,仍驻留」,不谎报成功;
  • 复查 llama-swap(默认 127.0.0.1:11435)仍在线,并把剩余引擎信息写入日志。

不做的事:不关 llama-swap、不处理 comfyui / ollama、不杀 90 秒内的新引擎、不删模型文件。

控制服务主要端点(资料原文):

端点 作用
GET /health { ok, version },设置卡「控制服务:正常」来源
GET /status 引擎列表、llama-swap 在线情况、已加载模型
POST /free-vram 卸载 + 清扫 + 复查,返回逐步日志(按钮调用)
GET /list-llama 只读列出引擎 PID(旧版兼容)
POST /kill-llama 仅清扫引擎(旧版兼容,同样只杀 ≥90 秒)

自 0.2.1 起的安全边界:服务能结束进程,故不对外暴露——只绑定 127.0.0.1:11436、校验 loopback 的 Host、不再对任意站点返回通配 CORS;所有 POST 须带 X-DSH-Plugin: gpu-cleanup 头。

安装与启用

先做安装,再重启宿主并强刷页面(bundle 列表在启动时读取,仅刷新页面不会加载新插件)。

方式一:从 GitHub 安装(维护版推荐)

dsh plugin --profile web add github:fataldeity-lab/dsh-gpu-cleanup

包内已声明 dsh.bundle.patch(cordis.patch.yml),dsh plugin add 会作为 profile bundle 激活,无需再手动往 ~/.dsh/profiles/web/cordis.patch.yml 里 insert(手动 insert 可能与 bundle 层重复挂载)。

方式二:本地源码目录(改代码时用)

dsh plugin --profile web add I:/DPHs/dsh-gpu-cleanup

(路径以你本机为准,README 示例为 Windows 盘符路径。)

方式三:手动 clone 到 profile node_modules

mkdir -p ~/.dsh/profiles/node_modules/@princepainter
cd ~/.dsh/profiles/node_modules/@princepainter
git clone https://github.com/fataldeity-lab/dsh-gpu-cleanup.git

启用检查:

  1. 重启 DSH Web 宿主;
  2. 浏览器强制刷新(Ctrl+Shift+R);
  3. 对话页右上角出现「释放显存」;设置卡显示「控制服务:正常(v3)」表示宿主端控制服务已起来。

依赖要点(README):DeepSeek Harness 0.2.0-rc.2(^0.2.0-rc.2,不支持 0.1.x);llama-swap 在 127.0.0.1:11435(可选——未运行时按钮仍可见,点击会清扫孤儿引擎并提示)。宿主端仅使用 Node 内置模块,无额外 npm 运行时依赖。

典型用法

  1. 打开 DSH Web UI(示例地址 http://127.0.0.1:3080);
  2. 点右上角 「释放显存」,或设置卡 「一键释放显存」;
  3. 按钮显示「释放中…」及实时耗时,右下角浮层滚动逐步日志;
  4. 出现「确认:当前没有已加载模型,显存已释放」即完成——llama-swap 仍在运行,后续使用模型会按需加载。

请求超时约 210s(避免 llama-swap 卡住时按钮永远处于「释放中」);同一 /free-vram 在宿主端单飞,多标签同时点击不会重复跑两遍。

适用场景与注意

适合:长期在 DSH Web 里用 llama-swap 调度本地模型、需要频繁腾 VRAM 又希望保留调度器的开发者。

注意:

  • 插件逻辑在 当前 DSH 进程权限下执行(含 taskkill);安装前请自行查看 GitHub 源码 与 MIT 许可证,确认符合你的安全策略。
  • README 中进程枚举与 taskkill 路径面向 Windows(PowerShell) 环境;若在 Linux 上部署,需以实际仓库行为为准,勿假设与 Windows 完全一致。
  • 社区插件目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系;DSH 本身倡导「一切皆插件」,本插件为社区维护 fork。

结尾

dsh-gpu-cleanup 把「卸载 llama-swap 模型 + 清扫陈旧引擎 + 保留调度器」收成 Web UI 里的一键操作,并通过 loopback 控制服务与请求头约束降低误用风险。需要安装说明与变更记录时,可看目录页 fataldeity-lab/dsh-gpu-cleanup 与仓库 github.com/fataldeity-lab/dsh-gpu-cleanup。

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

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

小夜