Skip to content
🔗 分享本题
查看我的学习进度 →

INT8、INT4 和 FP8 表示方式、量化对象及硬件质量取舍图

🧠 记忆锚点:INT 用尺度映射范围,FP 保留指数动态范围;选精度要看量化对象、硬件内核和质量验证。

💡 答案要点

模型量化 = 用低精度数值表示模型权重和激活

为什么量化?

降低显存占用 → 降低带宽需求 → 提升推理速度

精度对比:

数据类型每个值占用表示范围精度
FP324 bytes±3.4e387位有效数字
FP162 bytes±6.5e43-4位有效数字
BF162 bytes±3.4e382-3位有效数字
FP81 byte±570002位有效数字
INT81 byte-128~127整数
INT40.5 byte-8~7整数

显存占用对比(7B 模型):

精度模型大小节省
FP3228GB0%
FP1614GB50%
INT87GB75%
INT43.5GB87.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 * scale

INT4(整数4位):

优势:
  - 极致压缩(87.5% 节省)
  - 适合超大模型

挑战:
  - 精度损失大
  - 需要分组量化

方法:GPTQ, AWQ
  每 128 个权重一组
  每组独立 scale

精度对比(Llama 7B,MMLU):

精度准确率相对 FP16
FP1646.8%0%
FP846.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%。"

📚 参考:LLM.int8():8-bit 矩阵乘法(量化原论文)