Buckets:
| language: | |
| - en | |
| license: apache-2.0 | |
| pipeline_tag: text-generation | |
| tags: | |
| - agent | |
| - communication | |
| arxiv: 2510.03215 | |
| library_name: transformers | |
| This is the C2C Fuser, presented in the paper [Cache-to-Cache: Direct Semantic Communication Between Large Language Models](https://huggingface.co/papers/2510.03215). | |
| Cache-to-Cache (C2C) enables Large Language Models to communicate directly through their KV-Caches, bypassing text generation. By projecting and fusing KV-Caches between models, C2C achieves 8.5–10.5% higher accuracy than individual models and 3.0–5.0% better performance than text-based communication, with 2.0× speedup in latency. | |
| Please visit our [GitHub repo](https://github.com/thu-nics/C2C) for more information. | |
| Project page: [https://fuvty.github.io/C2C_Project_Page/](https://fuvty.github.io/C2C_Project_Page/) | |
| ### Sample Usage | |
| Here's how to load the published C2C weights from the Hugging Face collection and run an inference example: | |
| ```python | |
| 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}") | |
| ``` |
Xet Storage Details
- Size:
- 2.51 kB
- Xet hash:
- e3205459d16aa58e0ceea259304162b71d925bd9fd1e8bff4581c84f39ab53b3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.