W8A16
简介
此量化方式对激活值不做量化,仅将权重量化为8 bit。使用per Channel量化。

- 仅Atlas 800I A2 推理服务器支持此量化方式。
- 仅支持LLaMA3-70B。
- 仅支持和Anti-Outlier离群值处理、KV Cache int8量化配合使用。
量化后权重目录结构:
├─ config.json ├─ quant_model_weight_w8a16.safetensors ├─ quant_model_description.json ├─ tokenizer_config.json ├─ tokenizer.json └─ tokenizer.model
- 量化输出包含:权重文件quant_model_weight_w8a16.safetensors和权重描述文件quant_model_description.json。
- 目录中的其余文件为推理时所需的配置文件,不同模型略有差异。
以下展示了量化后权重描述文件quant_model_description.json中的部分内容:
1 2 3 4 5 6 7 | { "model_quant_type": "W8A16", "model.embed_tokens.weight": "FLOAT", "model.layers.0.self_attn.q_proj.weight": "W8A16", "model.layers.0.self_attn.q_proj.weight_scale": "W8A16", "model.layers.0.self_attn.q_proj.weight_offset": "W8A16", } |
量化后的MatMul权重新增weight_scale和weight_offset,用于对MatMul的计算结果进行反量化。
图1 量化权重推理时流程


此量化方式支持量化float16或bfloat16类型的原始权重。
Tensor信息 |
weight |
weight_scale |
weight_offset |
bias |
---|---|---|---|---|
dtype |
int8 |
float32 |
float32 |
float16 |
shape |
[n, k] |
[n, 1] |
[n, 1] |
[n] |
Tensor信息 |
weight |
weight_scale |
weight_offset |
bias |
---|---|---|---|---|
dtype |
int8 |
float32 |
float32 |
float32 |
shape |
[n, k] |
[n, 1] |
[n, 1] |
[n] |

仅当浮点权重存在bias场景时,量化权重才会有bias。
生成权重
以LLaMA2-70B为例,您可以使用以下指令生成W8A16量化权重。
cd ${ATB_SPEED_HOME_PATH} python -m examples.convert.model_slim.quantifier --model_path {浮点权重路径} --save_directory {W8A16量化权重路径} --calib_file= --w_bit 8 --a_bit 16 --act_method 3 --tokenizer_args '{"padding_side":"left","pad_token":"<unk>"}'
- 以上指令包含生成LLaMA2-70B W8A16权重的最优参数配置,不同模型的参数配置不同,请参考模型Readme文件。
- W8A16量化时无需校准数据集,故calib_file传入空字符串即可。
执行推理
以LLaMA2-70B为例,您可以使用以下指令执行对话测试,推理内容为"What's deep learning?"。
cd ${ATB_SPEED_HOME_PATH}
bash examples/models/llama/run_pa.sh {W8A16量化权重路径}
父主题: 量化