下载
中文
注册

Anti-Outlier 离群值处理

简介

离群值处理旨在解决在模型量化过程中由于数据分布异常导致的量化精度损失问题。在大模型量化中,离群值可能会导致量化后的模型性能下降,因为量化过程需要将连续的浮点数值转换为离散的整数值,而离群值可能会超出预期的量化范围。通过离群值抑制的技术手段可以减少或消除离群值对量化模型性能的影响,确保量化后的模型具有良好的精度表现。

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

以下展示了W8A8 + Anti-Outlier量化后权重描述文件quant_model_description_w8a8.json中的部分内容:
{
  "model_quant_type": "W8A8",
  "model.embed_tokens.weight": "FLOAT",
  "model.layers.0.input_layernorm.weight": "FLOAT",
  "model.layers.0.input_layernorm.module.weight": "W8A8",
  "model.layers.0.input_layernorm.module.bias": "W8A8"
}

新增input_layernorm.module.weight和input_layernorm.module.bias权重,用于对激活值进行离群值处理。

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

Tensor信息

layernorm.module.weight

layernorm.module.bias

dtype

float32

float32

shape

[n]

[n]

生成权重

以LLaMa2-7B为例,您可以使用以下指令生成W8A8量化权重。

cd ${ATB_SPEED_HOME_PATH}
python examples/models/llama/convert_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A8量化权重路径} --w_bit 8 --a_bit 8 --disable_level L0 --device_type cpu --anti_method m1 --act_method 1 --calib_file ${llm_path}/examples/convert/model_slim/boolq.jsonl
  • 相比于W8A8的量化方式,需要新增anti_method 参数。
  • 不同模型对anti_method参数的配置不同,请参考模型Readme文件。

执行推理

以LLaMa2-7B为例,您可以使用以下指令执行对话测试,推理内容为"What's deep learning?"。

cd ${ATB_SPEED_HOME_PATH}
bash examples/models/llama/run_pa.sh {W8A8量化权重路径}