昇腾社区首页
中文
注册
开发者
下载

Anti-Outlier离群值抑制

简介

离群值抑制(Anti-Outlier)主要用于解决模型量化中,因激活值分布存在异常值而导致的精度损失问题。在大模型量化过程中,如果激活值中存在数值极大的离群点,会拉大量化区间,导致大部分正常数值的量化分辨率降低,从而严重影响模型精度。该技术通过对离群值进行平滑或抑制处理,有效改善数据分布,确保量化后的模型仍能保持较高的推理精度。

Anti-Outlier可以配合其他量化方式一起使用。当前支持:W8A8 + Anti-Outlier,W8A16 + Anti-Outlier和W8A8SC + Anti-Outlier。

以下展示了W8A8 + Anti-Outlier + PDMIX量化后权重描述文件quant_model_description.json中的部分内容:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "model.layers.0.self_attn.q_proj.weight": "W8A8_MIX",
  "model.layers.0.self_attn.q_proj.bias": "FLOAT",
  "model.layers.0.self_attn.q_proj.quant_bias": "W8A8_MIX", 
  "model.layers.0.self_attn.q_proj.input_scale": "W8A8_MIX",
  //...
  "model.layers.0.mlp.down_proj.weight_offset": "W8A8_MIX",
  "model.layers.0.input_layernorm.weight": "FLOAT",
  "model.layers.0.input_layernorm.bias": "FLOAT",
  "model.layers.0.post_attention_layernorm.weight": "FLOAT",
  "model.layers.0.post_attention_layernorm.bias": "FLOAT",
   //...
}

当前主流开源大模型(如LLaMA、Qwen等)通常使用RmsNorm作为input_layernorm和post_attention_layernorm。当启用非对称离群值抑制算法时,会引入额外的偏置项(以下称为norm_bias)。

为了保证计算等价性,该算法的执行逻辑如下:

  1. Norm层引入:在执行Norm操作时,将norm_bias加到权重中。
  2. Linear层抵消:在随后的Linear层计算前,将对应的norm_bias减去。

在实际的模型权重中,norm_bias在Linear层的抵消张量,会根据量化场景的不同,以不同方式融合:

  • Per-tensor场景:直接融合进Linear层的量化偏置quant_bias中。

    如上文示例中的model.layers.0.self_attn.q_proj.quant_bias。

  • Per-token场景:体现为Linear层的普通偏置bias。

    如上文示例中的model.layers.0.self_attn.q_proj.bias。

    • 若原Linear层已有Bias(如Qwen2系列):直接融合进原有的Bias中。
    • 若原Linear层无Bias(如Qwen3-32B):创建一个新的Bias层来存储该值。

    性能优化建议: 在PDMIX场景(P阶段使用Per-token量化)下,离群值抑制的bias对量化精度的影响通常较小。为提升性能,可考虑在保证等价性的前提下,在Norm层和Linear层同时移除Bias,从而节省一次Add计算开销。

图1 量化权重推理时流程
表1 权重量化后dtype及shape信息(假设原始权重的shape为[n])

Tensor信息

input_layernorm.bias

post_attention_layernorm.bias

dtype

float32

float32

shape

[n]

[n]

生成权重

  1. 请参见msModelSlim工具,安装msModelSlim工具。
  2. 使用msModelSlim工具生成量化权重。

    以Qwen3-14B为例,安装msModelSlim工具后,可以使用如下命令,快速生成一份带有离群值抑制的W8A8PDMIX量化权重:

    msmodelslim quant --model_path {浮点权重路径} --save_path {量化权重路径} --device npu --model_type Qwen3-14B --quant_type w8a8 --trust_remote_code True

    执行上述命令会默认使用msModelSlim工具的最佳实践方式执行量化,如需了解更多量化参数配置,请参考msModelSlim工具文档。

执行推理

以Qwen3-14B-W8A8PDMIX为例,您可以使用以下指令执行对话测试,推理内容为"What's deep learning?",最长输出20个token。

1
2
cd ${ATB_SPEED_HOME_PATH}
torchrun --nproc_per_node 2 --master_port 12350 -m examples.run_pa --model_path {量化权重路径}