dsh-ninfer:在 DeepSeek Harness 中管理本地 NInfer 推理与模型配置

前言

在 DeepSeek Harness(DSH)里接本地推理,常见做法是单独起推理服务,再在 Harness 里填 endpoint 和模型名。NInfer 引擎有自己的运行时、模型包格式(.ninfer)和一长串 CLI 参数;若每次改配置都要手改脚本或记端口,维护和复现都费劲。dsh-ninfer 是社区维护的 Cordis 插件包,把 NInfer 注册为 DSH 的本地推理提供方,并在 Settings → Models → NInfer 里用可编辑的 server profile 管理模型与引擎选项,对话模型选择器里可直接选用已保存的模型。

这是什么

  • 名称:dsh-ninfer(npm 包名 dsh-ninfer,当前版本 0.1.7)
  • 维护者:averyjohnkucan-arch
  • 分类:模型推理
  • 定位:NInfer local inference provider and model manager for DeepSeek Harness(在 DSH 内管理本地 NInfer 模型与可编辑的服务配置)
  • 目录页:https://www.skillhub.cn/plugins/averyjohnkucan-arch/dsh-ninfer
  • 源码:https://github.com/averyjohnkucan-arch/dsh-ninfer(MIT)

插件是可直接安装的 Cordis bundle:不 patch DSH 主程序、不替换内置 UI、不安装第二套 DSH,也不要求在本地编译插件本体;依赖使用 DSH 已带的 peer,安装时不会另拉一套 provider 栈或跑 provider 依赖构建脚本。

核心功能

模型与 profile 管理

在 NInfer 设置页可 Add model,通过 Select model files 浏览主机模型目录、多选分片或 Select all model files here;跨目录浏览时选择会保留。Inspect and assign 会读文件头并分配主模型、有序分片、vision projector 与 MTP,并报告缺失分片、混用主模型集或不支持的 MTP 格式。

保存 profile 后 Start 会在缺少时先准备 runtime/model pack,再启动服务;进度可取消。已安装的 engine 与已准备的 pack 可在 Runtime and imported model data 下选用。保存后,该模型会出现在 DSH 对话的模型选择器中。

Edit 重新打开已保存配置;Remove profile 删除保存的配置并停止插件拥有的进程,已下载的模型文件仍保留。Attach running server 可显式挂到已在运行、且对外宣告该 profile 模型 ID 的服务器;停止或禁用附件只会 detach,不会结束外部进程,启动参数也不会作用到外部服务。

引擎 CLI 与完整配置

引擎可执行文件 help 里文档化的推理 flag,在 All engine CLI options 下有对应控件:留空表示引擎默认;布尔项 Omit flag 表示不向进程传该 flag,并不等价于「一定关闭引擎默认行为」。完整 JSON 编辑器支持重复 flag 用数组、多值 flag 用 {"argv":["first","second"]};额外 argv 为数组,不是 shell 字符串。环境变量与完整 server 配置也可编辑。

推理档位(reasoning)

可在模型 profile 里增删 reasoning 档位、设置展示名与后端 reasoning_effort 取值,并指定默认档位或 Engine default(请求里不传该字段)。自定义名称与取值按 profile 声明,不假定每个模型都支持;需引擎/模板接受所配 backend 值。

智能体与权限

Host 通过 ctx.llm.registerAdapter 注册 LlmAdapter,wire 转换、图片与 replay 委托给 DSH 公开的 PiAiAdapter,并单独注册 ctx.webServer.register 路由。面向 agent 的 ninfer_models 工具与设置页卡片共用同一套操作,并走 DSH 的 approveEscalation;主机管理类调用需要 Full access 或单次显式批准。UI 操作需要所属页面的 capability。初始版本面向本地 Web profile;远程委托与仅 Electron 的 profile 尚未验证。

内置 Qwen3.8 27B 参考配置

首次无 profile 存储时会种子一条参考配置,模型 ID qwen3.8-27b,端口 8188,文本输入,含性能向 power-profile hold 及示例环境/校准路径(绝对路径可改,需在本机选择自己的 artifact 与 runtime 库)。参考 CLI 片段包括:

--max-context 262144 --kv-capacity 262144 --max-concurrency 1
--kv-dtype rk4v4 --spec dflash2 --draft-tokens 7 --lm-head-draft
--embedding-q4 --gdn-state-fp16 --prefill-cublas --prefill-chunk 512
--ngram-draft-tokens 0

权重来源:neroued/Qwen3.8-27B-NInfer(revision 1cbd84e7221e51186bd7f093a149912d2489625b)。README 注明导入时未重新跑推理或校准;重装插件会保留已编辑 profile。

