AMCT

Ascend Model Compression Toolkit

昇腾 NPU 原生模型压缩工具包

License CANN PyTorch

快速开始 · 特性 · 样例 · FAQ · 贡献


🔥 最新动态

  • [2026/05/28] 新增当前主流 LLM 网络量化、PTQ 算法支持,并提供 DeepSeek-V4Qwen3.6-MoE 的一站式样例
  • [2026/04/24] 新增 DeepSeek-V4 模型 INT8 量化支持
  • [2026/04/17] 新增 HiFloat8 分位量化(Quantile)算法
  • [2026/03/02] 新增 HiFloat8 数据直转(Cast)算法
  • [2026/02/02] 新增 HiFloat8 / MXFP8 / MXFP4 数据量化
  • [2025/12/22] AMCT 项目首次上线 🎉

🚀 概述

AMCT 是昇腾 NPU 原生的模型量化压缩工具。量化后模型体积减小,在昇腾 NPU 上启用低比特运算,显著提升推理性能。部署架构如下:

AMCT 架构

亮点为:

  • 🎯 硬件亲和 —— 量化结果直接对接昇腾 NPU 低比特运算单元
  • 🔢 多精度全栈 —— INT8 / INT4 / MXFP8 / MXFP4 / HiFloat8 任选
  • 🚀 大模型就绪 —— 原生支持 DeepSeek-V3.2 / V4 等前沿模型

✨ 核心特性

特性类别 简介
PTQ 量化算法 Min-Max / AWQ / GPTQ / SmoothQuant 等训练后量化算法,详见 算法介绍
HiFloat8 量化 华为自研 8-bit 浮点格式,锥形精度 + 大动态范围,详见 HiFloat8 介绍
NPU 自定义算子 基于NPU的自研算子,Ascend C kernel 实现,详见 amct_ops
大模型量化 DeepSeek-V3.2 / V4 量化方案,详见 DeepSeek-V4

📊 性能收益

量化显著降低部署成本:

精度格式 仅权重(W) 全量化(W+A) 收益
INT8 ✅ Min-Max / AWQ / GPTQ ✅ Min-Max / SmoothQuant 体积 ↓50% · 吞吐 ↑
INT4 ✅ AWQ / GPTQ ✅ FlatQuant 体积 ↓75% · 低带宽友好
HiFloat8 ✅ Cast / Quantile / OFMR ✅ Cast / Quantile / OFMR 体积 ↓50% · 大动态范围
MXFP8 ✅ MXQuant ✅ MXQuant 体积 ↓50% · 高精度
MXFP4 ✅ MXQuant ✅ MXQuant 体积 ↓75% · 微缩浮点

📦 快速开始

环境要求

