Skip to content

模型量化——将 32-bit 浮点权重压缩到 2~8 bit,用精度换内存和速度,是本地推理的核心技术。

为什么需要量化

DeepSeek V4 Flash 有 284B 参数。如果用 F32 存储:

284B × 4 bytes = 1.136 TB — 消费级硬件完全无法容纳

量化将每个权重从 32 bit 压缩到 2~8 bit:

Q2_K:  284B × ~0.33 bytes ≈ 94GB → 实际文件约 81GB(含元数据)
Q4_K:  284B × ~0.56 bytes ≈ 159GB
Q8_0:  284B × 1 byte ≈ 284GB

量化是本地推理的前提——没有量化,消费级硬件无法运行这个模型。

核心原理

块量化(Block Quantization): 每 256 个权重为一组

Q2_K 块(84 字节 / 256 权重 = 2.625 bit/权重):
  scales[16]  — 16 组缩放因子(每组 16 个权重共享)
  qs[64]      — 256 个 2-bit 值(64 × 4 = 256 bits)
  d           — 全局缩放(float16)
  dmin        — 全局最小值偏移(float16)

反量化: weight_float = (qs_value - dmin) × scales[group] × d

非对称量化:缩放因子和偏移允许权重分布不对称(不像对称量化强制零中心),对 2-bit 这种极端量化特别重要。

在 ds4.c 中的实现

量化类型用途每权重 bit
Q2_K / IQ2_XXSMoE 路由专家~2-2.6
Q4_K注意力投影、MoE 门控~4.5
Q8_0 / Q8_K共享专家、高精度路径8
F16嵌入层、输出层16

dequantize_row_*() 函数族将量化块还原为 float32 进行计算。GPU kernel 内联反量化。

Q4_K 路由专家(PRO 模型)

DeepSeek V4 PRO 模型的路由专家全部使用 Q4_K 量化。ds4 新增了 CPU 端的 Q4_K 路由专家推理支持:

  • block_q4_K:144 字节/block,256 元素/block,含 super-block scales 和 min values
  • ds4_vec_dot_q4_K_q8_K():Q4_K × Q8_K 点积,ARM NEON dot-product 指令加速
  • matvec_q4_k_experts_mid_prequant():使用预量化 Q8_K 激活执行 gate+up 矩阵-向量乘
  • matvec_q4_k_experts_accum_prequant():down 投影累积

相关概念

  • gguf — 量化权重以块为单位存储在 GGUF 文件中
  • moe — 不同专家使用不同量化级别(共享专家用高精度,路由专家用低精度)
  • mmap — 量化后的模型文件通过 mmap 按需加载

详见 Part 3 — 量化与矩阵运算