大模型量化是推理优化的关键能力之一。通过降低权重和激活的数值精度,量化可以减少模型存储、显存占用和计算开销,是大模型在实际业务中高效部署的重要手段。

AMCT 是 CANN 社区提供的模型压缩与量化工具,面向昇腾 AI 处理器支持 LLM 模型高效量化,覆盖 BF16 基线评估、PTQ 离线数据提取、PTQ 参数训练、fake quant 精度评估等典型流程。

本文与 社区任务:贡献 LLM 量化样例 配套使用,提供一份可参考、可跑通的 AMCT-LLM 量化操作流程,帮助开发者快速理解基本工作流,降低上手成本。参与社区任务时,可以先按本文跑通示例,再结合自己领取的模型、量化规格和算法进行修改适配,形成可复现的实践样例并提交到 AMCT 仓库。

本文不是社区任务的最终交付件,而是完成社区任务的起步参考。开发者先按本文跑通示例,再按任务要求修改模型、量化规格、算法、脚本和 README,最终提交自己的可复现样例。

如果只想先跑通示例,可以直接从“本文示例流程”开始;如果已经准备领取社区任务,建议先阅读“领取任务后要改哪里”。

社区任务与参与入口

任务说明、奖品信息和验收标准以 AtomGit Issue 为准:

  • 任务与奖品说明:社区任务:贡献 LLM 量化样例
  • AMCT 仓库地址:https://atomgit.com/cann/amct
  • 提交渠道:AMCT Pull Requests,样例提交到仓库 examples/models/ 目录
  • 帖子入口:AMCT AtomGit Discussions
  • 微信群二维码:二维码过期时,可在帖子中查看,也可以在Issue中留言。
    在这里插入图片描述
    本次社区任务面向所有开发者开放,没有参与门槛。无论是第一次接触 AMCT,还是已经有大模型量化经验,都可以从本文示例开始,逐步完成自己的任务实践。欢迎大家领取任务、提交样例;遇到环境配置、运行命令、精度结果或交付格式问题,也欢迎进群讨论或在 Issue 中交流。

当前任务清单如下,完整要求请以任务 Issue 为准:

任务难度模型数据类型算法奖品
1L1Qwen3-0.6Bw4a8lwc + lac螺丝刀工具套组
2L1Qwen3-0.6Bw4a8flatquant螺丝刀工具套组
3L1Qwen3-0.6Bw4a8omniquant螺丝刀工具套组
4L1Qwen3-0.6Bw4a8autoround螺丝刀工具套组
5L1Qwen3-0.6Bw4a4lwc + lac螺丝刀工具套组
6L1Qwen3-0.6Bw4a4flatquant螺丝刀工具套组
7L1Qwen3-0.6Bw4a4omniquant螺丝刀工具套组
8L1Qwen3-0.6Bw4a4autoround螺丝刀工具套组

每个任务都需要完成 intmxfp 两种量化格式验证:w4a8 对应 int4/int8mxfp4/mxfp8w4a4 对应 int4/int4mxfp4/mxfp4

领取任务后要改哪里

开发者需要围绕所领取任务补齐样例代码、配置、脚本和 README,并重点修改以下内容:

需要修改的点说明
模型与 --model_name替换为任务指定模型,以及 AMCT 支持的模型名
量化数据类型和配置文件根据任务选择 w4a8 / w4a4,并准备 intmxfp 两份配置
PTQ 算法参数 --algos根据任务选择 lwc lacflatquantomniquantautoround
quant_target 与参数目录覆盖 Attention 和 MLP/MoE,并保证提取、训练、评估阶段目录一致
脚本路径和产物目录将一次性命令整理为可复用脚本,使用相对路径和占位路径
README 中的运行说明、产物说明和结果表按任务 Issue 要求补齐中英文 README、产物大小和 PPL 结果

新手准备清单

开始执行命令前,建议先确认以下内容:

