分享自:

SmoothQuant:面向大型语言模型的高精度高效训练后量化方法

期刊:Proceedings of the 40th International Conference on Machine Learning

关于SmoothQuant: 一种针对大语言模型的准确高效训练后量化方法的学术报告

一、 研究作者、机构与发表信息

本研究的主要作者包括来自麻省理工学院(Massachusetts Institute of Technology)的Guangxuan Xiao和Ji Lin(共同一作),以及来自英伟达(Nvidia)的Mickael Seznec、Hao Wu和Julien Demouth。通讯作者为Guangxuan Xiao和Ji Lin。该项研究以论文《SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models》的形式,发表于2023年在夏威夷檀香山举行的第40届国际机器学习会议(Proceedings of the 40th International Conference on Machine Learning, PMLR 202, 2023)论文集上。相关代码已在GitHub开源(https://github.com/mit-han-lab/smoothquant)。

二、 研究的学术背景

本研究属于人工智能领域,具体聚焦于大语言模型(Large Language Models, LLMs)的模型压缩与高效推理技术。随着以GPT-3、OPT、BLOOM等为代表的LLMs在各类任务上展现出卓越性能,其庞大的参数量(动辄数百亿甚至上千亿)带来了极高的计算和内存需求,严重阻碍了其实际部署与应用。例如,一个1750亿参数的模型以FP16精度运行至少需要350GB内存,这需要多块高端GPU才能支持,导致推理成本高昂、延迟难以接受。

量化(Quantization)是降低模型内存占用和加速推理的关键技术之一,其核心思想是将模型权重(Weights)和激活值(Activations)从高精度浮点数(如FP16)转换为低精度整数(如INT8)。理想情况下,8位权重和8位激活(W8A8)量化可以将内存占用减半,并利用硬件对整数矩阵乘法(GEMM)的专门优化,显著提升计算吞吐量。

然而,现有量化方法在应用于LLMs时面临严峻挑战。研究表明,当LLMs参数量超过约67亿时,其激活值中会出现系统性的大幅值离群值(Outliers)。这些离群值的存在使得激活值分布极不均匀,在进行传统的逐张量(Per-Tensor)或逐令牌(Per-Token)量化时,量化范围会被离群值主导,导致绝大多数非离群值被压缩到极少的量化级别中,有效量化位数极低,从而引发严重的精度损失。虽然LLM.int8()等方法通过混合精度(对离群值保留FP16)解决了精度问题,但其实现复杂,难以在硬件上高效执行,甚至可能比FP16基线更慢。因此,开发一种既能保持LLMs高精度、又能实现硬件高效W8A8量化的训练后(Post-Training Quantization, PTQ)方案,成为一个亟待解决的关键问题。

本研究旨在提出一种新颖的、无需重新训练的、通用的W8A8 PTQ解决方案,以克服LLMs激活值量化难题,实现准确性与硬件效率的兼得,从而降低LLMs的部署门槛和服务成本。

三、 研究的详细工作流程

SmoothQuant的核心思想基于一个关键观察:在LLMs中,权重易于量化,而激活值难以量化。激活值的量化困难主要源于其通道间存在幅度差异巨大的离群值,但这些离群值在不同令牌(Token)间具有通道持久性(即某些特定通道总是产生大值)。SmoothQuant通过一个数学上等效的变换,在离线阶段将激活值的量化难度“迁移”到权重上,从而“平滑”(Smooth)激活值的分布,使其变得易于量化。

具体工作流程包含以下几个关键步骤:

  1. 问题分析与观察:研究团队首先对LLM中线性层的输入激活和权重分布进行了可视化分析(如图4所示)。他们确认了三个关键模式:(a) 激活值比权重更难量化;(b) 离群值(幅度比大多数值大~100倍)是激活值量化的主要障碍;© 离群值集中在固定的少数通道中,且同一通道内不同令牌间的方差较小。这启发了他们:如果能为每个通道使用不同的量化步长(即逐通道量化),就能有效解决离群值问题。模拟实验(表1)证实了逐通道激活量化能几乎无损地恢复FP16精度,但该方法与硬件高效的INT8 GEMM内核不兼容,因为高效内核只允许在矩阵乘法的外层维度(令牌维度T和输出通道维度Co)进行缩放,而不能在内层维度(输入通道维度Ci)进行。

  2. SmoothQuant方法设计:为了解决硬件兼容性问题,SmoothQuant提出了一种逐通道平滑缩放变换。对于一个线性层 Y = X · W,他们引入一个逐通道的平滑因子向量 s ∈ R^{Ci}。对输入激活X的每个输入通道j除以对应的缩放因子 s_j,同时为了保持数学等价性,对权重W的对应输出通道乘以相同的缩放因子 s_j。即:Y = (X diag(s)^{-1}) · (diag(s) W) = X̂ · Ŵ。经过此变换,新的激活X̂和新的权重Ŵ都变得更容易量化。这个变换可以离线完成,并融合到前一层层的参数中,运行时无需额外开销。

  3. 平滑因子的计算与迁移强度控制:平滑因子s的计算是关键。一个朴素的选择是令 s_j = max(|X_j|),这将使所有激活通道的最大值相等,完全消除激活值的量化难度,但会将所有难度转移到权重上,可能导致权重量化误差过大。反之,若令 s_j = 1 / max(|W_j|),则会将所有权重量化难度转移到激活值上。因此,需要一个平衡。SmoothQuant引入了一个超参数迁移强度α,用于控制量化难度在激活和权重之间的分配比例:s_j = (max(|X_j|))^α / (max(|W_j|))^{1-α}。当α=0.5时,意味着权重和激活在对应通道上承担相似的量化难度。研究通过在校准数据集(如Pile验证集的512个随机句子)上运行快速网格搜索来确定适合特定模型的α值。对于OPT和BLOOM系列模型,α=0.5是一个普遍适用的平衡点;对于激活离群值更显著的GLM-130B模型,则选择更大的α(如0.75),将更多难度迁移到权重上。

  4. 量化流程与设置:研究将SmoothQuant应用于Transformer块的各个计算密集型算子。如图6所示,所有线性层(自注意力层和前馈网络层)以及注意力计算中的批处理矩阵乘法(BMM)都使用INT8算术。而像ReLU、Softmax、LayerNorm这样的轻量级逐元素操作则保留FP16精度,以平衡精度和效率。SmoothQuant本身与具体的量化方案正交,因此研究团队实现了三种不同效率级别的量化设置(O1-O3,见表2),从较精细但开销稍大的逐令牌动态量化(O1),到更高效但可能精度稍低的逐张量静态量化(O3),为用户提供了灵活性。

  5. 实验评估流程

    • 模型与数据集:研究选取了当时公开可用的最大LLMs进行验证,包括OPT(最大175B)、BLOOM(176B)、GLM-130B,并进一步扩展到MT-NLG(530B)。使用多个零样本评估任务(如LAMBADA, HellaSwag, PIQA等)和语言建模数据集(WikiText)来评估量化前后的模型精度。
    • 基线对比:与四种训练后INT8量化基线进行比较:朴素的W8A8逐张量动态量化、ZeroQuant(逐令牌动态+分组权重量化)、LLM.int8()(混合精度分解)和Outlier Suppression(离群值抑制)。
    • 实现与测量:研究在两种后端上实现了SmoothQuant:PyTorch HuggingFace(用于概念验证和精度基准测试)以及FasterTransformer(用于高性能生产环境基准测试)。在两种框架中,均使用CUTLASS INT8 GEMM内核实现了INT8线性层和BMM函数。性能评估包括上下文阶段(生成所有隐藏状态)和解码阶段(自回归生成)的端到端延迟以及峰值GPU内存使用量。实验在NVIDIA A100-80GB GPU服务器上进行。

四、 研究的主要结果

  1. 精度保持结果

    • 大规模模型:如表3和表4所示,SmoothQuant成功地对所有超过1000亿参数的公开LLM实现了无损或接近无损的W8A8量化。对于最难量化的OPT-175B模型,SmoothQuant在所有量化设置(O1-O3)下均能匹配FP16基线的精度,而其他基线方法(如W8A8、ZeroQuant)则导致模型性能崩溃(接近随机猜测)。LLM.int8()虽然能保持精度,但其混合精度方法带来了显著的延迟开销。
    • 不同规模模型:如图7所示,SmoothQuant在从6.7B到175B的所有OPT模型规模上均能一致地保持精度,证明了其普适性。
    • 指令微调模型与LLaMA模型:研究还验证了SmoothQuant在指令微调模型(OPT-IML)和新兴的LLaMA模型家族上的有效性(表5、表6),均能以可忽略的精度损失实现W8A8量化。
  2. 速度提升与内存节省结果

    • PyTorch实现:如图8所示,在单GPU上,SmoothQuant-O3相比FP16基线,为OPT模型带来了高达1.51倍的加速和1.96倍的内存节省。而LLM.int8()由于混合精度开销,在大多数情况下甚至比FP16更慢。
    • FasterTransformer实现:如图9所示,在已高度优化的FasterTransformer框架中集成SmoothQuant-O3后,对于OPT-13B和OPT-30B模型,仍能获得高达1.56倍的加速。更重要的是,对于必须分布在多个GPU上的大型模型(如OPT-66B和OPT-175B),SmoothQuant能够仅使用一半数量的GPU达到相似甚至更快的推理速度。内存占用几乎减半。
    • 解码阶段:如表7所示,在自回归解码阶段,SmoothQuant持续降低了每个令牌的解码延迟(最高1.42倍加速),同时将内存占用减半,显著降低了LLM部署成本。
    • 超大规模模型:如表8和表9所示,SmoothQuant成功将MT-NLG 530B模型量化为W8A8,精度损失可忽略不计。量化的530B模型仅需8块A100 GPU(一个节点)即可服务,而FP16版本需要16块GPU,在相似延迟下内存需求减半。
  3. 消融研究结果

    • 量化方案:表10显示,量化粒度越粗(从O1到O3),延迟越低。静态量化(O3)由于无需运行时计算量化步长,比动态量化加速更明显。所有SmoothQuant设置均快于FP16基线。
    • 迁移强度α:图10展示了α对OPT-175B模型在LAMBADA任务上精度的影响。当α过小(<0.4)时,激活值难以量化;当α过大(>0.6)时,权重难以量化。只有在“甜蜜点”区域(0.4-0.6)选择α,才能同时保证权重和激活值的低量化误差,从而维持模型性能。

五、 研究的结论、意义与价值

本研究提出并验证了SmoothQuant,这是一种准确、高效、无需训练、通用的大语言模型训练后W8A8量化方法。其核心贡献在于通过一个数学上等效的逐通道平滑变换,巧妙地将LLMs中激活值量化难题迁移到更容易量化的权重上,从而在保持模型精度的同时,实现了全INT8 GEMM计算。

科学价值:SmoothQuant深入剖析了LLMs量化困难的根源(激活值中通道持久的离群值),并提出了一个简洁而有效的解决方案。它揭示了通过“难度迁移”来平衡网络不同部分量化敏感性的新思路,为后续的模型压缩研究提供了新的方向。

应用价值:该研究提供了一站式解决方案,极大地降低了LLMs的部署门槛和服务成本。它使得在单节点(8 GPU)上服务超过5000亿参数的模型成为可能,将LLMs的硬件需求降低了一半,同时还能获得推理加速。这有助于“民主化”LLMs的应用,让更多研究机构和企业能够负担得起大规模语言模型的推理服务。

六、 研究的亮点

  1. 重要的发现:明确指出了LLMs激活值量化困难的根本原因在于通道持久的离群值,并发现了通过平衡权重与激活的量化难度可以有效解决此问题。
  2. 方法的新颖性:提出了逐通道平滑缩放这一核心创新方法。该方法在数学上等效,完全离线进行,与硬件高效INT8内核天然兼容,无需定制复杂的混合精度内核。
  3. 效果的突破性:首次在多个超过1000亿参数的LLM上实现了无损或接近无损的W8A8训练后量化,并在生产级推理框架中实现了显著的加速(最高1.56倍)和内存节省(约2倍)
  4. 目标的特殊性:成功瞄准并解决了当时LLM部署中的核心痛点——精度与硬件效率难以兼得,为超大规模模型的实际应用扫除了一大障碍。

七、 其他有价值的内容

研究在附录A中对“仅权重量化”(Weight-only Quantization)方法(如GPTQ)与SmoothQuant所代表的“权重-激活同时量化”(W8A8)进行了对比讨论。作者指出,仅权重量化在小批量或单令牌生成的场景下可能因减少数据加载而受益,但在需要处理长上下文、大批量的生产场景中,激活值(尤其是键值缓存KV Cache)的内存占用不可忽视,此时W8A8量化能带来更大的整体收益。作者认为两种方向是正交的,未来可以探索将SmoothQuant与更极致的权重量化方法(如W4A4)结合,以追求更高的硬件效率。这一讨论展现了作者对技术路线图的深入思考。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com