INT4 量化把每个参数从 16 位压到 4 位,体积缩小 4 倍——但质量会下降多少?本文用 Benchmark 数据、任务对比和 Colab 实测回答这个问题。
FP16/BF16(16-bit):每个参数用 16 位浮点数存储 → 精度高
INT4(4-bit):每个参数用 4 位整数存储 → 精度低 4 倍
类比:就像把一张高清照片压缩成 JPEG——文件小了 4 倍,但细节会有损失。关键问题是:损失到什么程度?
以 Qwen2.5-7B 为例,学术基准测试对比:
| 基准测试 | 任务类型 | FP16 | INT4 | 差距 |
|---|---|---|---|---|
| MMLU | 知识问答 | 78.2 | ~76-77 | -1~2 分 |
| HumanEval | 代码生成 | 68.3 | ~65-67 | -1~3 分 |
| GSM8K | 数学推理 | 82.5 | ~78-80 | -2~5 分 |
| HellaSwag | 常识推理 | 83.1 | ~82 | -1 分 |
结论:INT4 在大多数任务上只掉 1-3 分,性价比极高。数学推理类任务损失稍大(2-5 分)。
| 任务类型 | FP16 vs INT4 差异 | 说明 |
|---|---|---|
| 日常对话 | 几乎无差异 | 简单问答、闲聊,看不出来 |
| 知识问答 | 极小差异 | 事实性回答基本一致 |
| 创意写作 | 微小差异 | 长文、诗歌可能有细微差别 |
| 短代码生成 | 极小差异 | 简单函数、片段几乎一致 |
| 数学推理 | 有差异 | 复杂计算 INT4 可能出错 |
| 长代码生成 | 有差异 | 长逻辑链、复杂架构 INT4 略差 |
| 长文本理解 | 有差异 | 上下文 > 4K tokens 时 INT4 退化 |
| 学术论文写作 | 有差异 | 高精度措辞、引用格式 INT4 不稳定 |
| 场景 | FP16 表现 | INT4 表现 |
|---|---|---|
| "介绍一下海洋大数据" | 7 个要点,详细展开 ✅ | 简洁 100 字总结 ✅ |
| "写一首关于大海的诗" | 优美流畅 ✅ | 基本通顺 ✅ |
| "解一道微积分题" | 正确 ✅ | 可能算错 ⚠️ |
| "分析这篇 8000 字论文" | 完整理解 ✅ | 后半段可能遗忘 ⚠️ |
| 指标 | T4 FP16 + CPU offload | T4 INT4 量化 | 差异倍数 |
|---|---|---|---|
| 显存占用 | 13.1 GB | 5.56 GB | INT4 省 58% |
| 生成速度 | 1.49 tokens/s | 12.71 tokens/s | INT4 快 8.5 倍 |
| 64 token 耗时 | 40.92 s | 5.06 s | INT4 快 8 倍 |
| TTFT(首 token 延迟) | 3.2 ms⚠️ | 106 ms | - |
| 生成质量 | 7 个要点 ✅ | 简洁总结 ✅ | 几乎一致 |
⚠️ TTFT 3.2ms 为 TextStreamer 测量 bug,不可采信。
model.dtype 会骗人:INT4 加载后仍显示 torch.bfloat16,正确判据是显存占用(5.56 GB = INT4 生效)model.dtype 的误导性# INT4 量化加载
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-7B-Instruct",
load_in_4bit=True,
device_map="auto"
)
print(model.dtype) # 输出:torch.bfloat16 ← 这不是实际存储精度!
为什么显示 BF16?
- model.dtype 报告的是原始模型的精度或计算精度,不是量化后的存储精度
- BitsAndBytes 在加载时将权重从 BF16 转换为 INT4,但 model.dtype 属性不更新
正确判据:
import torch
print(f"显存已用: {torch.cuda.memory_allocated() / 1e9:.2f} GB")
# ~5 GB → INT4 生效 ✅
# ~15 GB → 还是 FP16 ❌
| 场景 | 推荐精度 | 理由 |
|---|---|---|
| 日常对话、知识问答 | INT4 足够 | 质量差异可忽略 |
| 代码生成(短代码) | INT4 足够 | 简单逻辑几乎无损 |
| 复杂数学推理 | FP16 更稳 | INT4 可能算错 |
| 长文本分析(> 8K tokens) | FP16 更稳 | INT4 长上下文退化 |
| 学术论文写作 | FP16 更稳 | 高精度措辞要求 |
| 端侧/手机部署 | INT4 必须 | 显存/内存限制 |
INT4 量化 = 7B 模型的"甜点配置"
✅ 速度提升 8.5 倍(1.49 → 12.71 tokens/s)
✅ 显存省 60%(13.1 GB → 5.56 GB)
✅ 质量仅损失 1-3%(Benchmark 数据)
❌ 不适合:复杂数学、长文本、学术写作
选择原则:
- 日常使用、端侧部署 → INT4
- 高精度任务、学术研究 → FP16
- 显存不够 → INT4 或换更小的模型