Appearance
量化 (Quantization) 将模型权重从高精度浮点数压缩为低比特整数,减少内存占用和计算量。
为什么需要 quantization
LLM 模型通常需要数十 GB 内存(如 LLaMA-70B F16 需要 ~140GB)。量化将权重量化到 4-8 bits,使模型能在消费级硬件上运行,同时保持可接受的精度损失。
核心原理
GGML 使用 Block Quantization 方案,以 block(通常 32 个权重)为量化单位:
Block Q4_0 (18 bytes / 32 weights = 4.5 bits/weight):
┌──────────┬─────────────────────────┐
│ d (F16) │ 16 × uint8 │
│ 缩放因子 │ 每个 uint8 存 2 个 4-bit 值 │
└──────────┴─────────────────────────┘
反量化: weight[i] = (quantized[i] - 8) × d量化类型层级:
- 基础量化 — Q4_0, Q4_1, Q5_0, Q5_1, Q8_0
- K-quant — Q2_K, Q3_K, Q4_K, Q5_K, Q6_K(混合精度)
- I-quant — IQ2, IQ3, IQ4(重要性加权的超低比特)
精度排序:F16 > Q8_0 > Q6_K > Q5_K > Q4_K > Q3_K > Q2_K
在源码中的实现
ggml/include/ggml.h—ggml_type枚举定义ggml/src/ggml-quants.c— 量化/反量化实现ggml/src/ggml-cpu/ggml-cpu-quants.c— CPU 量化 kerneltools/quantize/— 量化命令行工具