使用SmoothQuant量化
SmoothQuant(W8A8)量化方案能降低模型显存以及需要部署的卡数。也能同时降低首token时延和增量推理时延。支持SmoothQuant(W8A8)量化的模型列表请参见支持的模型列表和权重文件。
本章节介绍如何使用SmoothQuant量化工具实现推理量化。
SmoothQuant量化工具使用到的脚本存放在代码包AscendCloud-LLM-x.x.x.zip的llm_tools目录下。
代码目录如下:
AutoSmoothQuant #量化工具 ├── ascend_autosmoothquant_adapter # 昇腾量化使用的算子模块 ├── autosmoothquant # 量化代码 ├── build.sh # 安装量化模块的脚本 ...
具体操作如下:
- 参考Step1 环境准备创建pod准备量化环境。
- 执行如下命令进入容器,并进入AutoSmoothQuant目录下
kubectl exec -it {pod_name} bash cd /home/ma-user/AscendCloud/AscendCloud-LLM/llm_tools/AutoSmoothQuant/autosmoothquant/examples
- 配置需要使用的NPU卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。
export ASCEND_RT_VISIBLE_DEVICES=0,1
通过命令npu-smi info查询NPU卡为容器中的第几张卡。例如下图查询出两张卡,如果希望使用第一和第二张卡,则“export ASCEND_RT_VISIBLE_DEVICES=0,1”,注意编号不是填4、5。图1 查询结果
- 执行权重转换。
cd autosmoothquant/examples/ python smoothquant_model.py --model-path /home/ma-user/llama-2-7b/ --quantize-model --generate-scale --dataset-path /data/nfs/user/val.jsonl --scale-output scales/llama2-7b.pt --model-output quantized_model/llama2-7b --per-token --per-channel
参数说明:
- --model-path:原始模型权重路径。
- --quantize-model:体现此参数表示会生成量化模型权重。不需要生成量化模型权重时,不体现此参数
- --generate-scale:体现此参数表示会生成量化系数,生成后的系数保存在--scale-output参数指定的路径下。如果有指定的量化系数,则不需此参数,直接读取--scale-input参数指定的量化系数输入路径即可。
- --dataset-path:数据集路径,推荐使用:https://huggingface.co/datasets/mit-han-lab/pile-val-backup/resolve/main/val.jsonl.zst。
- --scale-output:量化系数保存路径。
- --scale-input:量化系数输入路径,如果之前已生成过量化系数,则可指定该参数,跳过生成scale的过程。
- --model-output:量化模型权重保存路径。
- --smooth-strength:平滑系数,推荐先指定为0.5,后续可以根据推理效果进行调整。
- --per-token:激活值量化方法,如果指定则为per-token粒度量化,否则为per-tensor粒度量化。
- --per-channel:权重量化方法,如果指定则为per-channel粒度量化,否则为per-tensor粒度量化。
- 启动smoothQuant量化服务。
参考部署推理服务,使用量化后权重部署AWQ量化服务。
注:Step3 创建服务启动脚本启动脚本中,服务启动命令需添加如下命令。
-q smoothquant 或者 --quantization smoothquant --dtype=float16