跳到内容

llmcompressor.modifiers.logarithmic_equalization

模块

LogarithmicEqualizationModifier

Bases: SmoothQuantModifier

实现了源自 https://arxiv.org/abs/2308.15987 的对数均衡算法。此修改器对激活中的异常值进行通道级别的平滑处理,从而通过减小动态范围使其更易于量化。通过对下一层权重应用逆操作来抵消平滑处理,这使得权重更难量化。

由于此修改器会操纵模型的权重,因此它只能一次性使用,不能在训练期间使用。激活范围是通过让一小组校准数据通过模型来确定的。

此算法与 SmoothQuant 非常相似,仅改变了计算平滑尺度的方式。此修改器继承了 SmoothQuantModifier 的大部分功能。

示例配方

LogarithmicEqualizationModifier:
  mappings: [
    [["re:.*q_proj", "re:.*k_proj", "re:.*v_proj"], "re:.*self_attn_layer_norm"],
    [["re:.*fc1"], "re:.*final_layer_norm"]
  ]
  ignore: ["model.decoder.final_layer_norm"]

参数

  • mappings

    列出要平滑的激活层,以及要缩放输出以实现激活平滑的层。映射列表的每个条目本身都应该是一个列表,其中第一个条目是共享相同输入激活(要平滑的激活)的层列表,第二个条目是输出被缩放以实现平滑的层。如果使用正则表达式,它将匹配模块名称中重叠最大的层。

  • ignore

    要忽略的层列表,即使它们匹配映射中的正则表达式。它应该匹配其输出被缩放以实现平滑的层的名称(映射列表的第二个条目)。

  • num_calibration_steps

    用于校准的样本数量,或 None 表示使用整个数据集

  • calibration_function

    用于前向传播的可选函数,或 None 表示使用默认的 tensor_module_forward