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]。

Cast

从 4 位类型转换为任何更高精度类型都是精确的。转换为 4 位类型是通过舍入到最近的整数(当出现平局时,舍入到偶数) nearest-even 整数并截断来完成的。

打包和解包

所有 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)