权重已发布:conanfans/ced-csa2-qwen3.5-4b-kv-adapters(ModelScope · CED 投影器约 10MB + CSA2 适配器 3 组)
在 Qwen3.5-4B(32 层混合架构:8 层全注意力 + 24 层 GatedDeltaNet)上,复现 DeepSeek V4.1 技术报告的两个核心 KV 压缩设计,训练得到的两个可插拔权重文件:
projector_k20v20.pt):第 16 层切分,用第 16 层隐藏态 H_16 直接投影出解码段第 20 层(首个全注意力层)所需的 K/V,替代该层的 k_proj/v_proj 计算。Linear(2560 → 2048),5.24M 参数(约 10MB FP16)。adapters.pt):解码段 4 个全注意力层(20/24/28/32)共享第 20 层的 1 份 KV;第 24/28/32 层各配一组 K/V 映射适配器(Linear 基座 + ResidualMLP 残差),从第 20 层 KV 生成各层所需 KV。每组约 8.4M 参数。输入 -> 第 1~16 层(编码器) -> H_16
H_16 --[CED 投影器 2560->2048]--> K/V_20(第 20 层 KV,共享 1 份)
K/V_20 --[适配器 layer24]--> K/V_24
K/V_20 --[适配器 layer28]--> K/V_28
K/V_20 --[适配器 layer32]--> K/V_32
解码段第 17~32 层只处理生成 token;DeltaNet 层状态为已知近似
CED 省"算":解码段全注意力层不再各自算 KV;CSA2 省"存":4 层 KV 收敛为 1 份共享存储。K/V 注入点在层内 k_norm 与 RoPE 之前(pre-norm / pre-RoPE),各层自己的归一化和位置编码照常作用。
H_16 (L,2560) + 第 20/24/28/32 层真实 K/V (L,1024) × 4;| 指标 | 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) | 持久/落盘口径;运行时驻留需惰性物化 |
| 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 |
两个读法:CED 几乎免费(PPL 只 +0.27%,因为投影目标是单一确定映射);代价集中在 CSA2(+5.3%,跨层 KV 余弦相似度接近 0,适配器映射是必然代价),但换来了 3.44x 存储压缩,且任务分数不掉。
import torch
from ced_csa2.projector import load_projector
from ced_csa2.csa2 import load_adapters
from ced_csa2.model_utils import load_model_and_tokenizer
model, tokenizer = load_model_and_tokenizer() # Qwen/Qwen3.5-4B
projector, _ = load_projector("projector_k20v20.pt") # CED 投影器
adapters = load_adapters("adapters.pt", device="cuda",
dtype=next(model.parameters()).dtype)
# 配合 ced_csa2/ced_runtime.py 的 CEDModeARuntime / CEDModeBRuntime 使用
全部模块源码(M0–M10)见站内代码检视文章;设计背景见DeepSeek-V4.1-Flash 推理加速解读。
如使用本权重,请说明复现自 DeepSeek V4.1 技术报告的 CED/CSA2 设计(研究用途复现)。