做 LLM 部署的人大多有个默认假设:量化降低了显存占用和内存带宽压力,所以推理更省电。这个假设在论文和工程实践里被反复引用,但真正直接测过的很少——大部分"量化省电"的结论,要么是拿 FLOPs 或 TDP 估算的,要么测的是整机功耗而非 GPU 本身。
我用 NVML 接口做了一轮受控测量,把结果整理成了这篇短文。先说结论:量化是否省电,取决于一张卡、一个软件栈、一个模型规模的具体组合,不取决于位宽本身。
同一份 100Hz 功率轨迹,用三种不同的窗口定义重新积分,64-token 的能耗数字能差出 12.5 个百分点;换成 576-token 输出,差异缩到 2 个点以内。
这意味着:凡是看到"量化省电 X%"的结论,先看它测的是什么窗口、输出多长。预热算不算、加载算不算、输出 token 数是多少,这些口径不动,跨论文比较基本没有意义。
这是最有意思的结果。NF4 相对 FP16 的能耗差异,符号随模型规模和平台变化:
换句话说,"这张卡量化省电"这句话,可能过一次驱动/框架升级就不成立了。能耗交叉点是卡 + 软件栈的属性,不是硅片的属性。
在我测的所有配置里,LLM.int8() 相对 FP16 全部是更耗电的:RTX 4090 上 +106% 到 +581%,A800 上 +107% 到 +131%。
机制上值得注意的是:功率没有明显上升,是 decode 吞吐崩了——单位时间产出的 token 变少,同样多的 token 要烧更长时间的电。混合精度路径的额外开销吃掉了量化省下的带宽收益。
(这个现象和 kernel 级分析的结论能对上:bitsandbytes 的反量化路径融合度不高,dequant 开销在 kernel 能耗里占比可观。换成 kernel 融合好的推理后端,画风完全不同——我测的 llama.cpp Q4_0 相对 FP16 省了 62–63%。)
我把这个关系总结成一个公式:∆E = f(N, B, H, Q, R, M)——模型规模、batch、硬件、量化格式、运行时(软件栈)、测量方法,六个变量,缺一个都可能在换环境后翻车。
全部测量数据、生成每张表的脚本、以及跑实验用的容器都已开源(EcoCompute 项目,GitHub 搜 hongping-zh 可找到),原始功率轨迹也在内,有兴趣可以拿自己的卡复测一遍——特别是 Blackwell 之后的卡,我很想看看这个结论的边界在哪。
有不同测量结果的朋友,欢迎评论区交流。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。