AB
AiBoss
Wiki

什么是仅权重量化(Weight-Only Quantization)?

仅权重量化是模型量化的一种做法,只把模型权重从高精度浮点格式压缩到低精度格式,而激活值保持原精度。NVIDIA 开发者博客指出,权重、激活值与 KV 缓存是 Transformer 模型中可被量化的三个关键要素,仅权重量化针对其中的权重部分,主要用来降低显存占用与模型体积。

仅权重量化(Weight-Only Quantization)是模型量化(Model Quantization)的一种做法:只把模型的权重参数从较高精度的浮点格式(例如 FP32、FP16)转换为较低精度的格式(例如 FP8),而模型的激活值(activations)不随之量化。它要解决的问题是模型体积与显存占用过大——在硬件资源受限的环境中,把权重压到更低精度可以显著减少存储与内存需求,从而让原本难以部署的模型有机会运行起来。

为什么重要

按照 NVIDIA 开发者博客的说明,AI 模型正变得越来越复杂,规模常常超出可用硬件的能力,量化因此成为应对这一挑战的关键技术,使资源密集的模型能够运行在受限硬件上。该文把量化的收益归纳为三点:降低内存占用、加快推理速度、降低能耗;代价则是相对原始模型可能出现一定的精度下降,精度与效率之间的取舍取决于具体用例。

在仅权重量化出现之前,更常见的做法是对权重和激活值同时量化。激活值量化需要借助校准数据(calibration data)来确定量化参数,属于训练后量化(Post-Training Quantization,PTQ)流程的一部分;而训练中量化(Quantization Aware Training,QAT)则要在训练阶段插入伪量化模块(fake quantization modules),并用直通估计器(straight-through estimator)近似梯度。相比之下,仅权重量化不触碰激活值,流程更简单,也不需要为激活值准备校准数据,因此成为部署阶段一种低门槛的压缩手段。

该博客给出的一个具体数字是:把 Llama2 7B 的权重从 FP16 量化为 FP8,内存占用从约 14 GB 降到约 7 GB,即减半。这说明仅权重量化对显存受限的推理场景具有直接意义。

工作机制

NVIDIA 开发者博客指出,在基于 Transformer 的模型中,有三个关键要素可以被量化:模型权重、模型激活值,以及解码器模型的 KV 缓存(KV caches)。仅权重量化只作用于其中的第一项。其核心步骤可以概括为以下几点:

  • 确定量化对象:只对权重张量做精度转换,激活值保持原有精度。因此推理时权重以低精度存储,计算时再按框架的实现方式参与运算。
  • 选择量化数据格式:博客指出,数据类型(如 FP32、FP16、FP8)直接影响所需的计算资源,进而影响模型的速度与效率。常见浮点格式包括 FP32、FP16、BF16 等,仅权重量化通常把权重降到 FP8 一类的低精度格式。
  • 选择对称或仿射量化:对称量化(symmetric quantization)把零点固定为零,相比仿射量化(affine quantization)减少了计算开销;博客提到 NVIDIA TensorRT 与 Model Optimizer 工具采用对称量化。
  • 选择量化粒度:粒度策略包括逐张量(per-tensor)、逐通道(per-channel)和逐块(per-block)。博客称,逐通道与逐块方法通过把离群值(outliers)隔离到特定通道或张量区域,可以降低量化误差。
  • 配合高级算法抑制精度损失:博客列举了激活感知权重量化(Activation-aware Weight Quantization,AWQ)、GPTQ 和 SmoothQuant,它们分别通过保护显著权重、Hessian 引导的压缩、激活离群值平滑等技巧,在提升效率的同时尽量减小精度退化。

需要说明的是,上述算法在博客中被作为「高级算法」整体介绍,博客并未逐一说明它们各自是否只量化权重。把它们与仅权重量化直接等同,属于超出素材的推断。

典型例子

素材中出现的真实例子包括:

  • Llama2 7B 的 FP16 到 FP8 权重转换:博客以此说明仅权重量化可将内存占用从约 14 GB 降至约 7 GB。
  • NVIDIA TensorRT 与 Model Optimizer:博客称这两个工具简化了量化流程,在提升效率的同时保持模型精度,并采用对称量化。
  • AWQ、GPTQ、SmoothQuant:作为减小精度退化的高级算法被列出。
  • PTQ 与 QAT 两条路线:博客把训练后量化与训练中量化作为量化的两类基本流程加以对比,其中 PTQ 在训练之后进行,激活值量化需要校准数据。

该博客是 NVIDIA 发布的三篇系列文章中的第一篇,后续两篇分别讲用 NVIDIA Model Optimizer 做训练后量化,以及用 NVIDIA TensorRT 把 FP8 检查点转为高性能推理引擎。

边界与常见误解

第一,仅权重量化不等于完整量化。博客明确指出权重、激活值和 KV 缓存三者都可被量化;只量化权重意味着激活值仍以较高精度参与计算,因此它主要缓解的是存储与显存压力,而不是把整条计算链路都降到低精度。至于它对推理速度的实际影响,素材没有给出仅权重量化专属的加速数据,不应把博客中关于量化整体的速度收益直接归到仅权重量化名下。

第二,量化并非无损。博客明确写到,量化相对原始模型可能导致一定的精度下降,精度与效率的平衡取决于具体用例。因此「量化后精度不变」不是该文档的结论。

第三,量化粒度与算法选择会影响误差大小。博客称逐通道与逐块方法能通过隔离离群值降低量化误差,这暗示粗粒度方案在存在显著离群值时可能付出更大精度代价。

第四,工具与算法的归属需要谨慎。对称量化被博客描述为 NVIDIA TensorRT 与 Model Optimizer 采用的做法,这是该厂商文档的陈述,不宜写成整个行业的统一约定。

参考资料