首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 ># 小模型量化反常识:为什么 4-bit 推理可能更费电?

# 小模型量化反常识:为什么 4-bit 推理可能更费电?

原创
作者头像
用户9867296
发布2026-09-09 19:41:43
发布2026-09-09 19:41:43
80
举报

写在前面

做大模型部署的人几乎都会做一件事:量化。把权重从 FP16 压到 NF4 或 INT8,显存降了,推理能跑了,皆大欢喜。显存的故事确实如此——但能耗的故事不是。

我在 4 种 NVIDIA 架构上跑了 360+ 组 NVML 直测数据,发现一个反直觉的规律:小模型量化之后,每 token 能耗反而更高。而且这个"小"的边界随 GPU 架构移动——T4 上大约 2.1B 开始省电,RTX 4090 上要到 3.7B,RTX 5090 上甚至要到 4.8B。

更扎心的是 INT8:bitsandbytes LLM.int8() 在我测过的所有消费级 GPU 上,一次都没省过电——能耗惩罚从 +50% 到 +242%。

这不是拍脑袋的结论,是 NVML 10Hz 采样、FP16 基线配对、每组跑 10 轮 decode 之后算出来的。下面展开讲。


1. 为什么 4-bit 模型反而更费电?

Weight-only 量化(NF4/INT8)的原理是:权重用 4-bit 或 8-bit 存储,计算时实时反量化回 FP16。省了显存带宽——读的数据量小了。

但问题在于反量化不是免费的。每次矩阵乘法都要多一步"把 4-bit 拆回 16-bit"的计算,这个开销和模型大小无关,是固定的。

小模型的 decode 阶段本来就不完全是内存带宽瓶颈——计算量和数据量之比(arithmetic intensity)较高,所以带宽省下来的那点能量,不够弥补反量化多出来的计算开销。净效果:能耗上升

随着模型变大,权重读取量在总能耗中的占比越来越高,带宽节省开始占上风。到了某个临界点,量化的净效果从"费电"翻转为"省电"。这个翻转点就是 crossover point

一句话总结:量化省的是带宽,花的是反量化算力;谁大谁小,取决于模型尺寸和 GPU 架构。


2. 实测数据:NF4 的 crossover 点在哪?

NF4 vs FP16 解码能耗变化(正 = 量化更费电,负 = 量化省电):

GPU 架构

~1–3B(小模型)

7B

crossover 点

RTX 4090D (Ada)

+25% ~ +56%

未测

测量范围内无 crossover

RTX 4090 (Ada, 2026.7)

+1% ~ +16%

−28%

≈ 3.1B(此卡),≈ 3.7B(Ada 汇总拟合)

RTX 5090 (Blackwell)

+12% ~ +29%

−11%

≈ 4.8B

T4 (Turing)

+0% ~ +5%

−14%

≈ 2.1B

A800 (Ampere)

未测

−4%

< 7B

几个值得注意的点:

  • 同一架构的两张卡,结果能差 20 个百分点:RTX 4090 和 RTX 4090D 都是 Ada,但在相同模型大小上的 NF4 惩罚差距显著。这也是为什么我把它们列为独立列,而不是混在一起。
  • crossover 随架构右移:Turing → Ada → Blackwell,crossover 从 2.1B → 3.7B → 4.8B。带宽越高的架构,"带宽节省赢过反量化开销"所需的模型尺寸越大。
  • A800 的 NF4 行为异常:7B 只省 4%,14B 甚至反弹到 +2.5%——Ampere 架构上 NF4 的 crossover 可能并不普适成立。

3. INT8:一行没有负数

这是整批数据里最干净的一条结论。

我租了一张 RTX 4090 跑了自己的测量容器(ecocompute-mlcube),5 个模型 3 种精度,15 组配置全部拿回实测数据。INT8 的结果:

模型

FP16 (mJ/token)

INT8 (mJ/token)

INT8 vs FP16

Qwen2-0.5B

1550.9

5302.5

+241.9%

TinyLlama-1.1B

1619.7

3986.2

+146.1%

Qwen2-1.5B

2200.7

6177.9

+180.7%

Qwen2.5-3B

3558.0

8354.9

+134.8%

Qwen2-7B

5467.9

8176.8

+49.5%

从 0.5B 到 7B,INT8 在这张卡上没有一个尺寸省电。最小的惩罚也在 +49.5%(7B),最大的惩罚到了 +241.9%(0.5B)——量化之后能耗翻了 3.4 倍。

机制很简单:INT8 确实降低了瞬时功耗(73–95W vs FP16 的 88–269W),但吞吐也崩了——9–19 tok/s vs FP16 的 39–62 tok/s。能耗 = 功率 × 时间,跑得慢所以总能量更高。

