趋近智
尽管量化的基本目的不变,即降低模型参数和激活值的数值精度以提升计算效率,但要将这些技术有效应用于大型语言模型(LLMs),需要根据其独特的规模和结构来调整核心原则。量化的基本思想在此处呈现,并侧重于拥有数十亿参数的Transformer模型。
量化的核心是将高精度浮点值(如FP32或FP16)映射到低精度表示形式,通常是整数(如INT8或INT4)或专用低位浮点格式。这种精度降低是效率提升的原因:模型尺寸减小可降低内存带宽需求,并在针对低精度算术优化的硬件上实现更快的计算。
将浮点值 映射到其量化对应值 的过程需要定义一个映射函数。两种主要方案常见:
对称量化: 该方案将浮点值对称地映射到零点附近。量化公式通常为:
其中, 是缩放因子,根据张量中观测到的绝对值范围计算得出(例如,,其中 是可表示的最大整数值)。clip 函数确保结果保持在目标整数类型的有效范围内(例如,INT8为[-128, 127])。对称量化一个重要特点是浮点值0.0精确映射到整数0。这对于涉及填充或稀疏性的操作有利。
非对称量化: 该方案通过引入零点(或偏移量) 来处理不以零为中心的数值范围:
缩放因子 基于数值的完整范围计算(),零点 表示与浮点0.0对应的整数值()。当数据分布倾斜或偏移时,这使得非对称量化能够更有效地利用完整的整数范围。
对称与非对称量化映射之间的区别。对称量化将0.0映射到整数0,而非对称量化则使用零点 处理偏移范围。
对于LLMs,权重分布通常合理地以零为中心,使对称量化成为常见选择。然而,激活值,尤其是在ReLU或GeLU函数之后,可以是严格非负的或具有高度非对称分布。在这种情况下,非对称量化通过更有效地使用可用整数范围,可能提供更好的表示保真度,尽管它引入了零点参数 ,这会增加计算的微小复杂性。
另一个基本选择是应用缩放因子 (如果非对称,还有零点 )的粒度:
逐张量量化: 对整个张量(例如,特定线性层中的所有权重)使用单个 和 。这是最简单的方法,最大限度地减少了存储量化参数的开销。然而,如果张量的不同部分具有明显不同的值范围,单一缩放因子可能导致低范围值的精度不佳或高范围值的截断。
逐通道(或逐轴/逐组)量化: 为张量的特定维度计算独立的 和 值。对于线性层的权重矩阵(形状为[output_features, input_features]),逐通道量化通常意味着为每个输出通道(即每一行)计算唯一的 (和 )。这使得量化范围能更贴近每个通道或参数组内部的分布。
线性层中两个通道权重值范围明显不同的例子。逐张量量化难以同时精确表示这两个范围。
在LLMs中,线性层占据了绝大多数参数。这些层中的权重通常在不同的输出通道(神经元)间表现出突出的差异。因此,逐通道量化常常是量化LLM权重的优选方法,因为相较于相同位宽下的逐张量量化,它通常能更好地保持精度。逐张量量化仍可考虑用于激活值,因为在那里,逐通道参数的开销相对于计算可能更大,或者分布更均匀。逐组量化(将缩放应用到通道内权重块)等变体也作为一种折衷方案存在。
无论是使用对称还是非对称方案,逐张量还是逐通道粒度,确定最优的量化参数( 和 )都非常重要。这个过程被称为校准,它涉及分析你打算量化的浮点值的统计分布。对于训练后量化(PTQ),这通常需要在一个小型、有代表性的数据集(校准数据集)上运行推理,以观测权重以及更重要的激活值的典型范围。校准数据的选择以及从观测范围(例如,最小值/最大值、百分位数范围)推导 和 的方法会明显影响最终量化模型的精度。
为何重温这些基础知识对LLMs如此重要?
理解对称/非对称映射与逐张量/逐通道粒度之间的这些基本权衡,为评估和实施专门针对LLMs的更高级PTQ和QAT技术提供了必要的背景,这些技术将在后续章节中介绍。这些高级方法通常会改进缩放因子的计算方式,或选择性地应用不同的粒度,以优化精度与性能的平衡。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造