更新时间:2025-07-29 GMT+08:00
分享

W4A16量化

大模型推理中,模型权重数据类型(weight),推理计算时的数据类型(activation)和kvcache一般使用半精度浮点FP16或BF16。量化指将高比特的浮点转换为更低比特的数据类型的过程。例如int4、int8等。

模型量化分为weight-only量化,weight-activation量化和kvcache量化。

量化的一般步骤是:1、对浮点类型的权重镜像量化并保存量化完的权重;2、使用量化完的权重进行推理部署。

什么是W4A16量化

W4A16量化是一种大模型压缩优化技术。其中“W4”表示将模型的权重量化为4位整数(int4),“A16”表示激活(或输入/输出)保持16位浮点数(FP16或BF16)。

这种量化方式只对参数进行4bit量化,激活值仍维持FP16精度。其优势在于能显著降低模型显存占用以及需要部署的卡数(约75%)。大幅降低小batch下的增量推理时延。

约束限制

支持AWQ W4A16、 per-group(group-size=128)和perchannel量化。

支持AWQ量化的模型列表请参见表1

步骤一:模型量化

可以在Huggingface开源社区获取量化后的模型权重;或者获取FP16/BF16的模型权重之后,通过autoAWQ工具进行量化。

方式一:从开源社区下载发布的AWQ量化模型

方式二:使用AutoAWQ量化工具进行量化。

AutoAWQ量化工具的适配代码存放在代码包AscendCloud-LLM-x.x.x.zip的llm_tools/AutoAWQ目录下。

1、使用该量化工具,需要切换conda环境,运行以下命令。

conda create --name awq --clone PyTorch-2.1.0 
conda activate awq
2、运行“examples/quantize.py”文件进行模型量化,量化时间和模型大小有关,预计30分钟~3小时。
python examples/quantize.py --model-path /home/ma-user/llama-2-7b/ --quant-path /home/ma-user/llama-2-7b-awq/ --calib-data /home/ma-user/mit-han-lab/pile-val-backup --group-size 128 --w-bit 4

参数说明:

  • --model-path:原始模型权重路径。
  • --quant-path:转换后权重保存路径。
  • --group-size:量化group size参数,指定-1时为per-channel权重量化,W4A16支持128和-1,W8A16支持-1。
  • --w-bit:量化比特数,W4A16设置4,W8A16设置8。
  • --calib-data:数据集路径,推荐使用:https://huggingface.co/datasets/mit-han-lab/pile-val-backup,注意需指定到val.jsonl的上一级目录。

    详细说明可以参考vLLM官网:https://docs.vllm.ai/en/latest/quantization/auto_awq.html

步骤二:权重格式离线转换(可选)

在GPU上AutoAWQ量化完成后,使用int32对int4的权重进行打包。昇腾上使用int8对权重进行打包,在线转换会增加启动时间,可以提前对权重进行转换以减少启动时间,转换步骤如下:

进入llm_tools/AutoAWQ代码目录下执行以下脚本:

执行时间预计10分钟。执行完成后会将权重路径下的原始权重替换成转换后的权重。如需保留之前权重格式,请在转换前备份。

python convert_awq_to_npu.py --model /home/ma-user/Qwen1.5-72B-Chat-AWQ

参数说明:

model:模型路径。

步骤三:启动量化服务

参考启动在线推理服务,在启动服务时添加如下命令。

 -q awq 或者--quantization awq

相关文档