[ ] 已进入 CANNLab 或具备可用的昇腾 NPU 环境。
[ ] npu-smi info 能正常显示 NPU。
[ ] 已进入 AMCT 仓库根目录,后续命令默认在该目录执行。
[ ] python3 -c "import amct_pytorch"python3 -c "import torch_npu" 可以正常运行。
[ ] 已设置 MODEL_DIR,并确认模型权重已下载到本地。
[ ] 当前环境可以访问 HuggingFace、hf-mirror 或 ModelScope,用于下载数据集和模型。
[ ] 已预留足够磁盘空间保存模型权重、PTQ 离线数据和 PTQ 参数;实际占用随模型大小、seq_len 和量化目标变化。
[ ] 已了解 PTQ 数据提取和训练耗时与模型大小、seq_len、NPU 性能相关,首次执行可能需要较长时间。
[ ] BF16 评估、PTQ 数据提取和 PTQ 后评估使用相同的 seq_len,否则 PPL 差值不具备可比性。

本文示例流程

本文以 Qwen/Qwen3-0.6B 为例,演示如何在 CANNLab 环境中使用 AMCT fake quant 模型,验证 W4A8 在 intmxfp 两种数据类型下的量化精度。

整体思路是:先评估 BF16 模型作为精度基线,再提取 PTQ 离线数据并训练量化参数,最后加载 PTQ 参数评估量化模型,与 BF16 PPL 对比。

环境检查 -> 检查 AMCT Python 环境 -> 准备模型权重 -> BF16 基线
-> 分别提取 attention/MLP PTQ 数据 -> 分别训练 PTQ 参数
-> 分别评估 W4A8-int / W4A8-mxfp fake quant 精度
示例值
模型Qwen/Qwen3-0.6B
AMCT 模型名qwen3
量化目标attn-linearmlp
量化配置amct_pytorch/configs/w4a8.yaml
量化数据类型intmxfp
PTQ 算法lwc lac
评估口径WikiText2 PPL, seq_len=4096

说明:W4A8 由 amct_pytorch/configs/w4a8.yaml 指定;--quant_dtype int--quant_dtype mxfp 用于切换量化数据类型。两种数据类型的 PTQ 输出目录需要分开保存。

常用参数速查:

参数含义示例或注意事项
--model本地模型权重目录本文使用 $MODEL_DIR
--model_nameAMCT 内部模型适配名称Qwen3 使用 qwen3
--seq_len评估和数据提取序列长度BF16、PTQ 数据提取和量化评估必须一致
--granularity量化粒度本文使用 block
--device运行设备本文使用 npu:0
--quant_target量化目标模块本文分别处理 attn-linearmlp
--quant_dtype量化数据格式intmxfp
--algosPTQ 算法本文使用 lwc lac
--bit_config量化配置文件W4A8 使用 amct_pytorch/configs/w4a8.yaml
--data_dirPTQ 离线数据目录提取和 PTQ 训练阶段必须一致
--output_dirPTQ 参数输出目录intmxfp 建议分开保存

1. 进入 CANNLab / AMCT 环境

1.1 进入仓库并加载 CANN 环境

CANNLab 已预置运行环境,无需拉取 docker 镜像。登录 CANNLab 实例后,打开终端并进入 AMCT 仓库。本文后续命令默认在 AMCT 仓库根目录执行:

cd /home/code/amct

加载 CANN 环境变量:

export ASCEND_HOME_PATH=/home/developer/Ascend/cann
source "$ASCEND_HOME_PATH/set_env.sh"

1.2 检查 NPU

检查 NPU 是否可用:

npu-smi info

参考环境:

产品型号Atlas A3 Pod 系列
操作系统Linux ARM
镜像amct_llm_images:v1
驱动Ascend HDK 25.5.1
CANN 路径/home/developer/Ascend/cann

1.3 配置数据源

数据集默认从 HuggingFace 官方源访问。若当前环境无法直连 huggingface.com,可切换到镜像源。两种方式二选一:

# 1. 使用 huggingface.com 官方源
unset HF_ENDPOINT
export HF_HUB_DISABLE_XET=1

# 2. 使用 hf-mirror 镜像源
export HF_ENDPOINT=https://hf-mirror.com
export HF_HUB_DISABLE_XET=1

后续命令默认用 MODEL_DIR 表示本地模型目录。seq_len 可按显存调整,但 BF16、PTQ 数据提取和 PTQ 后评估必须保持一致。

2. 检查 AMCT Python 环境

CANNLab / AMCT 开发环境通常已预置 AMCT 仓库和 Python 运行依赖。确认当前环境可用:

python3 -c "import amct_pytorch; print('AMCT ok')"
python3 -c "import torch_npu; print('torch_npu ok')"

