巨人的收缩:使大型语言模型可访问的量化数学
大型语言模型 (LLM) 的指数级增长带来了显著的计算和内存限制,尤其是在参数超过 1000 亿的模型中。量化——一种降低神经网络中数值表示精度的数学技术——已成为使这些模型在资源受限的硬件上计算可行的关键策略。本文探讨了现代量化技术的基础理论结构和实际创新,特别强调 4 位和 8 位格式及其对基于 Transformer 架构的影响。 |
量化计算中的精度-效率权衡
量化涉及将高精度浮点值(例如 FP32 或 FP16)映射到降低精度格式,例如 INT8 或 INT4。这种转换显著降低了内存消耗和计算成本,但会引入量化误差,特别是对于大幅度离群值。这些离群值通常对于捕获深度模型中的细微行为至关重要,必须予以保留以保持模型保真度。 | 例如,一个以 FP16 存储的 1750 亿参数模型需要 350 GB 内存
将精度降低到 4 位可将内存减少四倍,达到约 87.5 GB。这种压缩使得在单个高内存 GPU 上进行推理成为可能(LLM.int8、GPTQ)。然而,不加区分的量化会由于离群权重的有损表示而降低准确性。 |
混合精度量化:通过分解实现 8 位稳定性
LLM.int8 框架引入了一种基于混合精度分解的稳健 8 位量化方法。
- 逐行量化:线性权重矩阵(对应于一个输出神经元)中的每一行独立缩放,以将其动态范围与 INT8 对齐。
- 离群值分解:一小部分离群值(≈0.1%)以更高精度(例如 FP16)保留,其余部分量化为 INT8。由此产生的线性运算被拆分
其中 和 表示学习到的比例因子。即使在 GPT-3 这样的大模型中,这种分解也能保持表示保真度,而不会出现可测量的精度下降。
4 位量化:实现极限压缩的高级技术
将精度降低到 4 位会带来更大的权衡。两种主要技术应运而生:
1. 浮点 4 位 (FP4)
LLM-FP4 方法使用定制的低位浮点格式,并采用自适应的指数-尾数分区。诸如“1.3.0”(1 个符号位、3 个指数位、0 个尾数位)之类的格式根据激活统计数据优化每层。FP4 利用了逐通道激活量化,为每个输出维度分配不同的比例因子,从而尊重 Transformer 激活的各向异性性质。该方法将 LLaMA-13B 的性能损失相对于 FP16 降低至仅 5.8%。
2. 通过 Razor 压缩的整数 4 位
QRazor 引入了一个压缩管道,包括:
- 初始量化:将张量转换为 INT8/INT16。
- 重要数据削减 (SDR):仅提取最高有效位
其中 定义了截断偏移量。该策略保留了 99% 的激活方差,平衡了准确性和效率。
实现量化的算法创新
- 块式量化(GPTQ 附录)
将张量划分为块(例如,4096 个元素)并进行独立归一化,可以实现对尺度的细粒度控制
其中 和 是块内统计量。
基于 Hadamard 的归一化:
QuaRot 采用 Hadamard 变换来重新分配离群值,并在通道之间强制执行统一的量化预算。
内核融合以提高硬件效率:
量化感知内核通过将权重缩放集成到矩阵乘法中来减少内存和延迟开销。例如,AMD 的 8 位 Adam 优化器在训练期间可节省 60% 的内存。
自适应和训练时量化
量化使得 LLaMA-7B 等变革性模型能够在 Raspberry Pi 等受限设备上运行(llama.cpp)。然而,当前的技术主要集中在训练后静态量化。未来的方向包括:
梯度感知训练:通过将量化参数集成到训练目标中,模型可以学习最优的缩放和裁剪阈值,以适应反向梯度,从而保持训练稳定性和准确性。
运行时位宽自适应:在推理过程中根据任务复杂性动态调整位宽——例如,对于简单的事实查询保留 4 位,对于多跳推理则提升到 8 位——可以实现延迟和性能的最佳平衡。
随着量化框架的成熟,数值分析、信息论和硬件协同设计的融合将成为开发可扩展、高效且超越数据中心限制的 AI 系统的核心。
如果您对深入研究感兴趣,以下是一些扩展本文思想的优秀资源:Dettmers 等人的原始 LLM.int8 论文,GPTQ 和AWQ 技术报告,以及 MLSys 和 NeurIPS 社区关于自适应量化的最新讨论。这些提供了实施细节、理论见解和实用基准的结合,对于处理或部署量化模型特别有帮助。