llmcompressor.modifiers.smoothquant.base
类
-
SmoothQuantMapping–用于存储激活层与后续权重之间映射关系的数据类
-
SmoothQuantModifier–实现了 https://arxiv.org/abs/2211.10438 中的 SmoothQuant 算法。此
-
SmoothQuantScale–用于存储层级通道的最小和最大值的类。此
SmoothQuantMapping dataclass
用于存储激活层与在平滑过程中必须进行平衡的后续权重之间的映射关系的数据类。
参数
-
(smooth_namestr) –激活层的名称
-
(smooth_layerModule) –存储激活层的 PyTorch 模块
-
(balance_layerslist[Module]) –smooth_layer 输入到的 PyTorch 模块列表,必须进行平衡以抵消 smooth_layer 的平滑
SmoothQuantModifier
基类:Modifier
实现了 https://arxiv.org/abs/2211.10438 中的 SmoothQuant 算法。此修改器对激活中的异常值执行通道级平滑,通过减小动态范围使其更易于量化。通过将反向操作应用于下一层权重来抵消平滑,从而使权重更难量化。
由于此修改器会操作模型的权重,因此它只能用于一次性运行,而不能在训练期间使用。激活范围通过对少量校准数据运行模型来确定。
示例配方
SmoothQuantModifier:
smoothing_strength: 0.5
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"]
:param smoothing_strength: alpha,执行平滑的强度(0-1 范围) :param mappings: 要平滑的激活层列表,以及要缩放其输出以实现平滑的层。映射列表的每个条目本身都应是一个列表,其中第一个条目是共享相同输入激活(需要平滑的激活)的层列表,第二个条目是要缩放其输出来实现平滑的层。如果使用正则表达式,它将匹配模块名称重叠最大的层。如果未提供,将从模型架构中推断该参数。 :param ignore: 要忽略的层列表,即使它们匹配 mappings 中的正则表达式。它应匹配用于实现平滑(mappings 列表的第二个条目)的层输出的名称。 :param num_calibration_steps: 用于校准的样本数,或 None 表示使用整个数据集
参数
-
–calibration_function用于前向传播的可选函数,或 None 表示使用默认的 tensor_module_forward
方法
-
on_finalize–通过清除比例和映射数据来清理
-
on_initialize–初始化并在给定状态下运行 SmoothQuant
on_finalize
通过清除比例和映射数据来清理
源代码位于 llmcompressor/modifiers/smoothquant/base.py
on_initialize
初始化并在给定状态下运行 SmoothQuant
参数
-
(stateState) –要运行 SmoothQuant 的状态
返回
-
bool–成功运行为 True,否则为 False