量化粒度
量化粒度(Quantization Granularity)描述一组量化参数覆盖多少元素。它不区分 Weight、Activation 或 KV Cache,而是作用于选定的量化对象。
以对称量化为例,元素集合
粒度总览
设张量为
| 粒度 | 共享范围 | Scale Shape 示例 | 特点 |
|---|---|---|---|
| Per-Tensor | 整个张量 | [1, 1] | 元数据最少,最容易受异常值影响 |
| Per-Channel | 指定轴上的每个切片 | [D0, 1] | 隔离不同切片的数值分布 |
| Per-Block | 固定形状的 | [ceil(D0/B0), ceil(D1/B1)] | 可同时沿多个轴划分 |
| Per-Group | 指定轴上连续的 | [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 沿指定轴将连续 group_size=128 只有在同时给出分组轴后才是完整描述。
完整描述
粒度配置至少应说明:
- 量化对象;
- 划分轴;
- group size 或 block shape;
- scale 的布局。
例如,T[D0,D1] + axis=D1 + group_size=128 + scale[D0,ceil(D1/128)] 比单独写 Group-wise 更明确。常见方案的完整组合见量化配置。