前言¶
在 DeepSeek Harness(DSH)里做多模型协作时,常见做法是一个模型把结果写成文本,再交给下一个模型读入。这条通道受 token 表达力限制,中间状态里「写不出来」的信息到不了接收方。
Cache-to-Cache(C2C)的思路是把 sharer 的 KV-cache 投影并融合进 receiver 的 cache,让接收方在生成前就从更完整的工作状态起步,而不是先走一遍文本交接。社区插件 dsh-plugin-c2c(维护者 Alyosha28,分类:工作流)把上游 thu-nics/C2C 运行时封装成一组 c2c_* 智能体工具,供 DSH 会话在本地调用。
这是什么¶
dsh-plugin-c2c 是 DSH 插件,版本 0.1.0(MIT 许可证)。它不重新实现 C2C 算法,而是打包上游 rosetta 运行时:本地同时跑一个 receiver(负责作答)和一个或多个 sharer,在 receiver 生成任何 token 之前,把 sharer 的 KV-cache 投影到 receiver 的 cache 空间并融合;两模型之间不传文本。
架构上,DSH 智能体通过 c2c_* 工具经 loopback HTTP 访问 c2c_daemon.py,daemon 再调用 PyTorch 侧的 receiver、sharer 与 C2C projectors。Node 插件不 import Python 或 torch,按需拉起 daemon 并转发请求,避免 Python 环境问题拖垮 DSH 启动。
核心功能¶
插件暴露六个智能体工具:
| 工具 | 作用 |
|---|---|
c2c_status |
查看 daemon 与加载状态 |
c2c_models |
列出可用 fuser 模型对 |
c2c_load |
加载并构建融合模型 |
c2c_chat |
在融合条件下作答 |
c2c_compare |
同一 prompt 下对比「融合」与「仅 receiver」 |
c2c_unload |
释放设备显存/内存 |
上游自带七组 fuser 对,规模从 0.6B+0.5B 到 8B+7B;README 称最小一对可在笔记本上运行。
README 中强调的实际用途包括:融合后两个小模型能答出单独任一模型答不好的题;sharer 与 projectors 在 prompt 阶段只跑一遍,解码成本与仅 receiver 相当;权重、投影与生成均在本地,daemon 仅绑定 loopback,除首次从 Hugging Face 拉权重外无对外请求;daemon 生命周期可长于插件 realm,profile 热重载不必然卸掉已加载对;上游以 Linux+CUDA 为主,该插件在 Apple Silicon(MPS)上做过移植与验证。
论文报告相对单模型与纯文本交接有精度提升;插件 README 明确说明未在此复现论文精度实验,已验证的是管线能端到端跑通及文档中的性能数字(见下文「环境与限制」)。
安装与启用¶
安装分两步:先准备 C2C 运行时(克隆上游、建 venv、固定 transformers),再向 DSH profile 注册插件。setup 一步不下载权重;约 3.2 GB 模型文件在首次 c2c_load 时下载,缓存在 <root>/models/hf。
1、准备运行时(路径可按需修改 --root):
python python/dsh_c2c_setup.py --root ~/factor_digging/c2c --verify
2、安装插件(须使用资料中的 profile 与仓库标识):
dsh plugin --profile web add Alyosha28/dsh-plugin-c2c
3、重启 DSH 会话。使用 patchReload: startup 的 profile 会在启动时加载插件。
默认无需改配置:repoRoot 与 pythonPath 可自动检测。若需覆盖,在 profile 的 cordis.patch.yml 中设置,例如:
- id: c2c
config:
repoRoot: /path/to/c2c # default: auto-detect
pythonPath: /path/to/python # default: <repoRoot>/.venv/bin/python
port: 8765 # loopback daemon port
idleUnloadSeconds: 900 # 0 disables idle release
loadTimeoutSeconds: 600
环境与依赖(来自 README):
- Node >= 20(package.json
engines)。 - Python 3.10–3.13。
- macOS(MPS)、Linux(CUDA)或 CPU;8B+7B 对建议约 32 GB+ 设备内存。
- setup 脚本将 transformers 固定为 4.52.4(上限而非下限);更高版本可能破坏 KV-cache 融合路径。
- 需要 accelerate(上游 loader 使用
device_map=)。
插件以当前 dsh 进程权限运行;安装前请自行审阅 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。
典型用法¶
在 DSH 智能体会话中,可按 README 示例顺序操作:
c2c_load pair: qwen3_0.6b+qwen2.5_0.5b # build the fused model
c2c_chat prompt: "..." # answer through the fusion
c2c_compare prompt: "..." # fused vs receiver-alone, side by side
c2c_unload # release device memory
c2c_compare 对同一 prompt 跑两次:一次融合 sharer,一次仅 receiver,便于观察融合是否带来差异。
不依赖 DSH 时,也可手动启动 daemon 并用 curl 探测(路径替换为你的 repo-root):
python python/c2c_daemon.py --repo-root /path/to/c2c --port 8765
curl -s localhost:8765/models
curl -s -X POST localhost:8765/generate \
-H 'content-type: application/json' \
-d '{"prompt":"Say hello.","mode":"c2c","max_new_tokens":48}'
适用场景与注意¶
适合谁: 已在用 DSH、希望在本地做双小模型 KV 融合实验或对比「文本交接 vs cache 融合」的开发者;需要 Apple Silicon 或纯本地、无出站推理 API 的场景。
注意:
- MPS 上不要启用 sampled decoding;README 指出
torch.multinomial在 MPS 上可能返回零概率索引,默认 greedy 不受影响。 - 冷加载需数秒,底层模型不适合并发生成,daemon 用锁串行化请求。
@deepseek-ai/*为 peerDependencies,运行时从$DSH_HOME/profiles/node_modules解析;若用dsh plugin add <path>做符号链接开发,需在 checkout 内pnpm install以拉齐 peer。
README 在 arm64 Mac(48 GB 统一内存、最小 Qwen3-0.6B + Qwen2.5-0.5B-Instruct 对)上记录的参考数据:加载约 6.9–7.7 s;仅 receiver 解码约 39 tok/s,融合约 64 tok/s;权重约 3.2 GB。你的硬件与 pair 不同则数字会变化。
小结¶
dsh-plugin-c2c 把 C2C 论文思路落成 DSH 可调用的本地工作流:六个 c2c_* 工具、独立 Python daemon、可配置的 idle 卸载与 loopback 服务。若你关心的是「模型之间能否不经过文本传递内部状态」,可以从 setup 与最小 model pair 开始试 c2c_compare。
- 社区目录页:https://www.skillhub.cn/plugins/Alyosha28/dsh-plugin-c2c
- 源码与完整说明:https://github.com/Alyosha28/dsh-plugin-c2c
社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,是否采用需自行评估环境与许可。