quantization_report.json深度解读:看懂DeepSeek-V4.1-Flash-1017-oQ3e-ngram-mtp的8种位宽分配与敏感度校准
DeepSeek-V4.1-Flash-1017-oQ3e-ngram-mtp 是 DeepSeek-V4.1-Flash-1017(552B MoE 多模态模型)的 MLX 混合精度量化版本。仓库里的 quantization_report.json 就像一份"量化体检报告":763.2B 参数如何被压缩到 428.174 GiB、每层分到几 bit、哪些模块被特意保留——全部有据可查。📊
量化前后对照:763B 参数变成了多大?
先看 quantization_report.json 最顶层的几个数字:
| 指标 | 数值 | 含义 |
|---|---|---|
| 总逻辑参数量 | 763.205B | 语言主干 + Engram 表 + 视觉编码器 + MTP 头 |
| 总存储 | 459.748 GB ≈ 428.174 GiB | 65 个 safetensors 分片 |
| 整体平均位宽 | 4.819 bits/weight | 含 Engram 表 |
| 排除 Engram 后位宽 | 3.629 bits/weight | 即 oQ3e 的"3e"含义 |
| Engram 表 | 196.61B 参数 / 8.25 bits/weight | 保持源模型 FP8 精度 |
| 分片数 | 65 | model-00001-of-00065.safetensors~model-00065-of-00065.safetensors |
一个直观的理解:原版 BF16 权重需要约 1.5 TiB 存储,量化后约为原来的28%,这就是它能在 MLX 设备上跑起来的原因。
8种位宽分配:一张表看懂存储格式
模型并没有"一刀切"地用 3 bit,而是把 460 个量化模块(可在 config.json 的quantized_modules中逐一查到)分配到 8 种非 Engram 存储格式中:
| 存储格式 | 逻辑权重 | 占比 | 有效位宽 | 典型用途 |
|---|---|---|---|---|
| Affine 3-bit, group 64 | 543.582B | 71.2% | 3.50 | 路由专家 FFN(ffn.experts) |
| Affine 4-bit, group 64 | 2.055B | 0.27% | 4.50 | 注意力投影(wq_a/wq_b/wkv) |
| MXFP4, group 32 | 13.590B | 1.78% | 4.25 | MTP 头专家 |
| Affine 6-bit, group 64 | 1.258B | 0.17% | 6.50 | 中低敏感度层的wo_b输出投影 |
| Affine 8-bit, group 64 | 1.886B | 0.25% | 8.50 | 高敏感度层的wo_b与共享专家 |
| MXFP8, group 32 | 0.779B | 0.10% | 8.25 | MTP 头注意力/共享专家 |
| BF16 | 3.399B | 0.45% | 16.00 | 未校准模块按源精度保留 |
| FP32 | 0.042B | 0.006% | 32.00 | 少量保留的源精度参数 |
| Engram MXFP8, group 32 | 196.614B | 25.76% | 8.25 | Engram n-gram 条件记忆表 |
规律一目了然:占参数量 71% 的路由专家被压到 3-bit(因为每个 token 只激活 384 个专家中的 6 个,压缩收益最大),而注意力、输出投影等"小但敏感"的部分则按层敏感度拿到 4~8-bit。
敏感度校准:哪些层分到了更多 bit?
这是这份报告最核心的部分。allocation字段的值为measured_layer_sensitivity_affine,意思是:先实测每一层对量化的敏感度,再按敏感度线性分配位宽。
sensitivity字段记录了 40 个 Transformer 层(与 config.json 中num_hidden_layers: 40对应)的实测敏感度:
| 层 | 敏感度 | 层 | 敏感度 |
|---|---|---|---|
| 39(最高) | 0.07297 | 20 | 0.00698 |
| 15 | 0.03366 | 30(最低) | 0.00663 |
| 18 | 0.03183 | 27 | 0.00759 |
| 17 | 0.02677 | 24 | 0.00895 |
| 16 | 0.02603 | — | — |
最高层(第 39 层)的敏感度是最低层(第 30 层)的约 11 倍。分配结果在 config.json 中清晰可见:
- 第 39 层是全模型唯一
wq_a/wq_b/wkv/wo_b全部拿到 8-bit的层; - 第 6、7、14、15、16 层等中高敏感层,
wo_b输出投影为 8-bit,其余注意力投影为 4-bit; - 第 0、8、22、23、30、31、38 层等低敏感层,
wo_b降为 6-bit; - 所有 40 层的
shared_experts统一 8-bit,ffn.experts统一 3-bit。
位宽分配还受两道"预算闸门"约束:target_bpw: 3.5(目标 3.5 bit)和hard_cap_bpw: 3.7(硬性上限 3.7 bit),最终排除 Engram 后实测为 3.629 bit,落进预算区间。
校准细节:oQ 使用一个重要性矩阵(imatrix,1024 个样本 × 512 个 token)来估计输入激活分布,对每个量化组做带权重最小二乘的 scale/bias 重拟合,而不是简单的均方差量化。报告中imatrix_applied_modules列出了全部 460 个受益模块。
三类例外:Engram、MTP 与未校准模块
Engram 表:直接沿用源模型 FP8
engram块显示 196.61B 的 n-gram 条件记忆表保持precision: "source"(即源模型 E4M3 值的 MXFP8,每 32 通道一个 E8M0 缩放),不计入 3.5-bit 预算。原因是 oMLX 支持把 Engram 表放到 SSD 上按需读取(Engram SSD offload),不占常驻内存,没必要为它牺牲精度。budget_scope字段也明确写着remaining_weights_excluding_engram。
MTP 头:preserve_mtp: true
3 个 DSpark 投机解码预测层(language_model.mtp.0/1/2)不走敏感度分配:注意力和共享专家用 MXFP8、专家用 MXFP4,对应 config.json 中 9 个mxfp4与 26 个mxfp8条目。报告里它们被标记为uncalibrated,按uncalibrated_policy: "preserve_source_precision"的兜底策略处理。
未校准模块:按源精度原样保留
preserved_modules记录了 2401 个未参与敏感度分配的张量(preserved_source_draft_tensors: 2401),固定存储约 13.96 GB(fixed_source_bytes: 14,990,291,784),原因分四类:
| 标记 | 含义 | 例子 |
|---|---|---|
precision_policy | 精度策略保留 | vision.patch_embed.proj、aligner 等视觉模块 |
ineligible_shape | 形状不适合量化 | 各层q_norm/kv_norm/attn_norm等 1D 归一化参数 |
uncalibrated | 未在校准样本中观测到 | ffn.gate、wo_a、embed、head、MTP 各模块 |
outside_layer_sensitivity | 不属于 40 层敏感度体系 | 第 1、14 层的engram.wkv |
另外expert_coverage显示 46080 个专家中有 46071 个在校准数据里出现过(活跃率 99.98%),中位激活 5947 次;个别未观测到的专家按uniform_importance_at_allocated_bits策略直接以分配位宽量化。
报告关键字段速查
| 字段 | 值 | 一句话解读 |
|---|---|---|
oq_level | 3 | oQ3e 档位的"3" |
enhanced_requested | true | 启用了增强版 oQe 量化 |
allocation | measured_layer_sensitivity_affine | 按实测敏感度分配位宽 |
target_bpw/hard_cap_bpw | 3.5 / 3.7 | 位宽预算目标与硬上限 |
tensor_bytes | 459,747,934,040 | 全模型存储字节数 |
storage_layout | unified_safetensors_index | 统一索引,对应 65 个分片 |
想核对某个具体模块的位宽,可直接在 config.json 搜索模块路径(如language_model.layers.15.attn.wo_b);想定位某个权重在哪个分片,则查 model.safetensors.index.json。
总结
读完 quantization_report.json,这份量化方案的逻辑可以浓缩成三句话:
- 能省的省到位——71% 的 MoE 专家压到 3-bit,整体排除 Engram 后 3.629 bits/weight,763B 模型只需 428 GiB;
- 该保的精准保——按实测敏感度把 4/6/8-bit 倾斜给敏感层,第 39 层全 8-bit 是全场"待遇"最高的一层;
- 不该动的不动——Engram 表保持源 FP8 走 SSD,MTP 头与 2401 个未校准张量按源精度保留。
这就是混合精度量化"数据说话"的完整证据链,也是评估同类量化模型(如 README.md 中提到的 oQ3e-mtp 系列)时值得对标的做法。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考