📌 一句话理解
量化 = 对模型做有损压缩:降低权重数值的存储精度(如 16-bit → 4-bit),换取更小的体积和更快的推理,代价是输出质量轻微下降。
q4/q8是位宽档位(泛指量化到几 bit)BF16/FP8/NVFP4是数据类型(一个数怎么存)Q4_K_M/GPTQ/W8A8是量化方案(算法 + 缩放策略)
类比图片压缩:
| 图片世界 | LLM 世界 |
|---|---|
| 原始 BMP/PNG(无损) | FP16/BF16 权重(原始精度) |
| JPEG 质量 80% | Q8 量化(几乎无感损失) |
| JPEG 质量 50% | Q4 量化(轻微失真) |
| JPEG 质量 30% | Q2 量化(明显失真) |
为什么能量化:模型权重数值分布集中,大量精度位是"冗余"的,降低精度后对最终输出影响有限。
| 名称 | 类型 | 结构 | 出处 |
|---|---|---|---|
| FP32 | 32-bit 浮点 | 1符号 + 8指数 + 23尾数 | 经典 |
| FP16 | 16-bit 浮点 | 1 + 5 + 10 | 经典 |
| BF16 | 16-bit 浮点 | 1 + 8 + 7(指数位多) | Google Brain,训练主流 |
| FP8 | 8-bit 浮点 | E4M3 或 E5M2 | NVIDIA H100+ |
| NVFP4 | 4-bit 浮点 | E2M1 + 块缩放 | NVIDIA Blackwell(B200) |
BF16 的 "B" = Brain(Google Brain 团队)。与 FP16 同为 16-bit,但指数位更多 → 数值范围大 → 训练不易溢出,大模型训练基本都用 BF16。BF16 通常不是量化,而是量化前的原始精度。
q4、q8 这类写法泛指"量化到几 bit",不指定具体方案。常见于 HuggingFace 模型名(如 Qwen2.5-7B-Instruct-GPTQ-Int4)。
完整方案 = 数据类型 + 缩放策略 + 量化算法。同样是 q4,不同方案质量差异很大:
量化方案与硬件强绑定,三大生态各走一条路线:
| 生态 | 数据类型 | 代表方案 | 典型场景 |
|---|---|---|---|
| CPU/通用 GPU(llama.cpp) | 整数系(INT4/INT8) | Q4_K_M、Q6_K、Q8_0 | GGUF 文件、本地推理 |
| GPU 服务端(vLLM/NVIDIA) | 浮点系(FP8/NVFP4) | GPTQ、AWQ、FP8、NVFP4 | H100/B200、高并发服务 |
| NPU(瑞芯微 RKLLM) | 整数系 | W8A8、W4A16 | .rkllm 文件、边缘设备 |
格式:W{权重位宽}A{激活位宽}
| 方案 | 权重 | 激活 | 特点 |
|---|---|---|---|
| W8A8 | 8-bit | 8-bit | NPU 整数算力强,甜点方案 |
| W4A16 | 4-bit | 16-bit | 省内存,激活仍保 fp16 |
| W8A16 | 8-bit | 16-bit | 折中方案 |
与 llama.cpp 的关键区别:llama.cpp 通常只量化权重(激活保 fp16),RKLLM 把权重和激活都量化 —— 因为 NPU 整数算子强,激活压到 8-bit 收益大。
| 整数量化(INT4/INT8) | 浮点量化(FP8/FP4) | |
|---|---|---|
| 动态范围 | 窄,需精细缩放 | 宽(有指数位),更稳 |
| 硬件支持 | CPU/NPU 整数算力强 | 新 GPU 浮点算力暴涨 |
| 代表 | llama.cpp、RKLLM | vLLM + H100/B200 |
NVIDIA 路线:新 GPU 的 FP8/FP4 张量核心算力极高(B200 的 FP4 算力是 FP16 的数倍),量化朝浮点走;CPU/NPU 整数算力便宜,走整数路线。
| 需求 | 推荐方案 |
|---|---|
| 本地 CPU 跑,质量/体积平衡 | GGUF Q4_K_M(主流推荐) |
| 本地 CPU 跑,追求质量 | GGUF Q8_0(几乎无损) |
| 内存极度紧张 | GGUF Q3_K_M / Q2_K(质量下降) |
| NVIDIA 新卡高并发服务 | FP8 / NVFP4(vLLM) |
| RK3588 NPU 边缘部署 | W8A8(.rkllm) |
体积估算:7B 模型 FP16 约 13 GB,Q8 约 7 GB,Q4 约 4.5 GB,Q2 约 2.5 GB。模型量化后体积 ≤ 内存容量即可跑起来。
📖 相关笔记: - 端侧NPU大模型部署方案全景 — 各厂商 NPU 部署工具链对比(算能/爱芯元智/高通/华为等) - 瑞芯微RKLLM Server:NPU上的大语言模型推理服务 — W8A8 在 RK3588 上的实际部署 - 瑞芯微AI模型文件格式(.rkllm与.rknn) — 瑞芯微量化模型文件格式
📖 资料来源: - llama.cpp 官方 GitHub 仓库 - NVIDIA FP8 格式说明