前言¶
在 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 生態遵循「一切皆插件」,是否採用需自行評估環境與許可。