
🧠 记忆锚点:INT 用尺度映射范围,FP 保留指数动态范围;选精度要看量化对象、硬件内核和质量验证。
💡 答案要点
模型量化 = 用低精度数值表示模型权重和激活
为什么量化?
降低显存占用 → 降低带宽需求 → 提升推理速度精度对比:
| 数据类型 | 每个值占用 | 表示范围 | 精度 |
|---|---|---|---|
| FP32 | 4 bytes | ±3.4e38 | 7位有效数字 |
| FP16 | 2 bytes | ±6.5e4 | 3-4位有效数字 |
| BF16 | 2 bytes | ±3.4e38 | 2-3位有效数字 |
| FP8 | 1 byte | ±57000 | 2位有效数字 |
| INT8 | 1 byte | -128~127 | 整数 |
| INT4 | 0.5 byte | -8~7 | 整数 |
显存占用对比(7B 模型):
| 精度 | 模型大小 | 节省 |
|---|---|---|
| FP32 | 28GB | 0% |
| FP16 | 14GB | 50% |
| INT8 | 7GB | 75% |
| INT4 | 3.5GB | 87.5% |
量化方法:
1. 后训练量化(PTQ, Post-Training Quantization):
优点:无需重新训练,快速
缺点:精度损失较大
适用:INT8 量化
流程:
训练好的 FP16 模型 → 校准数据集 → 统计分布 → 确定 scale → 量化2. 量化感知训练(QAT, Quantization-Aware Training):
优点:精度损失小
缺点:需要重新训练,慢
适用:INT4 量化
流程:
训练时模拟量化 → 模型学会适应量化误差 → 最终量化精度类型详解:
FP8(浮点8位):
优势:
- 保留浮点格式,表示范围大
- NVIDIA H100/Ada 硬件支持
- 精度损失小于 INT8
格式:E4M3(4位指数,3位尾数)
表示范围:±448
精度:约 2 位有效数字INT8(整数8位):
优势:
- 硬件支持广泛(大部分 GPU)
- 计算快
量化公式:
scale = max(|W|) / 127
W_quant = round(W / scale).clamp(-128, 127)
W_dequant = W_quant * scaleINT4(整数4位):
优势:
- 极致压缩(87.5% 节省)
- 适合超大模型
挑战:
- 精度损失大
- 需要分组量化
方法:GPTQ, AWQ
每 128 个权重一组
每组独立 scale精度对比(Llama 7B,MMLU):
| 精度 | 准确率 | 相对 FP16 |
|---|---|---|
| FP16 | 46.8% | 0% |
| FP8 | 46.5% | -0.3% |
| INT8(PTQ) | 45.9% | -0.9% |
| INT8(QAT) | 46.4% | -0.4% |
| INT4(GPTQ) | 44.2% | -2.6% |
| INT4(AWQ) | 45.8% | -1.0% |
面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "量化是推理优化的核心。FP8 需要新硬件但精度好,INT8 兼容性好,INT4 压缩率高。我在项目中用 INT8 PTQ,显存降了 50%,准确率只降 1%。"