Skip to content

量化粒度 ​

量化粒度(Quantization Granularity)描述一组量化参数覆盖多少元素。它不区分 Weight、Activation 或 KV Cache,而是作用于选定的量化对象。

以对称量化为例,元素集合 G 共享一个 scale:

sG=maxi∈G|xi|qmax.

G 越小,量化参数越能适应局部分布,但 scale 等元数据、统计开销和 Kernel 约束也会增加。

粒度总览 ​

设张量为 T[D0,D1]。下表按典型共享范围由大到小排列:

粒度共享范围Scale Shape 示例特点
Per-Tensor整个张量[1, 1]元数据最少,最容易受异常值影响
Per-Channel指定轴上的每个切片[D0, 1]隔离不同切片的数值分布
Per-Block固定形状的 B0×B1 区域[ceil(D0/B0), ceil(D1/B1)]可同时沿多个轴划分
Per-Group指定轴上连续的 G 个元素[D0, ceil(D1/G)]一维局部分组,常用于低比特量化

Scale shape 取决于张量布局、划分轴和实现方式,表中仅展示一种二维布局。Per-Block 与 Per-Group 的实际共享范围由 block shape 和 group size 决定,两者并不存在固定的大小关系。

Per-Tensor ​

Per-Tensor 让整个张量共享一组量化参数。它实现简单、元数据少,但全局异常值会扩大表示范围,降低大多数元素的有效精度。

Per-Channel ​

这里的 Per-Channel 按广义的 Per-Axis 理解:沿指定轴的每个切片独立计算量化参数。“通道”的语义由量化对象和算子布局决定;同样是每行一个 scale,在不同对象中可能称为 per-output-channel 或 per-token。

因此,per-token 更适合看作 Per-Channel 在特定对象上的命名,而不是另一套粒度体系。

Per-Block ​

Per-Block 将张量划分为固定形状的块,每个块共享量化参数。Block 可以是一维或多维;一维 Per-Group 也可以视为 Per-Block 的特例,但工程格式通常保留两种名称。

只写 Block-wise 无法确定数据布局,还需要给出 block shape,例如 1×128 或 128×128。

Per-Group ​

Per-Group 沿指定轴将连续 G 个元素划为一组,每组共享量化参数。group_size=128 只有在同时给出分组轴后才是完整描述。

完整描述 ​

粒度配置至少应说明:

  • 量化对象;
  • 划分轴;
  • group size 或 block shape;
  • scale 的布局。

例如,T[D0,D1] + axis=D1 + group_size=128 + scale[D0,ceil(D1/128)] 比单独写 Group-wise 更明确。常见方案的完整组合见量化配置。

参考 ​

  1. NVIDIA TensorRT:Quantization Workflows and Granularities
  2. Hugging Face Transformers:Quantization Concepts