---
title: ced-csa2-qwen3.5-4b-kv-adapters
canonical_url: "https://www.modelscope.cn/models/conanfans/ced-csa2-qwen3.5-4b-kv-adapters"
md_url: "https://www.modelscope.cn/models/conanfans/ced-csa2-qwen3.5-4b-kv-adapters.md"
repository: conanfans/ced-csa2-qwen3.5-4b-kv-adapters
last_updated: 2026-09-24
license: apache-2.0
base_model:
  - Qwen/Qwen3.5-4B
base_model_relation: finetune
library_name:
  - pytorch
frameworks:
  - pytorch
language:
  - en
  - zh
downloads: 0
stars: 0
tags:
  - kv-cache
  - ced
  - csa2
  - quantization
  - deepseek-v4.1-reproduction
  - qwen3.5
---

# ced-csa2-qwen3.5-4b-kv-adapters

> ced-csa2-qwen3.5-4b-kv-adapters - conanfans 在 ModelScope 开源的模型。CED + CSA2 复现：KV 投影器与跨层适配器（Qwen3.5-4B）

conanfans/ced-csa2-qwen3.5-4b-kv-adapters 是 ModelScope 魔搭社区上的机器学习模型，采用 apache-2.0 许可，基于 Qwen/Qwen3.5-4B 构建。

- **Repository**: conanfans/ced-csa2-qwen3.5-4b-kv-adapters
- **License**: apache-2.0
- **Base model**: Qwen/Qwen3.5-4B
- **Tags**: kv-cache, ced, csa2, quantization, deepseek-v4.1-reproduction, qwen3.5
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2026-09-24

Source: https://www.modelscope.cn/models/conanfans/ced-csa2-qwen3.5-4b-kv-adapters

---

# CED + CSA2 复现：KV 投影器与跨层适配器（Qwen3.5-4B）

在 Qwen3.5-4B 上复现 DeepSeek V4.1 两个核心 KV 压缩设计的产物权重：

1. **CED 投影器**（`projector_k20v20.pt`）：第 16 层切分，用第 16 层隐藏态直接投影出解码段
   第 20 层（首个全注意力层）所需的 K/V，替代该层的 k_proj/v_proj 计算。
2. **CSA2 跨层适配器**（`adapters.pt`）：解码段 4 个全注意力层（20/24/28/32）共享第 20 层的
   1 份 KV；第 24/28/32 层各配一个 K/V 映射适配器（Linear 基座 + ResidualMLP 残差），
   从第 20 层 KV 生成各层所需 KV。存储口径：解码段 KV 从 4 份压缩到 1 份（趋近 4x）。

## 架构

![CED+CSA2 架构图](architecture.png)

数据流：输入经过第 1~16 层（编码器）得到 H_16；CED 投影器把 H_16 映射为第 20 层 K/V
（共享 1 份）；三个跨层适配器分别把它变换为第 24/28/32 层所需 K/V；解码段第 17~32 层
生成时只处理新增 token，注意力在「共享 KV + 各层自身增量」上进行。

模块与形状：

| 模块 | 输入 -> 输出 | 参数量 |
|---|---|---|
| CED 投影器（projector_k20v20.pt） | H_16 (L,2560) -> K/V_20 (L,1024) x2 | 5.24M |
| 适配器 layer24/28/32（adapters.pt） | K/V_20 (L,1024) -> 各层 K/V (L,1024) | 约 8.4M/层 |

注入点在 pre-norm、pre-RoPE 空间，各注意力层自带的 k_norm 与 RoPE 照常生效。

## 训练数据

- 语料：WikiText-2 raw train 长行 1200 条 + WikiText-103 长行 1200 条，共 2400 条
  （每条 <=512 token，均值 262），fp32 落盘 24GB
- 每条记录：H_16 (L,2560) + 第 20/24/28/32 层真实 K/V (L,1024) x4
- 用途配比：CED 投影器 63 万 token 对 | 适配器 61.5 万对（256/条，95/5 划分）

## 训练配置

- CED 投影器：MSE 损失，AdamW lr 2e-3 + cosine，12 epoch，bf16 GPU
- CSA2 适配器：K/V 闭式解（岭回归 λ=1）初始化 + SGD 微调
  （base lr 3e-4 / refine lr 3e-3 分组，120 epoch，batch 65536）

## 评测结果（Qwen3.5-4B，详见 tests/result/）