若在保存端口上已有服务,Start 或对话仅在 /v1/models 宣告的模型 ID 与保存值完全一致时自动复用;插件不接管该进程所有权。Strata 调优需要插件拥有的服务器,不会复用外部进程。

NInfer 运行时

引擎上游:iamwavecut/ninfer-all(文档中测试 revision 5ed86dff9fe3a5a0776f40a7aea86cf381da990d)。运行时安装器会用插件内 patches/ninfer-dflash-checkpoints.patch 编译固定上游版本,以支持 DFlash/DFlash2 磁盘快照等;不会静默替换已有 profile 与二进制。模型权重仍由用户自行准备;插件不实现 GGUF→NInfer 转换。NInfer 使用 .ninfer 产物。可选 scripts/fetch-ninfer.py 可拉取固定 stock OCI 二进制,该 stock 二进制不支持 DFlash 磁盘 checkpoint。

自编译前提包括 Git、CMake 3.24+、Ninja、兼容的 C++ 编译器、CUDA 13.1(含 NVTX3 头)、FFmpeg/cURL 开发包;默认目标为 Linux x86_64 Blackwell sm120a。示例:

CMAKE=/path/to/cmake npm run build:checkpoints -- --root /path/to/runtime --arch 120a --jobs 8

NINFER_CMAKE_ARGS 可传 JSON 数组作为额外 CMake 参数。构建产物中在 profile 里选择 build/apps/ninfer-serve 可执行文件。

安装与启用

要求 DeepSeek Harness 0.2.1-rc.2,并以 Web profile 运行。

  1. 打开 Plugins → Add plugin → GitHub。
  2. 粘贴仓库地址:
https://github.com/averyjohnkucan-arch/dsh-ninfer
  1. 安装并启用插件;按提示刷新浏览器或重启 DSH。
  2. 打开 Settings → Models → NInfer 进行模型与运行时配置。

典型用法流程

下面是一条从「装插件」到「在对话里选模型」的可复现路径,与 README 描述一致。

  1. 按上一节完成安装,进入 Settings → Models → NInfer。
  2. 点击 Add model → Select model files,选中本机 .ninfer 相关文件,执行 Inspect and assign,确认分片与 MTP 无误后保存 profile。
  3. 在 profile 中选择或安装 Runtime(可用已有 engine,或通过插件流程构建/准备;需要 DFlash 磁盘 checkpoint 时需使用带 patch 的构建,而非仅 stock OCI 二进制)。
  4. 按需调整 All engine CLI options 或完整 JSON;若模型支持 reasoning,配置各档位与默认值。
  5. 点击 Start,等待 runtime/model pack 准备与服务启动(可取消进行中的安装/准备)。
  6. 保存后,在 DSH 对话界面的模型选择器中选择该模型开始推理。

若已有外部 ninfer-serve 在跑,可用 Attach running server 挂接,前提是端口与 /v1/models 中的模型 ID 与 profile 一致。

更新、禁用与数据位置

通过 DSH 插件管理器可单独更新该仓库。关闭插件开关会移除卡片、provider 注册与工具,并停止插件拥有的服务;卸载 bundle 会移除代码。已保存的 profile 与运行时数据默认留在:

~/.dsh/dsh-ninfer/

或 $DSH_HOME/dsh-ninfer/。重装可恢复;若要彻底清空需自行删除该目录。

适用场景与注意

适合:已在或计划在本机用 NInfer 跑 .ninfer 模型,并希望 profile、引擎参数、启动/附着与 DSH 对话模型列表在同一套 Web 设置里维护的开发者。

注意:

  • 插件在 当前 DSH 进程权限 下运行;安装前请阅读源码与 MIT 许可证,并确认只从上述 GitHub 仓库安装。
  • 需要 DSH 0.2.1-rc.2 与 Web profile;Node 引擎要求 >=22.19(见 package.json)。
  • 不提供 GGUF 转换;权重与 CUDA/编译环境需自行满足 README 中的运行时前提。
  • 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属「一切皆插件」生态中的第三方条目。

结尾

dsh-ninfer 把 NInfer 的本地推理与可编辑 server profile 收进 DSH 的模型设置与 LLM 适配层,并附带 Qwen3.8 27B 参考配置,便于对照引擎参数与目录结构。进一步细节以仓库 README 为准:

  • 目录页:https://www.skillhub.cn/plugins/averyjohnkucan-arch/dsh-ninfer
  • GitHub:https://github.com/averyjohnkucan-arch/dsh-ninfer
羽毛球分组比赛记分
小程序二维码

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

Xiaoye