Cache-to-Cache
让不同大模型绕过文本,以 KV 缓存直接交换语义。
- 源仓库
- thu-nics/C2C
- Star 数
- ★ 686
- 最近更新
- 7 天前
- License
- Apache-2.0
- 主语言
- Python
- FA 评分
- 43/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台
- 费用
- 免费,无需付费服务
- 上手难度
- 高 · 需要较重的基础设施
- 开始前需要
- 典型场景
- 研究多模型协作的团队,用 Qwen、Llama 等模型对测试 KV-Cache 通信与传统文本通信的差异。
- 不适合
- 只需要标准文本消息传递的多智能体团队
- 无法提供模型权重、检查点和推理算力的用户
- 需要成熟多共享模型生产服务的团队
这个 Agent 能做什么,适合哪些场景?
Cache-to-Cache(C2C)是一个用于大语言模型间直接语义通信的 Python 项目,其主包名为 `rosetta`。它通过 `C2CProjector` 将共享模型的 KV-Cache 投影到接收模型的表示空间,再由 `RosettaModel` 将投影结果融合进生成过程,从而省去中间文本生成。项目提供可下载的预训练 Fuser、交互式聊天脚本、Gradio 演示、监督微调脚本和统一评测器;生成结果仍由接收模型输出为文本。训练时只更新投影器参数,源模型与目标模型保持冻结,并支持通过配置加入自定义投影器、数据集和评测任务。官方给出的实验结论是:相对单模型准确率提高 8.5–10.5%,相对文本通信性能提高 3.0–5.0%,延迟获得 2.0 倍加速。它适合具备本地模型和 GPU 推理条件、希望研究或集成模型级隐状态通信的团队,而不是可直接接入 ChatGPT、Claude 或通用智能体协议的成品服务。
完整流程从加载接收模型和共享模型开始:AutoModelForCausalLM 或 load_rosetta_model 读取模型,C2CProjector 按层转换共享模型的 KV-Cache,RosettaModel.set_projector_config 建立源层、目标层和投影器之间的映射。调用 RosettaModel.generate 时,kv_cache_index 指定序列中的哪些位置应用哪个共享模型的缓存投影;接收模型融合这些表示后生成最终文本。预训练路径可通过 huggingface_hub.snapshot_download 获取 nics-efc/C2C_Fuser 中的检查点;script/playground/live_chat_example.py 支持单个或多个共享模型。训练由 script/train/SFT_train.py 读取 recipe/train_recipe/ 中的配置,只优化投影器;评测由 script/evaluation/unified_evaluator.py 读取 recipe/eval_recipe/ 中的配置并计算数据集指标。项目还提供 script/playground/gradio_demo.py,并公布了一个独立的 Hugging Face 在线演示。
- 研究多模型协作的团队,用 Qwen、Llama 等模型对测试 KV-Cache 通信与传统文本通信的差异。
- 已有本地 Hugging Face 因果语言模型的工程师,为指定接收模型和共享模型训练专用 C2C Fuser。
- 需要复现实验的研究人员,使用训练配方和
unified_evaluator.py在自有数据集或基准上测量效果。 - 原型开发者通过
live_chat_example.py展示单共享模型或多共享模型共同影响接收模型回答。 - 模型架构研究者实现新的
Projector、数据适配器或评测逻辑,并通过项目注册与配置机制接入。
如何安装或部署这个 Agent?
创建项目指定的 Python 3.10 环境并以可编辑模式安装核心包:
conda create -n rosetta python=3.10
conda activate rosetta
pip install -e .训练和评测需要额外依赖:
pip install -e ".[training,evaluation]"官方推理示例明确选择 torch.device("cuda"),因此照搬该示例需要可用的 CUDA 环境。下载已发布 Fuser 时还需要网络访问 Hugging Face;示例没有声明必须配置 API 密钥。
如何使用这个 Agent?
最短的已发布权重用法是下载 Fuser、加载 RosettaModel,再用 kv_cache_index 指示何时注入共享模型缓存:
import torch
from huggingface_hub import snapshot_download
from script.playground.inference_example import load_rosetta_model, run_inference_example
checkpoint_dir = snapshot_download(
repo_id="nics-efc/C2C_Fuser",
allow_patterns=["qwen3_0.6b+qwen2.5_0.5b_Fuser/*"],
)
model_config = {
"rosetta_config": {
"base_model": "Qwen/Qwen3-0.6B",
"teacher_model": "Qwen/Qwen2.5-0.5B-Instruct",
"checkpoints_dir": f"{checkpoint_dir}/qwen3_0.6b+qwen2.5_0.5b_Fuser/final",
}
}
rosetta_model, tokenizer = load_rosetta_model(model_config, eval_config={}, device=torch.device("cuda"))
device = rosetta_model.device
prompt = [{"role": "user", "content": "Say hello in one short sentence."}]
input_text = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True, enable_thinking=False)
inputs = tokenizer(input_text, return_tensors="pt").to(device)
instruction_index = torch.tensor([1, 0], dtype=torch.long).repeat(inputs['input_ids'].shape[1] - 1, 1).unsqueeze(0).to(device)
label_index = torch.tensor([-1, 0], dtype=torch.long).repeat(1, 1).unsqueeze(0).to(device)
kv_cache_index = [instruction_index, label_index]
with torch.no_grad():
sampling_params = {
'do_sample': False,
'max_new_tokens': 256
}
outputs = rosetta_model.generate(**inputs, kv_cache_index=kv_cache_index, **sampling_params)
output_text = tokenizer.decode(outputs[0, instruction_index.shape[1] + 1:], skip_special_tokens=True)
print(f"C2C output text: {output_text}")已有检查点也可用于交互聊天;多共享模型模式传入多个检查点路径:
python script/playground/live_chat_example.py --checkpoint_dir path/to/checkpointpython script/playground/live_chat_example.py --checkpoint_dir path/to/ckpt1 path/to/ckpt2训练与评测分别使用项目提供的配置配方:
python script/train/SFT_train.py --config recipe/train_recipe/C2C_0.6+0.5.jsonpython script/evaluation/unified_evaluator.py --config recipe/eval_recipe/unified_eval.yaml这个 Agent 有哪些优点和局限?
- 绕过中间文本生成,直接投影并融合 KV-Cache;这是相对传统文本式模型通信的核心差异。
- 提供七组 Qwen/Llama 接收者与共享者的预训练 Fuser,同时支持不同隐藏维度、层数、注意力头和分词器。
- 训练只更新 C2C 投影器,源模型和目标模型保持冻结,减少了修改基础模型的范围。
- 覆盖推理、交互聊天、Gradio 演示、单机或多 GPU 训练及统一评测,并开放投影器、数据集和基准扩展点。
- 已发布检查点仅覆盖列出的 Qwen 与 Llama 模型组合;其他组合需要自行配置并训练投影器。
- 示例依赖本地加载多个模型、检查点和 CUDA 推理,部署成本明显高于简单的文本 API 编排。
- 多共享模型支持被明确标为初步阶段,相关接口和生产可靠性仍可能变化。
- 仓库只预告未来提供 agent-managed KV-Cache 及其服务系统,当前材料没有给出完整生产服务部署方案。
- 没有文档证明其原生集成 ChatGPT、Codex、Claude、OpenAI API、Claude API 或 MCP。
这个 Agent 与同类方案有什么区别?
与文本式模型通信相比,C2C 不先把共享模型的知识解码为文本,而是把其 KV-Cache 投影并融合到接收模型中。项目报告其性能比文本通信高 3.0–5.0%,延迟加速 2.0 倍;相对单模型准确率高 8.5–10.5%。这些数字是项目给出的总体结果,材料没有列出逐模型、逐数据集的明细,也没有与其他具名框架进行比较。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Cache-to-Cache 当前 | 43 · 缺口较多 | 代码库 / SDK免费 | ★ 686 | 7 天前 | Python | — |
| JARVIS / HuggingGPT | 36 · 缺口较多 | 自托管服务免费 + 模型费 | ★ 25k | 1 年前 | Python | OpenAI API |
| AgileRL 强化学习库 | 71 · 存在缺口 | 代码库 / SDK免费版 + 付费版 | ★ 951 | 1 天前 | Python | — |
| AutoResearch 自动研究员 | 52 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 97k | 6 个月前 | Python | Codex · Claude Code |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
运行示例以本地模型推理为主,工作流也仅声明 contents: write,权限范围相对明确;但该写权限会在 main 分支推送后自动修改并提交文件,没有人工确认或回滚说明。README 明示从 Hugging Face 下载模型及检查点,但未完整说明数据集、提示词、生成内容、可选 OpenAI/W&B 集成可能产生的数据流,也没有敏感数据或凭据处理指南。核心依赖有精确版本,但可选依赖多为宽松或无版本约束,GitHub Action 使用可变标签且未展示漏洞扫描或供应链控制。论文作者、引用信息和外部资源提供了较强来源归属,但包元数据仍含 your-org 占位链接,削弱了归属完整性。
README 的 C2C/Rosetta 说明、示例和目录结构大体连贯,且列出可获取的模型与检查点;然而项目描述、主页链接、Python 支持声明、许可证信息彼此不一致,因此只能给有限的一致性分。核心依赖和模型来源明确,有利于普通安装,但外部模型、数据集和网络可用性仍是未处理的依赖。所给材料没有异常处理、诊断提示、常见错误或恢复指导,故 failure_messages 为零。
文档覆盖预训练推理、聊天、训练、评估以及扩展 projector、数据集和 benchmark,面向研究者与开发者的场景较清楚。kv_cache_index、模型角色和配置入口有具体示例,因此触发控制尚明确;但“任意 LLM 对”与自动处理各种架构差异的边界缺少兼容性条件或反例,多 sharer 也明确仍处于初步阶段。环境只给出 Python 3.10 和安装命令,示例硬编码 CUDA,未说明 CPU、显存、平台、离线运行或硬件下限;pyproject 的 Python 版本配置之间亦有冲突。
README 的安装、使用、训练、评估、扩展和代码结构组织完整,信息架构优秀,并提供多种可操作示例。扣分点包括没有 FAQ/故障排查、限制说明很少、C2C/Rosetta/Unified Memory 命名及项目 URL 不稳定。LICENSE 是 Apache-2.0,但 pyproject 同时声明 MIT 文本和 MIT classifier,这是实质性许可证冲突,因此 license 为零。版本仅为 0.1.0/Alpha,News 不是正式变更日志;作者与组织可见,但没有明确维护者、支持渠道、发布政策或安全更新责任。
示例产生可直接解码的文本输出,并给出聊天、训练和评估入口,普通研究用途的输出可用性较好。通过 KV-cache 语义通信相对单模型或文本通信具有清楚的潜在增量价值,README 也给出准确率和延迟提升数字;但这些数字在所给文件中主要是摘要式主张,未附实验表、统计细节或资源成本。双模型、投影器训练、GPU 和外部检查点带来的计算、存储及运维成本没有量化,因此成本收益只获薄分。
主要性能主张可追溯到署名论文链接,复现实验入口、配置目录和支持模型对也被具体指出,因此具备一定声明可追踪性。可是所给证据没有论文正文、测试结果或独立来源来交叉印证数值,README 与 pyproject 还存在许可证、名称、URL 和 Python 支持冲突。营销式的“任意 LLM”支持及性能表述没有清楚区分已验证事实、推断和预期能力,所以事实—推断分离较弱。
- 源码中未见:敏感信息处理使用专用、低权限、可随时吊销的 API 密钥,不要复用生产凭据,也不要让密钥出现在日志里。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 许可证存在直接冲突:根目录 LICENSE 为 Apache-2.0,而 pyproject 同时声明 MIT;在分发或集成前必须由维护者澄清。
- main 分支 push 会触发具有 contents: write 权限的工作流自动改写并推送文件;采用前应限制权限、固定 Action 提交版本,并建立审查和恢复机制。
- 不要把提示词、私有数据集或敏感输出交给可选的远程服务,除非先核实 OpenAI、W&B、Hugging Face 及数据加载路径的实际数据流和保留政策。
- 性能提升、2倍延迟加速和“任意 LLM 对”兼容性仅应视为待独立验证的项目主张;还需核实 GPU/显存成本和具体模型架构兼容性。