4位整数类型

论文

2023年发表了几篇论文,介绍了4位整数及其在大型语言模型(LLM)中的使用。尽管其范围有限,但通过仔细选择缩放参数,在用于压缩权重(仅权重量化)时可以获得良好的精度,在某些情况下也可用于激活量化。

AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration (AWQ: 面向LLM压缩与加速的激活感知权重 Q 量化) 激活感知权重 Q 量化(AWQ)侧重于LLM中权重的量化,它基于并非所有权重都同等重要的观察。该方法旨在根据激活来保护突出权重,而不是依赖反向传播或重建技术。通过搜索保留关键权重的最佳逐通道缩放,AWQ旨在最小化量化误差。

GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers (GPTQ: 用于生成式预训练 Transformer 的精确训练后量化) GPTQ 提出了一种基于近似二阶信息的一次性权重 Q 量化方法。GPTQ 实现了显著的压缩增益,将每个权重的位宽减少到3或4位,与未压缩基线相比,精度下降可忽略不计。

Understanding INT4 Quantization for Transformer Models: Latency Speedup, Composability, and Failure Cases (理解 Transformer 模型中的 INT4 量化:延迟加速、可组合性和故障案例) 本文讨论了权重和激活的4位量化(W4A4)。结果表明,W4A4 量化对于仅编码器和编码器-解码器模型几乎没有精度下降,但对于仅解码器模型会导致显著的精度下降。为了实现 W4A4 的性能增益,该研究引入了一个高度优化的端到端 W4A4 编码器推理管道,支持各种量化策略。

因此,onnx==1.17.0 引入了两种新类型,支持有限的操作符集,以实现使用4位数据类型的压缩。

  • UINT4: 4位无符号整数,取值范围为[0, 15]。

  • INT4: 4位有符号整数,使用二进制补码表示。取值范围为[-8, 7]。

Cast

从4位到任何更高精度类型的转换都是精确的。转换为4位类型是通过四舍五入到最接近的整数(同值舍入到偶数)和截断来完成的。

打包和解包

所有4位类型都以2x4位存储在一个字节中。第一个元素存储在4个最低有效位(LSB)中,第二个元素存储在4个最高有效位(MSB)中。即,对于数组中连续的元素 x, y,

pack(x,y): y << 4 | x & 0x0F
unpack(z): x = z & 0x0F, y = z >> 4

如果元素总数为奇数,将附加4位填充。大小为 N 的4位张量的存储大小为 ceil(N/2)