FP4 从权重走进 KV 缓存

专家权重 FP4、其余 FP8 的方案 V4.1 原样沿用;新的一步是把主 KV 缓存也用量化感知训练压到 4 bit,而且特意选了和索引器不同的格式。滑动窗口缓存则留在 FP8。

作者 David更新于 13 篇(共 21 篇)

V4 已经把“在参数最多的地方省得最狠”用在了权重上:MoE 专家用 FP4,其余大部分用 FP8 [2]。V4.1 沿用这套权重方案,再把同一个思路推进到了缓存上 [1][3]。

各部件用什么精度

部件V4-FlashV4.1-Flash出处
路由专家权重FP4FP4V4 论文;V4.1 的 config.json 与参考推理代码
其余大部分权重FP8FP8同上
索引器的 Q / KFP4(MXFP4)FP4(MXFP4)两份报告
主 KV 缓存FP8,RoPE 维用 BF16FP4两份报告
滑动窗口 KVFP8,RoPE 维用 BF16FP8两份报告
Engram 嵌入表与投影——FP8V4.1 报告

V4.1 报告没有单独复述专家权重的量化流程,只说优化配置在 V4 的基础上调整;config.json 的量化配置写着 FP8 与 expert_dtype: fp4,参考推理代码的说明里也写着“dense-fp8 / MoE-fp4”的算子 [1][3]。所以权重这一行是沿用。

沿用的部分:专家 FP4 与量化感知训练

V4 在后训练阶段引入量化感知训练(QAT),对象是两处 [2]:

  • MoE 专家权重,这是显存占用的大头。优化器维护的 FP32 主权重先量化到 FP4,再反量化回 FP8 参与计算。V4 论文特意指出这一步反量化是无损的:FP8(E4M3)比 FP4(E2M1)多两位指数,动态范围更大,只要每个 FP8 块里各 FP4 子块缩放因子的比值不超过某个阈值,细粒度的缩放信息就能被 FP8 完全吸收。反向传播直接把梯度传回 FP32 主权重,等价于直通估计器。
  • 索引器的 QK 路径,QK 激活的缓存、读取与乘法全在 FP4 下进行;索引分数再从 FP32 降到 BF16,top-k 选择提速 2 倍,KV 条目的召回率保持在 99.7%。

强化学习采样和推理时,直接用原生 FP4 权重,保证采样行为与线上部署一致 [2]。

量化感知训练和社区常做的事后量化,差别在于模型知不知道自己会被量化:

事后量化(PTQ)量化感知训练(QAT)
做法训完之后把权重压到低精度训练时就让模型在低精度约束下学习
模型知不知道自己被量化不知道知道,并会适应
谁能做任何人,事后即可只有训练方

对使用者的实际意义:官方放出的 FP4 专家权重不是“压缩版”,就是它训练时的形态。

新的一步:主 KV 缓存也用 FP4

V4.1 把量化感知训练扩展到了主 KV 缓存,同样在后训练阶段引入 [1]。这里 FP4 的作用和权重不同:不是为了让矩阵乘法更快,而是为了少占存储。和 V4 的 FP8 主 KV 相比,HBM 里和卸载到 SSD 上的占用都差不多减半 [1]。

为什么格式和索引器不一样

报告的解释很有工程味 [1]:

  • 索引器的 Q、K 要直接参与 FP4 矩阵乘法,必须用硬件原生支持的格式。为了兼容尽可能多的硬件,V4 就选了 OCP 标准的 MXFP4(每 32 个数共享一个缩放),哪怕实验里别的格式更准。
  • 主 KV 缓存在做注意力之前会先反量化,不需要硬件原生支持这种格式的乘法,于是可以挑更准的。

最后选定的格式是:E2M1 数值,每 16 个通道配一个 E4M3 缩放。它仿照 NVIDIA 的 NVFP4,但省掉了 NVFP4 的第二级全局缩放,以兼顾精度与简单。

为什么可以省掉全局缩放

报告做了一个数值上界的推演 [1]:

  • 这种格式能表示的最大绝对值是 448 × 6 = 2688;
  • V4.1 训练出的 RMSNorm 权重最大约为 1,归一化后 512 维 KV 潜向量的 L2 范数至多约为 51222.6\sqrt{512} \approx 22.6;旋转位置编码不改变范数,所以旋转后各通道的最大绝对值也不超过这个数;
  • 训练中实际观察到的最大值只有 10 左右。

动态范围绰绰有余,去掉全局缩放“没有可测量的精度损失”,缓存布局也更简单。

两个细节

  • 在 RoPE 之后量化。先量化再加位置编码只能换来一点点精度,却会给解码增加额外开销;带 RoPE 与不带 RoPE 的部分用同一种格式 [1]。
  • 滑动窗口 KV 留在 FP8,因为它对量化更敏感 [1]。这也说明“哪里压、哪里不压”是逐个部件试出来的。

按这个格式,一条 512 通道的主 KV 占 288 字节;CSA2 那一章用它把每 token 890 字节拆了出来。

这一代的共同选择

把 V4 系列和同期的 K3 并排(K3 的数据见 K3 专栏):

DeepSeek V4 / V4.1Kimi K3
权重精度FP4(专家)+ FP8(其余)MXFP4
训练方式量化感知训练量化感知训练(自 SFT 起)
缓存精度V4:FP8;V4.1:主 KV 为 FP4——

4 bit 权重加量化感知训练,一年前还是激进的实验做法,现在已是前沿开放权重模型的常见配置。V4.1 往前多走的一步是把 4 bit 用到缓存上。

FP4 不是万能的

  • 训练稳定性要求高:4 bit 的动态范围窄,要靠配套的缩放策略兜底,上面那段上界推演就是在证明“这里兜得住”。
  • 硬件支持是前提:FP4 的计算加速要靠硬件原生支持。没有对应算子的卡上,FP4 权重可能要先解压成更高精度再算,省了显存但没省算力。V4 论文也说,现有硬件上 FP4 × FP8 的峰值算力与 FP8 × FP8 相同,未来硬件理论上可以再快约 1/3 [2]。
  • 不是每处都适合压:滑动窗口 KV 就被留在了 FP8。

第四部分的下一章讲后训练。👉 后训练:算法不变,数据与环境放大

参考文献

  • [1] DeepSeek-AI. “DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression.” 2026-09. arXiv:2609.19969 —— 第 2.4.2 节(Engram 的 FP8)、第 2.4.4 节(FP4 主 KV 缓存:格式选择、上界推演、RoPE 后量化、滑动窗口保留 FP8)、第 2.5 节(优化配置沿用 V4)。
  • [2] DeepSeek-AI. “DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence.” 2026-04. arXiv:2606.19348 —— 第 1 节(FP4 × FP8 的算力说明)、第 2.3.4 节(KV 的 BF16 / FP8 混合存储、FP4 索引器)、第 5.2.1 节(专家权重与索引器的 FP4 量化感知训练)。
  • [3] Hugging Face:deepseek-ai/DeepSeek-V4.1-Flashconfig.jsoninference/README.md —— 量化配置与“dense-fp8 / MoE-fp4”算子的说明。

本页目录