依赖 版本
Python >=3.9
PyTorch 2.7.1 或 2.1.0(需配套 torch_npu
GCC / CMake / patch ≥ 7.3 / ≥ 3.16(推荐 3.20) / ≥ 2.7
CANN(Toolkit & Ops) ≥ 8.5.0(需提前安装 NPU 驱动 / 固件)

完整环境部署请参见 快速安装

安装&验证

# 1. 拉取源码并安装依赖
git clone https://gitcode.com/cann/amct.git

# 2. 源码构建打包
cd amct
bash build.sh --torch

# 3. 安装(产物位于 build_out/)
#    ${version} 从 build_out/ 目录中的文件名获取,如 amct_pytorch-1.1.0-py3-none-linux_aarch64.tar.gz
#    ${arch}    为 CPU 架构,如 x86_64、aarch64
pip3 install build_out/amct_pytorch-${version}-py3-none-linux_${arch}.tar.gz --user

⚠️ 注意:若 pip 版本 > 25.2,安装命令需追加 --no-build-isolation,否则可能出现 ModuleNotFoundError: No module named 'torch'

# 验证 AMCT 安装
python3 -c "import amct_pytorch as amct; print(f'successfully installed AMCT ')"

更多构建选项与本地验证请参见 构建指南

🏃 一站式平台快速体验

「一站式平台」是为开发者提供的 NPU 环境,内部已集成完整的 CANN 环境,可以直接使用。AMCT 针对该平台在相应样例 README 中提供了简化的「快速启动」路径,帮助用户最小步骤完成 NPU 推理体验。当前支持的模型正在持续扩展中,敬请关注:

实践 简介
Qwen3.6-MoE 在 Atlas A3 环境中完成 Qwen3.6-MoE 模型的量化、数据提取以及 PTQ,针对一站式平台场景提供标准启动流程和相关配置,帮助用户快速上手完成一次端到端 NPU 推理体验。
DeepSeek-V4 在 Atlas A3 环境中完成 DeepSeek-V4 Flash 模型的单卡推理,针对一站式平台场景提供标准启动流程和相关配置,帮助用户快速上手完成一次端到端 NPU 推理体验。

📖 文档样例

主题 内容
压缩概念 量化、稀疏、蒸馏等基础概念
LLM量化 面向大语言模型(LLM)的量化特性
压缩特性 AMCT 支持的基础压缩特性
API 文档 接口使用说明
算法介绍 AWQ、GPTQ、SmoothQuant等算法原理

🔍 目录结构

amct/
├── amct_pytorch/                  # PyTorch 量化压缩核心源码
│   ├── algorithms/                 # 量化算法实现
│   ├── cli/                        # 命令行入口
│   ├── common/                     # 通用工具、模型和数据处理
│   ├── configs/                    # 量化配置模板
│   ├── experimental/               # 实验特性(HiFloat8、DeepSeek 等)
│   ├── quantization/               # 量化数据类型与基础模块
│   └── workflows/                  # LLM 量化、评估和部署流程
├── amct_ops/                      # AMCT 自定义 NPU 算子
├── examples/                      # 端到端样例与调用示例
├── tests/                         # 单元测试
├── docs/                          # 工具文档(概念、API、算法等)
├── cmake/                         # CMake 构建配置
├── build.sh                       # 工程编译脚本
├── setup.py                       # Python 包打包入口
└── requirements.txt               # Python 第三方依赖

❓ 常见问题

算法选择:何时使用 AWQ / GPTQ / SmoothQuant?
算法 适用场景 核心思路
AWQ 大模型 PTQ,追求低量化误差 感知激活的权重量化,保护 ~1% 显著权重
GPTQ 大模型 PTQ,强调逐层优化 基于海森矩阵的权重微调,最小化量化误差
SmoothQuant 激活分布困难场景 将激活量化难度迁移至权重,平滑激活异常值
Min-Max 入门场景,简单快速 直接取最大最小值计算量化因子

建议:大模型权重量化首选 AWQ 或 GPTQ;W8A8 全量化场景推荐 SmoothQuant;入门学习推荐 Min-Max。

量化后精度下降如何处理?

处理路径(按优先级):

  1. 调整校准数据量:增大 batch_num(推荐 batch_num × batch_size = 16 或 32)
  2. 回退敏感层:识别量化敏感层(首层、尾层、参数量少的层),在配置中设置 quant_enable: false
  3. 调整量化算法:分析模型数据分布特点,使用合适的量化算法
  4. 尝试量化感知训练(QAT):若 PTQ 无法满足精度,使用 QAT 重训练
安装时报 "ModuleNotFoundError: No module named 'torch'"?

原因:pip 版本 > 25.2,构建隔离导致 torch 未被识别。

解决方案

# 方案 1:降低 pip 版本
pip install pip==25.2

# 方案 2:添加 --no-build-isolation
pip3 install amct_pytorch_${version}-linux-${arch}.tar.gz --user --no-build-isolation

更多问题请查阅 压缩特性文档 或在 Issue 中提问。

💬 社区讨论

欢迎加入 AMCT 社区,参与讨论与交流:

平台 用途
GitCode Issue 问题反馈、功能建议、技术讨论
GitCode Discussions 经验分享、最佳实践、社区互动
SIG Discussions 技术决策、问题处理、项目落地

🤝 参与贡献

欢迎贡献代码、算法与文档,详见 贡献指南

  • 简单 bug 修复:直接提交 PR
  • 新特性 / 接口变更:先在 Issue 中讨论方案,达成共识后再提交 PR
  • 代码风格:C/C++ 遵循 Google 规范(基于 .clang-format),Python 遵循 PEP8;提交前启用 pre-commit

🙏 致谢

感谢所有为 AMCT 做出贡献的开发者!

本项目受启发于以下开源项目:

📝 许可证

本项目基于 Apache 2.0 协议开源。使用前请阅读 安全声明免责声明