dsh-plugin-c2c:在 DSH 裏用 KV-cache 融合驅動雙本地模型協作

前言

在 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。

社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態遵循「一切皆插件」,是否採用需自行評估環境與許可。

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

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

小夜