AI开发平台MODELARTS-使用SmoothQuant量化工具转换权重

时间:2024-05-22 19:26:24

使用SmoothQuant量化工具转换权重

当前对Llama/Llama2/Llama3系列、Qwen系列、Qwen1.5系列模型支持AWQ(W4A16)和SmootQuant(W8A8)两种量化方案。

  • AWQ(W4A16)量化方案能显著降低模型显存以及需要部署的卡数。降低小batch下的增量推理时延。
  • SmootQuant(W8A8)量化方案能降低模型显存以及需要部署的卡数。也能同时降低首token时延和增量推理时延。

本章节介绍如何使用SmoothQuant量化工具如何进行权重转换。

SmoothQuant量化工具使用到的脚本存放在代码包AscendCloud-3rdLLM-x.x.x.zip的llm_tools目录下。

代码目录如下:

AutoSmoothQuant  #量化工具
         ├── ascend_autosmoothquant_adapter  # 昇腾量化使用的算子模块
         ├── autosmoothquant                 # 量化代码
         ├── requirements.txt                # 第三方依赖
         ├── setup.py                        # 安装量化模块的脚本
          ...

量化方法:当前只支持激活值per-token,权重per-channel,动态量化。

具体操作如下:

  1. 配置环境。
    cd llm_tools/AutoSmoothQuant/
    pip install -r requirements.txt
    pip install -e .
  2. 配置需要使用的NPU卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。
    export ASCEND_RT_VISIBLE_DEVI CES =0,1

    NPU卡编号可以通过命令npu-smi info查询。

  3. 执行权重转换。
    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-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粒度量化,当前必须指定。

      转换Qwen系模型可能比较耗时,72b权重大致需要3-5h。

  4. 启动smoothQuant量化服务。

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

    --q smoothquant 或者 --quantization smoothquant
support.huaweicloud.com/bestpractice-modelarts/modelarts_10_1909.html