仅在 import amct_pytorch 失败时,从源码构建并安装:

pip3 install -r requirements.txt
bash build.sh --torch
ls build_out/
pip3 install build_out/amct_pytorch-<version>-py3-none-linux_aarch64.tar.gz --user

pip 版本高于 25.2,安装包时追加 --no-build-isolation。安装后重新执行上面的验证命令。

3. 准备模型权重

设置本地模型目录。如果模型已存在,不需要重新下载:

export MODEL_DIR=/mnt/workspace/models/Qwen3-0.6B

如果本地还没有权重,再下载到 $MODEL_DIR。需要认证时先执行 modelscope login --token "$MODELSCOPE_API_TOKEN"

pip3 install -U modelscope
mkdir -p "$MODEL_DIR"
modelscope download --model Qwen/Qwen3-0.6B --local_dir "$MODEL_DIR"

检查权重完整性:

test -f "$MODEL_DIR/config.json" && echo "config ok"
find "$MODEL_DIR" -maxdepth 1 -name "*.safetensors" | head

如果模型权重不是 safetensors 格式,请按实际权重文件类型检查;至少需要确认 config.json 和模型权重文件都已存在。

4. BF16 基线评估

python3 -m amct_pytorch.eval \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --eval_mode bf16 \
  --bit_config amct_pytorch/configs/bf16.yaml

参考结果以本地实测为准:

Wikitext2-ppl=<ppl_bf16>

5. 提取 PTQ 数据

attn-linear 表示量化 Attention 线性层,mlp 表示量化 dense MLP。extract_ptq_data 一次只能处理一个 quant_target,因此需要分别提取两类目标的 PTQ 数据。

Attention 线性层:

python3 -m amct_pytorch.extract_ptq_data \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/attn-linear \
  --quant_target attn-linear

Dense MLP:

python3 -m amct_pytorch.extract_ptq_data \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/mlp \
  --quant_target mlp

检查数据:

find ptq_data/qwen3/attn-linear -maxdepth 1 -type f -name 'block_*_attn_in.pkl' | wc -l
find ptq_data/qwen3/mlp -maxdepth 1 -type f -name 'block_*_mlp_in.pkl' | wc -l

以上两条命令期望都输出 28。注意:attn-linear 的数据文件名使用内部 unit 名称,实际形如 block_*_attn_in.pkl,不是 block_*_attn-linear_in.pkl

6. PTQ 训练

PTQ 数据可以复用;W4A8 的 intmxfp 两种数据类型需要分别训练 PTQ 参数。以下命令使用 lwc lac 作为 PTQ 算法。

6.1 int

Attention 线性层:

python3 -m amct_pytorch.ptq \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/attn-linear \
  --quant_dtype int \
  --algos lwc lac \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --quant_target attn-linear \
  --output_dir ptq_result/int

Dense MLP:

python3 -m amct_pytorch.ptq \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/mlp \
  --quant_dtype int \
  --algos lwc lac \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --quant_target mlp \
  --output_dir ptq_result/int

默认参数目录:

ptq_result/int/ptq_params/qwen3/attn-linear
ptq_result/int/ptq_params/qwen3/mlp

检查 int 量化参数:

find ptq_result/int/ptq_params/qwen3 -maxdepth 3 -type f | head
du -sh ptq_result/int

6.2 mxfp

Attention 线性层:

python3 -m amct_pytorch.ptq \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/attn-linear \
  --quant_dtype mxfp \
  --algos lwc lac \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --quant_target attn-linear \
  --output_dir ptq_result/mxfp

Dense MLP:

python3 -m amct_pytorch.ptq \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --data_dir ptq_data/qwen3/mlp \
  --quant_dtype mxfp \
  --algos lwc lac \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --quant_target mlp \
  --output_dir ptq_result/mxfp

默认参数目录:

ptq_result/mxfp/ptq_params/qwen3/attn-linear
ptq_result/mxfp/ptq_params/qwen3/mlp

检查 mxfp 量化参数:

find ptq_result/mxfp/ptq_params/qwen3 -maxdepth 3 -type f | head
du -sh ptq_result/mxfp

上述命令使用 AMCT 默认 PTQ 训练超参。评估阶段的 --algos 必须与对应数据类型的 PTQ 训练阶段保持一致。

