4位整数类型

论文

2023年发表了几篇论文介绍了4位整数及其在LLM中的应用。虽然它们的范围有限,但通过仔细选择缩放参数,当用于压缩权重(仅权重量化)时,可以获得良好的准确性,在某些情况下,还可以用于激活量化。

AWQ:用于LLM压缩和加速的激活感知权重量化 激活感知权重量化(AWQ)侧重于通过考虑并非所有权重都同等重要的观察结果来量化LLM中的权重。该方法旨在根据激活来保护显着权重,而不是依赖于反向传播或重建技术。通过搜索保留关键权重的最佳每个通道缩放,AWQ旨在最大程度地减少量化误差。

GPTQ:生成预训练Transformer的精确后训练量化 GPTQ提出了一种基于近似二阶信息的一次性权重量化方法。GPTQ实现了显着的压缩增益,将每个权重的位宽减少到3或4位,与未压缩基线相比,精度下降可以忽略不计。

理解Transformer模型的INT4量化:延迟加速、可组合性和故障案例 本文讨论了将权重和激活都量化为4位(W4A4)。结果表明,W4A4量化导致仅编码器和编码器-解码器模型的精度几乎没有下降,但导致仅解码器模型的精度显着下降。为了实现使用W4A4的性能提升,本研究引入了一个高度优化的端到端W4A4编码器推理管道,该管道支持各种量化策略。

因此,在onnx==1.17.0中引入了两种新类型,支持一组有限的运算符,以启用使用4位数据类型的压缩

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

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

转换

从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)