一句话定义:量化分组大小(Group Size)指的是在做模型量化时,把多少个权重划成一组,让这一组共用同一套缩放参数(scale,有时还包括零点 zero-point)。
为什么需要“分组”
量化会把原本用 16 位浮点(fp16)存放的权重,压成 4 位整数(int4)这类低精度格式。但整数值本身没有意义,必须再配一个 scale,把它“放大”回接近真实的数值。问题在于:一个 scale 能覆盖的范围是有限的,一旦组里出现数值特别大的权重,也就是离群值(outlier),scale 就会被撑大,组内其他正常权重的分辨率随之被压扁。
打个比方:给一个班量身高,全班共用一把刻度很粗的尺子。因为班里有位两米多的篮球特长生,量程被拉到最大,一米六二和一米六八的两个人,读出来都是“一米六”。如果把全班拆成几个小组,每组单独配一把尺子,刻度就能细很多。分组大小,就是“一组几个人”。
代价在哪
尺子不是白送的,每组都要额外存一份 scale。用 fp16 存一个 scale 占 16 位,摊到 32 个权重上,相当于每个权重多花 0.5 位,实际变成 4.5 位;摊到 128 个权重上只多 0.125 位。所以组不是越小越好,而是在“精度”和“额外开销”之间换。
和相邻概念的区别
| 概念 | 管的是什么 | 直观理解 |
|---|---|---|
| 位宽(bit width) | 每个权重占几位 | 总共多少预算 |
| 分组大小(group size) | 多少权重共用一套 scale | 几个人合用一把尺子 |
| 每通道(per-channel) | 每个通道一套 scale | 细分到“每条流水线” |
| 每张量(per-tensor) | 整个权重矩阵一套 scale | 全公司共用一把尺子 |
分组本质上是 per-tensor 和 per-channel 之间的折中:比 per-tensor 精细得多,又不像 per-channel 那样在通道数很多时开销失控。
对从业者的实际意义
第一,看到“4-bit”别默认都一样。同为 4-bit,分组 32 和分组 128 是两个质量档位,小模型和数值敏感的任务上差距会更明显。
第二,显存占用几乎不受影响,因为 scale 摊薄后只占几个百分点,但推理速度可能受影响:组越细,反量化(dequantize)的计算和访存越碎,某些推理框架对特定分组大小支持更好。
第三,挑模型文件或做量化配置时,先看模型卡里写的量化方案(位宽 + 分组大小 + 是否只量化部分层),再决定要不要为了省一点显存去换质量。具体支持哪些组合,以所用工具链和模型的官方页面为准。