7. PTQ 后评估

同时加载 attention 和 MLP 的 PTQ 参数,分别验证 W4A8-int 和 W4A8-mxfp fake quant 精度。

int:

python3 -m amct_pytorch.eval \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --eval_mode quant \
  --quant_target attn-linear mlp \
  --quant_dtype int \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --algos lwc lac \
  --attn_linear_param_dir ptq_result/int/ptq_params/qwen3/attn-linear \
  --moe_mlp_param_dir ptq_result/int/ptq_params/qwen3/mlp

mxfp:

python3 -m amct_pytorch.eval \
  --model "$MODEL_DIR" \
  --model_name qwen3 \
  --seq_len 4096 \
  --granularity block \
  --device npu:0 \
  --eval_mode quant \
  --quant_target attn-linear mlp \
  --quant_dtype mxfp \
  --bit_config amct_pytorch/configs/w4a8.yaml \
  --algos lwc lac \
  --attn_linear_param_dir ptq_result/mxfp/ptq_params/qwen3/attn-linear \
  --moe_mlp_param_dir ptq_result/mxfp/ptq_params/qwen3/mlp

建议记录 BF16 PPL、W4A8-int PTQ PPL 和 W4A8-mxfp PTQ PPL:

delta_int = ppl_int - ppl_bf16
delta_mxfp = ppl_mxfp - ppl_bf16

结果记录模板:

模型数据类型量化格式BF16 PPL量化 PPLPPL 差值备注
Qwen3-0.6Bw4a8int4/int8<ppl_bf16><ppl_int><delta_int>-
Qwen3-0.6Bw4a8mxfp4/mxfp8<ppl_bf16><ppl_mxfp><delta_mxfp>-

本示例重点是通过 BF16 与两种 W4A8 fake quant 模型的 PPL 对比验证量化精度。替换其他 PTQ 算法时,需同步修改 PTQ 和评估命令中的 --algos 及参数目录。

8. 从示例整理为提交样例

跑通本文示例后,需要按社区任务要求整理为可提交样例。建议按以下顺序处理:

  1. examples/models/<model>/ 下新增任务样例目录。
  2. 将本文中的命令整理为脚本,例如 eval_bf16.shextract_ptq_data.shptq_attn.shptq_mlp.sheval_quant.sh
  3. 将任务对应的量化配置放到 configs/ 目录,intmxfp 两种格式分别保存。
  4. 在中文和英文 README 中写清运行说明、参数含义、PTQ 离线数据目录、量化参数目录、产物大小和结果表。
  5. 提交 PR 时,在 PR 描述中说明领取的任务编号、模型、数据类型、算法、BF16 PPL、量化 PPL 和 PPL 差值。

提交前建议检查:

# 将 qwen3-0.6b 替换为你的样例目录名
find examples/models/qwen3-0.6b -maxdepth 3 -type f | sort

模型权重、数据集和本地生成的 PTQ 数据不提交到仓库,只在 README 中说明准备方式和产物目录。

9. 常见问题

现象检查项
数据集下载失败尝试设置 HF_ENDPOINT=https://hf-mirror.com
Wikitext-2 load失败改用 load_dataset(“Salesforce/wikitext”, “wikitext-2-raw-v1”, split=“test”)
ArrowInvalid: Index not in dictionary boundspip3 install --user --force-reinstall “datasets3.6.0" "pyarrow18.1.0”
找不到 CANN 环境变量是否执行 source /home/developer/Ascend/cann/set_env.sh
torch_npu 导入失败Python、PyTorch、torch_npu、CANN 版本是否匹配
BF16 PPL 异常权重是否完整,--model_name 是否为 qwen3
运行过程中显存不足降低 --seq_len,并保证 BF16、PTQ 数据提取和量化评估的 seq_len 一致
PTQ 找不到数据--data_dir--quant_target 是否和数据提取阶段一致
量化评估未加载 PTQ 参数--attn_linear_param_dir--moe_mlp_param_dir 是否指向正确目录
PPL 差值无法比较BF16 和量化评估是否使用同一模型版本、同一数据集、同一 seq_len
替换 PTQ 算法后结果异常PTQ 训练和评估命令中的 --algos 是否完全一致

更多参数说明见 AMCT PyTorch LLM 量化工具使用说明

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