趋近智
在对模型进行量化 (quantization)时,我们使用比例因子 和零点 将高精度浮点数映射到低精度整数。此时会有一个基本问题:我们应该对整个张量(例如一层中的所有权重 (weight))使用相同的 和 ,还是对张量的不同部分使用不同的参数 (parameter)?这一选择决定了量化粒度。粒度级别对模型压缩、推理 (inference)速度和潜在准确度损失之间的权衡有显著影响。
最简单的方法是逐张量量化。在这种方法中,计算一个单独的比例因子 和一个单独的零点 ,并将其应用于整个张量中的所有值。例如,如果考虑线性层的权重 (weight)矩阵,我们将找到该矩阵中所有权重的最小值和最大值,以确定一对 值。
其中 和 是根据 原始张量 的全局最小值和最大值计算得出。
优点:
缺点:
一组量化参数 (parameter) (s, z) 是从整个张量的最小值和最大值中得出的。大值 8.1 明显拓宽了范围。
为了应对逐张量量化的局限性,特别是在卷积层或线性层等中,我们可以使用逐通道量化。对于线性层(形状为 [output_features, input_features])或卷积层(形状为 [output_channels, input_channels, height, width])中的权重 (weight)张量,这通常意味着为每个输出通道计算单独的一对 值。
想象一下沿着输出通道维度切分权重张量。对于每个切片(代表连接到一个输出神经元或通道的权重),我们独立地找到最小值和最大值,并计算其特定的 和 。
优点:
缺点:
为每个通道(本例中为行)计算单独的量化参数 (s, z)。由于 8.1,通道 1 的范围仍然很宽,但其他通道(例如通道 2、3、4)使用适合其特定值的范围,从而保留了更多精度。
为了进一步细化粒度,逐组量化将每个通道(或行/列)内的元素细分为更小的组,并为每个组计算单独的 参数 (parameter)。对于形状为 [output_features, input_features] 的权重 (weight)矩阵,分组通常沿 input_features 维度应用。常见的组大小为 32、64 或 128。
例如,如果 input_features 为 1024 且组大小为 128,则每个输出通道的权重向量 (vector)将被分成 个组,每个组将有自己的 。
优点:
缺点:
在单个通道(行)内,权重被分为多个组(此处为演示目的,大小为 2)。每个组都有自己的参数 (s, z),从而能够更精细地适应值范围。异常值 8.1 现在只影响组 2 的参数。
量化 (quantization)粒度的选择取决于几个因素:
实践中,逐通道量化是权重的常见默认选择,而当需要降低精度或逐通道量化不足时,则采用逐组量化。逐张量最简单,但通常保留用于激活或对准确度影响最小的情况。理解这些选择能帮助您在对大语言模型 (LLM)进行量化时做出明智的决定。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•