4位整数类型¶
论文¶
2023年已经发表了几篇论文,介绍了4位整数及其在大型语言模型(LLMs)中的使用。尽管它们的范围有限,但通过仔细选择缩放参数,在用于权重压缩(仅权重量化)时可以获得良好的准确性,在某些情况下也适用于激活量化。
AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration 激活感知权重量化(AWQ)专注于通过考虑并非所有权重都同等重要的观察来量化LLM中的权重。该方法旨在基于激活来保护显著权重,而不是依赖反向传播或重建技术。通过搜索保留关键权重的最佳每通道缩放,AWQ旨在最小化量化误差。
GPTQ: 生成预训练变换器的准确训练后量化 GPTQ提出了一种基于近似二阶信息的一次性权重量化方法。GPTQ实现了显著的压缩增益,将每个权重的位宽减少到3或4位,与未压缩的基线相比,精度下降可以忽略不计。
Understanding INT4 Quantization for Transformer Models: Latency Speedup, Composability, and Failure Cases 本文讨论了将权重和激活量化为4位(W4A4)的方法。结果表明,W4A4量化对仅编码器和编码器-解码器模型的准确性几乎没有影响,但对仅解码器模型会导致显著的准确性下降。为了实现使用W4A4的性能提升,该研究引入了一个高度优化的端到端W4A4编码器推理管道,支持各种量化策略。
因此,在onnx==1.17.0中引入了两种新类型,支持一组有限的运算符,以启用使用4位数据类型的压缩:
UINT4: 4位无符号整数,取值范围为 [0, 15]INT4: 4位有符号整数,使用二进制补码表示。值范围在[-8, 7]之间。
类型转换¶
从4位转换为任何更高精度的类型是精确的。 转换为4位类型是通过四舍五入到最接近的整数(偶数优先)并截断来完成的。
打包与解包¶
所有4位类型都存储为单个字节中的2x4位。 第一个元素存储在4个最低有效位中,第二个元素存储在4个最高有效位中。 即对于数组中的连续元素x, y:
pack(x,y): y << 4 | x & 0x0F
unpack(z): x = z & 0x0F, y = z >> 4
如果元素的总数是奇数,将追加4位的填充。
大小为N的4位张量的存储大小为ceil(N/2)。