A800 上的 INT8 同样不省电:7B–14B 范围内 INT8 惩罚 +107% ~ +131%。数据中心卡也没例外。

⚠️ 重要限定:这是 bitsandbytes LLM.int8() 在特定硬件上的测量结果,n=1,batch size=1。其他 INT8 实现(GPTQ、AWQ、TensorRT-LLM、融合内核)可能有不同表现。不要把这条结论泛化到"所有 INT8 都费电"——但至少在用 bitsandbytes 的时候,别默认 INT8 省电。


4. 那 RTX 4090D batch-size-8 的 −15% 怎么说?

这里有一个必须诚实面对的矛盾:我的主数据集(RTX 4090D,batch size 8)显示 INT8 在 6B–9B 省电 −15%,但上面 RTX 4090 batch-size-1 的数据和 A800 batch-size-8 的数据都显示 INT8 惩罚。

这意味着 INT8 的能耗结果对 batch size 和 GPU 型号敏感。可能的原因包括:

  1. 内存子系统差异:RTX 4090D 的 GDDR6X vs A800 的 HBM2e,带宽和延迟特征不同
  2. compute-to-memory balance:不同架构下计算与访存的比例关系不同,batch size 改变了这个平衡
  3. kernel 成熟度:bitsandbytes 对不同 GPU 的内核优化程度不一
  4. 功耗管理策略:不同 SKU 的 boost clock 和功耗墙行为不同
  5. 测量协议:n=1 的单次测量本身就有不确定性

我的处理方式:把这个 −15% 标记为 "observed but unvalidated finding",不纳入 "INT8 不省电" 的核心结论,同时在论文的 Limitation 里单独讨论。诚实比好看重要。


5. 什么时候量化仍然是正确选择?

这篇文章不是叫你别量化。量化在以下场景是对的:

  • 模型不放不进显存:一张卡能跑 vs 必须用两张卡,这时候能耗已经不重要了
  • 你在大模型上(> crossover 点):NF4 省显存又省电,双赢
  • 吞吐提升的收益 > 能耗惩罚:比如 llama.cpp Q4_0 在 RTX 4090 上功耗更高(296W vs 273W),但吞吐从 55 提到 174 tok/s,每 token 能耗反而降了 62%

关键不是"量化或不量化",而是做有数据支撑的决策


6. 自己测一把

如果你想知道你的 GPU + 你的模型 + 你的精度组合到底省不省电,有三个路径:

路径 1:查表(0 门槛)

打开 quantenergy.tech,选 GPU → 输入模型大小 → 看结果。每个数字都标注了 measured / interpolated / extrapolated,外推的我会告诉你这是外推。

示例链接:quantenergy.tech/?tab=estimate&arch=blackwell&size=3&prec=NF4

路径 2:跑容器(有 GPU 就行)

没有 GPU 也能跑——容器会返回数据集中的参考值,明确标注"这不是实测"。

路径 3:一键 Colab(免费 T4)

点链接 → Run All → 等 15 分钟 → 拿到一行数据。自动检测 GPU、跑 FP16 基线 + 量化对照、输出 energy.json、生成 GitHub issue 模板。

不需要装 Docker、不需要租卡、不需要看懂 energy.json。


7. 数据来源与引用

所有原始测量记录、CSV、energy.json 以 CC BY 4.0 发布:

每条数据都有溯源标签:basis(measured / interpolated / extrapolated / estimated)、measurement_source(direct-nvml)、certified_benchmark_result: false我从不会把估算包装成实测。


经验法则

在消费级 GPU 上:

  • 低于 3–5B 参数:weight-only 量化大概率更费电,除非你需要省显存才能放进卡
  • 7B 以上:NF4 通常既省显存又省电
  • INT8(bitsandbytes):别假设它省电——实测数据说大概率不省,batch-size-8 的 −15% 是未验证的特例
  • 其他量化方法(GPTQ、AWQ、TensorRT-LLM):没测过,不评论——但欢迎你测了把数据提 PR

最后一句:measure, don't assume.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 写在前面
  • 1. 为什么 4-bit 模型反而更费电?
  • 2. 实测数据:NF4 的 crossover 点在哪?
  • 3. INT8:一行没有负数
  • 4. 那 RTX 4090D batch-size-8 的 −15% 怎么说?
  • 5. 什么时候量化仍然是正确选择?
  • 6. 自己测一把
    • 路径 1:查表(0 门槛)
    • 路径 2:跑容器(有 GPU 就行)
    • 路径 3:一键 Colab(免费 T4)
  • 7. 数据来源与引用
  • 经验法则
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档