| 指标 | baseline | 本权重（CED+CSA2） | 说明 |
|---|---|---|---|
| PPL（WikiText-2 test 100 条） | 12.55 | 13.44（+7.1%） | 消融：CED 单独 +0.27%，CSA2 单独 +5.3% |
| GSM8K（200 题） | 0.735 | 0.740（+0.5pp） | 噪声内（SE 3.1pp） |
| NIAH（50 条） | 0.940 | 0.920（-2pp） | 噪声内 |
| Prefill 加速 | -- | 1.56x @2048 tok | mode_b 延迟口径，生成不可用已单独定性 |
| KV 解码段存储 | 4 份 | 1 份（3.44x，L=73 短序列） | 持久/落盘口径；运行时驻留需惰性物化 |
| KV 量化 k8v4 | -- | 2.46x 压缩，top5 重合 100% | TurboQuant 独立叠加 |

## 消融实验摘要（GSM8K 200 题/组，PPL 100 条）

| 组 | CED | CSA2 | 量化 | PPL | GSM8K |
|---|---|---|---|---|---|
| 基线 | x | x | x | 12.55 | 0.735 |
| 仅 CED | v | x | x | 12.58（+0.27%） | 0.735 |
| 仅 CSA2 | x | v | x | 13.22（+5.32%） | 0.735 |
| CED+CSA2 | v | v | x | 13.44（+7.09%） | 0.740 |
| 全开 | v | v | v | -- | 0.745 |

## 用法（完整可跑示例，已实测）

前置条件：
1. `pip install torch transformers accelerate`（与 Qwen3.5-4B 兼容环境）；
   可选加速：`flash-linear-attention` / `causal-conv1d`（缺失时 DeltaNet 走慢速 torch 回退，仅影响速度不影响结果）。
2. 基座模型 **Qwen/Qwen3.5-4B** 需已在 HuggingFace 本地缓存中（示例用 `HF_HUB_OFFLINE=1` 离线加载）。
3. **请在仓库根目录运行**（`code`、`projector_k20v20.pt`、`adapters.pt` 三个相对路径均以仓库根为基准）。

完整代码（与本仓库实测脚本逐行一致）：

import os, sys, torch
sys.path.insert(0, 'code')                      # 仓库内 code/ced_csa2 包
os.environ.setdefault('HF_HUB_OFFLINE', '1')    # 基座模型已下载时可离线

from ced_csa2.model_utils import load_model_and_tokenizer   # 1. 加载千问基座模型
from ced_csa2.projector import load_projector               # 2. 加载 CED 投影器
from ced_csa2.csa2 import load_adapters                     # 3. 加载 CSA2 适配器
from ced_csa2.ced_runtime import CEDModeARuntime            # 4. 注入运行时

model, tokenizer = load_model_and_tokenizer()   # Qwen/Qwen3.5-4B, bf16, CUDA
projector, _ = load_projector('projector_k20v20.pt')
adapters = load_adapters('adapters.pt', device='cuda',
                         dtype=next(model.parameters()).dtype)

rt = CEDModeARuntime(model, projector, adapters=adapters).attach()
ids = tokenizer('The capital of France is Paris. The capital of Germany is',
                return_tensors='pt').input_ids.cuda()
with torch.no_grad():
    out = model(input_ids=ids)
print(tokenizer.decode(out.logits[0, -1].argmax(-1).view(-1)))   # -> ' Berlin'
rt.remove()                                     # 摘除注入，恢复 baseline

实测输出（4070 Ti SUPER）：[1/3] 权重加载 OK / [2/3] 注入推理 OK，next token: ' Berlin' /
[3/3] k8v4 量化写回 OK。

## 仓库说明

- `code/ced_csa2/` 为运行所需的 Python 包；`code/` 下如见散落的同名 .py 与 `__pycache__`
  为历史残留，可忽略（导入走 `ced_csa2` 包）。
- 首次 `import ced_csa2` 会在 `code/` 下自动创建 `data/logs/outputs` 空目录（默认输出路径），无害。

## 限制与口径

- PPL 口径：WikiText-2 test 100 条；GSM8K 200 题（SE 约 3.1pp，差异 <3pp 视为噪声）
- KV 压缩为「持久/落盘口径」；运行时显存压缩需 attention 内惰性物化（未实现）
- mode_b（prefill 跳过）连续生成不可用（DeltaNet 零状态失忆，已定性为设计代价）
- 量化组为「产物 KV 量化净效果」，与真实 KV 量化不正交
- 全部结论基于 Qwen3.5-4B 混合架构；迁移到标准全注意力架构未验证

## 引用

如使用本权重，请说明复现自 DeepSeek V4.1 技术报告的 CED/CSA2 设计（研究用途复现）。
