4 位整型

论文

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

AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration 激活感知权重量化 (AWQ) 专注于 LLM 中权重的量化,其考虑了并非所有权重都同等重要的观察结果。该方法旨在基于激活来保护显着权重,而不是依赖反向传播或重建技术。通过寻找保持关键权重的最佳每通道缩放,AWQ 旨在最小化量化误差。

GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers 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]。

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)