这是一篇基于 NVML 实测数据的反常识结论:所谓"量化省电"在小模型上是假的,在某些精度模式下甚至是严重负优化。文末附完整 GPU × 模型 × 精度的"何时该量化"决策表。
一句话结论(先看这个)
我在 4 块 NVIDIA GPU(T4 / RTX 4090D / RTX 5090 / A800)上跑了 360+ 组配置,覆盖 1.1B~14B 参数模型,FP16 / INT8 / NF4 三种精度,用 NVML 直接读硬件功耗,得到两个反常识结论:
LLM.int8()默认模式(带 outlier 混合精度分解)在 RTX 4090D 上比 FP16 多耗 80%~162% 能耗,吞吐还掉 68%~75%,精度只省 0.7%~2% PPL。这是负优化。- NF4 4-bit 量化有一个架构相关的 crossover 阈值(3.2B
5.2B 参数之间),低于这个阈值,NF4 反而比 FP16 更费电(+25%~+55%);高于阈值才省电(-15%-23%)。
完整数据集和交互式对比工具:hongping-zh.github.io/ 原始 CSV + 复现脚本:github.com/hongping-zh…
为什么我要测这件事
行业里默认的逻辑链是:
量化 → 比特数变少 → 显存变少 → 计算变快 → 能耗变低
这条链子的每一环单独看都对,但整条链子从来没人用 wall-clock 功耗数据验证过。我想知道:
- 量化到底真的省电,还是只是省显存 + 省 FLOPs?这是两回事
- 混合精度内核、反量化开销、算术强度下降——这些隐性成本在能耗维度上到底是多少
- 不同 GPU 架构上结论一致吗?
测下来发现:FLOPs 和 latency 都不是能耗的好代理。要省电只能直接测电。
实测环境(无修饰版)
| 维度 | 配置 |
|---|---|
| 硬件 | Tesla T4 (Turing, 70W) / RTX 4090D (Ada) / RTX 5090 (Blackwell) / A800 (Ampere, 300W) |
| 模型 | 1.1B–14B 参数区间,含 Qwen2-7B / Qwen2.5-3B / Yi-1.5-6B 等 |
| 精度 | FP16(基线)/ LLM.int8() 默认 / INT8 pure (llm_int8_threshold=0.0) / NF4 (bitsandbytes) |
| 功耗采样 | NVML,10 Hz |
| 重复次数 | 每组 n=10,丢弃 3 次预热,变异系数 CV < 3% |
| 精度评估 | WikiText-2 test 集,交叉熵 → 困惑度 PPL |
| 软件栈 | PyTorch 2.4+ / bitsandbytes / transformers |
| 数据集 DOI | 10.5281/zenodo.18900289 |
我没测的:Apple Silicon、Jetson、AMD/Intel GPU、GPTQ、AWQ、GGUF。这些是开放问题,文末有协作邀请。
发现 1:LLM.int8() 默认模式是 Ada 架构上的能耗灾难
很多人以为 BitsAndBytesConfig(load_in_8bit=True) 一行代码就能"既省显存又省电"。在 RTX 4090D 上实测如下:
| 指标(相对 FP16 基线) | LLM.int8() 默认 |
|---|---|
| 单 request 能耗 | +80% ~ +162% |
| 吞吐 (tok/s) | −68% ~ −75% |
| PPL 退化 (WikiText-2) | +0.7% ~ +2%(基本保留) |
为什么? LLM.int8() 默认会启用 outlier 混合精度分解:把 activation 中的少数极值通道单独保留为 FP16,其余走 INT8。这条路径需要:
- 额外的 outlier detection kernel
- INT8/FP16 之间的 dequant/quant 来回切换
- 内存访问 pattern 碎片化,掉 cache 命中率
结果就是用 INT8 的精度代价换 FP16 的精度结果,同时多烧 1~1.6 倍的电。
如果你想真的拿到 INT8 的能耗收益,必须显式禁用分解:
BitsAndBytesConfig(
load_in_8bit=True,
llm_int8_threshold=0.0 # 关键:禁用混合精度分解
)
但代价不是零——禁用分解后实测 PPL 退化 +2.5% ~ +22.7%:
- Qwen2.5-3B:PPL +15.3%
- Yi-1.5-6B:PPL +22.7%
所以 "INT8" 在工程层面至少是两个不同的工作点,能耗/精度权衡完全不同,文档里基本没人讲清楚。
发现 2:NF4 crossover 跟着 GPU 走,不跟着模型走
NF4(bitsandbytes 4-bit)不是统一省电的。它有一个参数量临界点,低于这个临界点 NF4 反而费电。更有意思的是:这个临界点跟着 GPU 架构变。
| GPU 架构 | NF4 crossover | INT8 crossover |
|---|---|---|
| Turing (T4) | ~3.2 B | ~4.0 B |
| Ampere (A800) | ~3.7 B | ~4.3 B |
| Ada (RTX 4090D) | ~3.9 B | ~4.6 B |
| Blackwell (RTX 5090) | ~5.2 B | ~5.6 B |
汇总规律:
- 低于 crossover:量化多耗 +25% ~ +55% 能耗
- 高于 crossover:量化省 -15% ~ -23% 能耗
补充一个最新案例(2026 年 4 月数据):Qwen2.5-3B 在 T4 上,NF4 比 FP16 多耗 +7.4% ~ +39.9% 能耗(batch size 1/2/4 三种工况都验证过)。3B 模型在 Turing 架构上,正好坐在 ~3.2 B crossover 下方,数据完全符合预测。
最反直觉的一点:架构越新,crossover 越往上挪。
Blackwell 的显存子系统让 FP16 相对 4-bit dequant 更便宜,临界点从 T4 的 ~3.2B 推到 5090 的 ~5.2B。这意味着:
现在大家最爱量化的那批 1B~3B "edge-ready" 小模型(Llama-3.2-1B、Phi-3-mini、Qwen2.5-3B 这些),在我测的每一块 NVIDIA GPU 上,都在 crossover 下方。也就是说,它们被量化后反而更费电。
这条结论我重测了三遍,确认不是数据噪声。
实用决策表:你该不该量化?
| 你的场景 | 推荐 | 理由 |
|---|---|---|
| 1B–3B 小模型 + 任意 NVIDIA GPU | FP16 | 全部在 crossover 下方,量化负优化 |
| 7B+ 模型 + Turing/Ampere | NF4 | 已过 crossover,能耗省 15~20% |
| 7B+ 模型 + Blackwell | 看情况,先 FP16 | Blackwell crossover 高到 5.2B,7B 收益较小,建议先实测 |
| 任何场景 + 想用 INT8 | 显式设 threshold=0.0 | 别用默认 LLM.int8(),那是负优化 |
| 短 prompt + 短生成 (< 64/32 token) | FP16 | 量化开销摊不开 |
| 服务端长 prompt + 大 batch | NF4 或 FP8 | 量化收益最大化的工况 |
给工程师的 4 条实操建议
1. 任何"绿色 AI"声明都必须带 wall-power 数据
只报 tok/s、FLOPs、latency 是不够的。能耗是独立维度,latency 快不等于能耗低——LLM.int8() 默认就是反例,吞吐掉 70%,能耗却涨 100%+,意味着每个 token 多烧的电是 FP16 的 3~5 倍。
2. 换 GPU 必须重测
A800 上跑得最优的配置,搬到 RTX 5090 上很可能就不是最优了。架构差异在能耗维度上比 latency 维度更明显。
3. 给 inference 加 NVML 监控
10 Hz 采样、n=10 重复、CV<3%。这套协议很轻,可以集成进 CI。我开源的 ecocompute-ai 仓库里有现成脚本。
4. 不要把 LLM.int8() 当默认 INT8
要么显式 threshold=0.0(接受精度损失换能耗),要么干脆别用 8-bit,直接走 NF4(前提是过了 crossover)。
后续计划 / 开放协作
下面这些我还没测,欢迎 PR 或讨论:
- GPTQ / AWQ / GGUF k-quants 的 crossover 是否和 bitsandbytes NF4 一致?
- Apple Silicon / Jetson 的统一内存架构下,dequant 开销是否完全不同?
- H100 / H200 / MI300X 实测数据(社区高频问,我目前没卡)
- crossover 阈值的 memory bandwidth vs tensor core throughput 解耦分析
PR 入口:github.com/hongping-zh…
配套资源
- 📊 数据网站(含交互对比工具):hongping-zh.github.io/
- 🧮 免费 ClawHub 顾问 Skill(MIT 协议):clawhub.ai/hongping-zh… —— 在 LLM 客户端里直接查"我的配置该不该量化"
- 📁 原始数据 + 脚本:github.com/hongping-zh…
- 📌 Zenodo 数据集(可引用 DOI):doi.org/10.5281/zen…
引用格式:
@misc{zhang2026llmenergy,
author = {Zhang, Hongping},
title = {LLM Energy Benchmark: Real GPU Power Measurements for Quantized Inference},
year = {2026},
doi = {10.5281/zenodo.18900289}
}
写在最后
写这篇的初衷不是"量化不好",而是想说:
"量化 = 绿色 AI"是个被工业界过度简化的命题。真实的能耗 landscape 是一张 GPU × 模型大小 × 精度模式的三维地图,里面有大片"反优化区"。
如果你正在做推理服务部署,别凭直觉决定要不要量化——测一下,可能省钱也可能多烧钱。
欢迎评论区贴你自己的测量数据,特别是和我结论冲突的。冲突的数据比一致的数据有信息量得多。
—— Hongping