W8A16

简介

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

量化后权重目录结构:

├─ config.json
├─ quant_model_weight_w8a16.safetensors
├─ quant_model_description_w8a16.json
├─ tokenizer_config.json
├─ tokenizer.json
└─ tokenizer.model

以下展示了量化后权重描述文件quant_model_description_w8a16.json中的部分内容:

{
  "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类型的原始权重。

表1 权重量化后dtype及shape信息(假设原始权重的shape为[n, k])

Tensor信息

weight

weight_scale

weight_offset

dtype

int8

float16/bfloat16

(和原始权重dtype保持一致)

float16/bfloat16

(和原始权重dtype保持一致)

shape

[n, k]

[n, 1]

[n, 1]

生成权重

以LLaMa 2 70B为例,您可以使用以下指令生成W8A16量化权重。

cd ${ATB_SPEED_HOME_PATH}
python examples/models/llama/convert_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A16量化权重路径} --w_bit 8 --a_bit 16 --act_method 3 --calib_file ""

执行推理

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

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