跳到内容

llmcompressor.modifiers.logarithmic_equalization.base

LogarithmicEqualizationModifier

Bases: SmoothQuantModifier

实现了来自 https://arxiv.org/abs/2308.15987 的对数均衡算法。该修改器对激活中的离群值进行通道级别的平滑处理,通过减小动态范围使其更容易量化。通过将反向操作应用于下一层权重来抵消平滑,使权重量化稍微困难一些。

由于此修改器会操作模型的权重,因此应仅在一次性(one-shot)应用中使用,而不能在训练期间使用。激活范围是通过让一小部分校准数据通过模型来确定的。

该算法与 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