AMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 支持 Qwen3.6-27B A4W4 MXFP4 Attn-Linear 和 MLP 量化实践 Co-authored-by: siiri0817<2862602548@qq.com> # message auto-generated for no-merge-commit merge: !241 merge feat/qwen3_6_27b_a4w4_mxfp4_casebook into master docs: 新增 Qwen3.6-27B A4W4 MXFP4 量化 CaseBook Created-by: sirillo Commit-by: siiri0817 Merged-by: cann-robot Description: ## 描述 本 PR 将 Qwen3.6-27B Dense 的 A4W4 MXFP4 量化实践整理到现有 Qwen3.5/3.6 CaseBook,并同步最小必要导航。 主要内容: 1. 在现有 .agents/docs/casebook/qwen/qwen3.5-3.6.md 中新增 Qwen3.6-27B Dense,复用 qwen3_5 adapter,记录 64 个 decoder block 的结构与适配信息; 2. 汇总 attn-linear / mlp 两类 A4W4 MXFP4 目标下 Direct、LWC、LAC、LWC+LAC、OmniQuant、AutoRound、FlatQuant 的复测 PPL; 3. 明确区分 PTQ calibration(PileVal,nsamples=16,seq_len=1024)与 PPL evaluation(WikiText2 test,seq_len=4096)。 本 PR 为纯文档变更,不包含模型代码、PPL 调试、评测 workflow 或临时兼容修复。 ## 如何测试 实验数据来自 Qwen3.6-27B A4W4 MXFP4 的PPL评测与既有 Deploy / clean reload 验证。本次未修改代码,因此未运行代码单元测试或重新执行大模型实验。 ## 文档更新 更新: - .agents/docs/casebook/README.md - .agents/docs/casebook/qwen/README.md - .agents/docs/casebook/qwen/qwen3.5-3.6.md ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!241 | 8 天前 | |
feat(agents): tracked symlink 自动加载,兼容 Windows 客户端 Co-authored-by: xieyajun<xieyajun1@huawei.com> # message auto-generated for no-merge-commit merge: !190 merge feat/agent-symlink-autoload into master feat(agents): tracked symlink 自动加载,兼容 Windows 客户端 Created-by: xieyajun Commit-by: xieyajun Merged-by: cann-robot Description: ## 描述 将 Agent 配置的分发机制从「手动执行脚本生成」改为「git-tracked 符号链接自动加载」,并配套 Windows 兼容修复与文档完善。 ### 一、结构改造(tracked symlink) - 新增 7 个 mode 120000 git-tracked symlink:.claude/{skills,agents,hooks,docs} 和 .opencode/{skills,agents,docs} 指向 .agents/ 对应路径,clone 后即可直接使用,无需手动执行安装脚本 - 删除 scripts/init-agent.sh(115 行),该脚本在 symlink 机制下完全冗余 - .gitignore 移除对 /.claude/、/.opencode/、/CLAUDE.md 的忽略规则(已改为 tracked) - AGENTS.md 新增「Agent Skills」段落,说明自动加载机制并修正 gitcode skill 引用路径 ### 二、配置文件迁移与 Windows 兼容 - .agents/settings.json → .claude/settings.json(R100,真实文件 100644) - .agents/opencode.json → .opencode/opencode.json(R100,真实文件 100644) - 配置文件改为真实文件后,Windows 下 core.symlinks=false 时客户端仍可正常启动 - settings.json 完整保留 45 项权限(含 amct-ops-dev、install-default-skills 等),与 master 一致 ### 三、文档完善 - .agents/README.md:重写标题与定位描述,补充内置技能清单;新增 Windows symlink 修复指引(3 种方式:管理员终端 / 开发者模式 / mklink /J) - .agents/docs/architecture.md:§3 单一源投影机制重写,移除 init-agent.sh 和 CLAUDE.md 引用 - .agents/docs/README.md:移除 roadmap.md 引用 - 删除 .agents/docs/roadmap.md(规划已过时,内容与 architecture.md 重复) ### 四、default-skills 增强 - SKILL.md:场景化拆分(补装缺失 / 强制更新两种场景) - install-default-skills.sh:新增 --force 参数,默认跳过已存在 skill ### 五、hooks 改进 - subagent_stop.py:新增 cleanup_stale_counters(),懒清理 /tmp 下超过 48 小时的计数文件 ## 如何测试 1. Linux/macOS(symlink 正常):git clone 后直接进入项目目录,Claude Code / OpenCode 自动加载所有 skills 2. Windows: - OpenCode 无需额外操作,原生扫描 .agents/skills/ - Claude Code 需管理员终端执行 git config core.symlinks true && git checkout HEAD -- .claude 后自动加载 3. 验证 settings.json 权限完整性:确认 amct-ops-dev、install-default-skills、planning-with-files、skill-creator 均在 allow 列表中 4. 确认 scripts/init-agent.sh 已删除,CLAUDE.md 不存在 ## 文档更新 - .agents/README.md:全面重写,新增内置技能清单与 Windows 修复指引 - .agents/docs/architecture.md:§3 投影机制描述更新 - .agents/docs/README.md:移除 roadmap 引用 - .agents/docs/roadmap.md:已删除 - AGENTS.md:新增 Agent Skills 段落,修正 gitcode skill 路径 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!190 | 1 个月前 | |
fix: amct action切换CCE Co-authored-by: tanghaoran7<tanghaoran7@huawei.com> # message auto-generated for no-merge-commit merge: !257 merge master into master fix: amct action切换CCE Created-by: tanghaoran7 Commit-by: tanghaoran7 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!257 | 15 天前 | |
feat(agents): tracked symlink 自动加载,兼容 Windows 客户端 Co-authored-by: xieyajun<xieyajun1@huawei.com> # message auto-generated for no-merge-commit merge: !190 merge feat/agent-symlink-autoload into master feat(agents): tracked symlink 自动加载,兼容 Windows 客户端 Created-by: xieyajun Commit-by: xieyajun Merged-by: cann-robot Description: ## 描述 将 Agent 配置的分发机制从「手动执行脚本生成」改为「git-tracked 符号链接自动加载」,并配套 Windows 兼容修复与文档完善。 ### 一、结构改造(tracked symlink) - 新增 7 个 mode 120000 git-tracked symlink:.claude/{skills,agents,hooks,docs} 和 .opencode/{skills,agents,docs} 指向 .agents/ 对应路径,clone 后即可直接使用,无需手动执行安装脚本 - 删除 scripts/init-agent.sh(115 行),该脚本在 symlink 机制下完全冗余 - .gitignore 移除对 /.claude/、/.opencode/、/CLAUDE.md 的忽略规则(已改为 tracked) - AGENTS.md 新增「Agent Skills」段落,说明自动加载机制并修正 gitcode skill 引用路径 ### 二、配置文件迁移与 Windows 兼容 - .agents/settings.json → .claude/settings.json(R100,真实文件 100644) - .agents/opencode.json → .opencode/opencode.json(R100,真实文件 100644) - 配置文件改为真实文件后,Windows 下 core.symlinks=false 时客户端仍可正常启动 - settings.json 完整保留 45 项权限(含 amct-ops-dev、install-default-skills 等),与 master 一致 ### 三、文档完善 - .agents/README.md:重写标题与定位描述,补充内置技能清单;新增 Windows symlink 修复指引(3 种方式:管理员终端 / 开发者模式 / mklink /J) - .agents/docs/architecture.md:§3 单一源投影机制重写,移除 init-agent.sh 和 CLAUDE.md 引用 - .agents/docs/README.md:移除 roadmap.md 引用 - 删除 .agents/docs/roadmap.md(规划已过时,内容与 architecture.md 重复) ### 四、default-skills 增强 - SKILL.md:场景化拆分(补装缺失 / 强制更新两种场景) - install-default-skills.sh:新增 --force 参数,默认跳过已存在 skill ### 五、hooks 改进 - subagent_stop.py:新增 cleanup_stale_counters(),懒清理 /tmp 下超过 48 小时的计数文件 ## 如何测试 1. Linux/macOS(symlink 正常):git clone 后直接进入项目目录,Claude Code / OpenCode 自动加载所有 skills 2. Windows: - OpenCode 无需额外操作,原生扫描 .agents/skills/ - Claude Code 需管理员终端执行 git config core.symlinks true && git checkout HEAD -- .claude 后自动加载 3. 验证 settings.json 权限完整性:确认 amct-ops-dev、install-default-skills、planning-with-files、skill-creator 均在 allow 列表中 4. 确认 scripts/init-agent.sh 已删除,CLAUDE.md 不存在 ## 文档更新 - .agents/README.md:全面重写,新增内置技能清单与 Windows 修复指引 - .agents/docs/architecture.md:§3 投影机制描述更新 - .agents/docs/README.md:移除 roadmap 引用 - .agents/docs/roadmap.md:已删除 - AGENTS.md:新增 Agent Skills 段落,修正 gitcode skill 路径 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!190 | 1 个月前 | |
fix: 用命名变量替换 HiFloat4 cast 中的字面常量 Co-authored-by: 尹航<yinhang128@gmail.com> # message auto-generated for no-merge-commit merge: !274 merge chore--修复变量名错误引用导致的告警 into master fix: 用命名变量替换 HiFloat4 cast 中的字面常量 Created-by: yinhang-jpg Commit-by: 尹航 Merged-by: cann-robot Description: ## Description 修复误用数字常量导致的告警 ## Type Label <!-- [x] indicates selected --> - [ ] Bug fix - [ ] New feature - [ ] Performance optimization - [ ] Documentation update - [x] Code refactoring - [ ] Other, please describe: See merge request: cann/amct!274 | 8 天前 | |
fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Co-authored-by: SwaggyAlex<zhangyi601@huawei.com> # message auto-generated for no-merge-commit merge: !266 merge master into master fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Created-by: SwaggyAlex Commit-by: SwaggyAlex Merged-by: cann-robot Description: ## 描述 ### 1. trust_remote_code 参数调整 新增统一的 --trust_remote_code 命令行开关,使用 argparse 的 action="store_true": - 默认值为 False,未传入该开关时不信任且不执行模型仓中的自定义代码。 - 在命令中传入 --trust_remote_code 后,该参数值为 True。 - 该开关不接收额外参数,因此 --trust_remote_code True、--trust_remote_code False 等写法会被 argparse 拒绝。 BaseModel 将该参数统一传递给 HuggingFace 的配置、分词器和模型加载接口,包括: - AutoConfig.from_pretrained - AutoTokenizer.from_pretrained - AutoModelForCausalLM.from_pretrained - AutoModelForCausalLM.from_config 当普通模型未传入 --trust_remote_code 时,程序仅记录 Warning,说明部分模型可能需要该参数才能加载自定义模型代码,不会阻止模型继续运行。 对于依赖仓内本地自定义模型代码的 DeepSeek V3.2 和 DeepSeek V4,在模型初始化阶段进行强制校验。如果未传入 --trust_remote_code,直接抛出 ValueError,提示当前模型需要通过该开关允许加载自定义代码,避免模型进入后续流程后再因配置或模型类型不匹配而失败。 ### 2. safetensors 权重路径校验调整 新增统一的 safetensors 文件收集与白名单校验逻辑。 #### 文件白名单收集 初始化权重加载流程时,扫描模型目录,收集满足以下条件的文件: - 文件必须位于模型目录的直接子层级,不递归收集子目录中的文件。 - 文件必须是普通文件,不接受目录。 - 不跟随符号链接,避免通过软链接访问模型目录外的文件。 - 文件后缀必须严格为 .safetensors。 收集结果以 frozenset 保存,并通过 safetensors_files 字段进行懒加载缓存,供同一模型加载过程重复使用。如果模型路径不是目录,或者目录下不存在符合要求的 .safetensors 文件,立即报错。 #### 权重路径解析 resolve_safetensors_path 接收模型路径、待加载文件名和已收集的文件白名单,并执行以下校验: - 文件名必须是非空字符串。 - 文件名不得包含 NUL 字符。 - 权重文件后缀必须为 .safetensors。 - 相对路径以模型目录为基准解析;绝对路径直接解析。 - 解析后的真实路径必须存在于预先收集的模型目录文件白名单中。 因此,即使传入的文件名包含 ../、绝对路径或其他路径跳转形式,只要最终文件不在模型目录白名单中,就会被拒绝。合法的绝对路径和相对路径在解析后指向白名单内的同一个权重文件时均可正常加载。 #### 权重索引校验 对于 model.safetensors.index.json 中的 weight_map,新增统一校验: - weight_map 必须为字典。 - 权重名称必须是非空字符串。 - 每个权重分片路径都必须通过 .safetensors 后缀和文件白名单校验。 该校验逻辑已接入通用模型权重加载、DeepSeek V4 分片加载以及 deploy 导出流程,防止从模型目录之外读取未授权文件。 ## 如何测试 已安装本项目所需依赖的环境下,在仓库根目录执行: bash python -m pytest tests/unit_test/cli/test_llm_args.py python -m pytest tests/unit_test/common/models/llm/common/test_weight_path_validation.py python -m pytest tests/unit_test/common/models/llm/common/test_base.py python -m pytest tests/unit_test/common/models/llm/deepseek/test_deepseek_v4.py python -m pytest tests/unit_test/quantization/test_dtypes.py ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!266 | 8 天前 | |
升级cann-cmake至master-049,适配gcc-15/gcc-16 Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !263 merge master into master 升级cann-cmake至master-049,适配gcc-15/gcc-16 Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 升级cann-cmake至master-049,获取abseil-cpp GCC 15/16 兼容补丁,配合gcc-15/gcc-16 适配需求 ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> CC=gcc-15 CXX=g++-15 bash build.sh --torch编译通过 CC=gcc-16 CXX=g++-16 bash build.sh --torch编译通过 bash build.sh -u UT验证,gcc-15与gcc-13结果一致 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了SECURITY.md和SECURITY_en.md ## 类型标签 <!-- [x] 表示选中 --> - [x] 其他,请描述:构建过程或辅助工具的变动 See merge request: cann/amct!263 | 8 天前 | |
[wip]fix docs | 7 天前 | |
fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Co-authored-by: SwaggyAlex<zhangyi601@huawei.com> # message auto-generated for no-merge-commit merge: !266 merge master into master fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Created-by: SwaggyAlex Commit-by: SwaggyAlex Merged-by: cann-robot Description: ## 描述 ### 1. trust_remote_code 参数调整 新增统一的 --trust_remote_code 命令行开关,使用 argparse 的 action="store_true": - 默认值为 False,未传入该开关时不信任且不执行模型仓中的自定义代码。 - 在命令中传入 --trust_remote_code 后,该参数值为 True。 - 该开关不接收额外参数,因此 --trust_remote_code True、--trust_remote_code False 等写法会被 argparse 拒绝。 BaseModel 将该参数统一传递给 HuggingFace 的配置、分词器和模型加载接口,包括: - AutoConfig.from_pretrained - AutoTokenizer.from_pretrained - AutoModelForCausalLM.from_pretrained - AutoModelForCausalLM.from_config 当普通模型未传入 --trust_remote_code 时,程序仅记录 Warning,说明部分模型可能需要该参数才能加载自定义模型代码,不会阻止模型继续运行。 对于依赖仓内本地自定义模型代码的 DeepSeek V3.2 和 DeepSeek V4,在模型初始化阶段进行强制校验。如果未传入 --trust_remote_code,直接抛出 ValueError,提示当前模型需要通过该开关允许加载自定义代码,避免模型进入后续流程后再因配置或模型类型不匹配而失败。 ### 2. safetensors 权重路径校验调整 新增统一的 safetensors 文件收集与白名单校验逻辑。 #### 文件白名单收集 初始化权重加载流程时,扫描模型目录,收集满足以下条件的文件: - 文件必须位于模型目录的直接子层级,不递归收集子目录中的文件。 - 文件必须是普通文件,不接受目录。 - 不跟随符号链接,避免通过软链接访问模型目录外的文件。 - 文件后缀必须严格为 .safetensors。 收集结果以 frozenset 保存,并通过 safetensors_files 字段进行懒加载缓存,供同一模型加载过程重复使用。如果模型路径不是目录,或者目录下不存在符合要求的 .safetensors 文件,立即报错。 #### 权重路径解析 resolve_safetensors_path 接收模型路径、待加载文件名和已收集的文件白名单,并执行以下校验: - 文件名必须是非空字符串。 - 文件名不得包含 NUL 字符。 - 权重文件后缀必须为 .safetensors。 - 相对路径以模型目录为基准解析;绝对路径直接解析。 - 解析后的真实路径必须存在于预先收集的模型目录文件白名单中。 因此,即使传入的文件名包含 ../、绝对路径或其他路径跳转形式,只要最终文件不在模型目录白名单中,就会被拒绝。合法的绝对路径和相对路径在解析后指向白名单内的同一个权重文件时均可正常加载。 #### 权重索引校验 对于 model.safetensors.index.json 中的 weight_map,新增统一校验: - weight_map 必须为字典。 - 权重名称必须是非空字符串。 - 每个权重分片路径都必须通过 .safetensors 后缀和文件白名单校验。 该校验逻辑已接入通用模型权重加载、DeepSeek V4 分片加载以及 deploy 导出流程,防止从模型目录之外读取未授权文件。 ## 如何测试 已安装本项目所需依赖的环境下,在仓库根目录执行: bash python -m pytest tests/unit_test/cli/test_llm_args.py python -m pytest tests/unit_test/common/models/llm/common/test_weight_path_validation.py python -m pytest tests/unit_test/common/models/llm/common/test_base.py python -m pytest tests/unit_test/common/models/llm/deepseek/test_deepseek_v4.py python -m pytest tests/unit_test/quantization/test_dtypes.py ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!266 | 8 天前 | |
更新.pre-commit-config.yaml,统一repo和rev Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !251 merge master into master 更新.pre-commit-config.yaml,统一repo和rev Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新.pre-commit-config.yaml,统一repo和rev ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新.pre-commit-config.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [√] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!251 | 19 天前 | |
fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Co-authored-by: SwaggyAlex<zhangyi601@huawei.com> # message auto-generated for no-merge-commit merge: !266 merge master into master fix:修复trust remote code默认为True的安全性问题 以及去除PureWindowsPath带来的判断错误bug Created-by: SwaggyAlex Commit-by: SwaggyAlex Merged-by: cann-robot Description: ## 描述 ### 1. trust_remote_code 参数调整 新增统一的 --trust_remote_code 命令行开关,使用 argparse 的 action="store_true": - 默认值为 False,未传入该开关时不信任且不执行模型仓中的自定义代码。 - 在命令中传入 --trust_remote_code 后,该参数值为 True。 - 该开关不接收额外参数,因此 --trust_remote_code True、--trust_remote_code False 等写法会被 argparse 拒绝。 BaseModel 将该参数统一传递给 HuggingFace 的配置、分词器和模型加载接口,包括: - AutoConfig.from_pretrained - AutoTokenizer.from_pretrained - AutoModelForCausalLM.from_pretrained - AutoModelForCausalLM.from_config 当普通模型未传入 --trust_remote_code 时,程序仅记录 Warning,说明部分模型可能需要该参数才能加载自定义模型代码,不会阻止模型继续运行。 对于依赖仓内本地自定义模型代码的 DeepSeek V3.2 和 DeepSeek V4,在模型初始化阶段进行强制校验。如果未传入 --trust_remote_code,直接抛出 ValueError,提示当前模型需要通过该开关允许加载自定义代码,避免模型进入后续流程后再因配置或模型类型不匹配而失败。 ### 2. safetensors 权重路径校验调整 新增统一的 safetensors 文件收集与白名单校验逻辑。 #### 文件白名单收集 初始化权重加载流程时,扫描模型目录,收集满足以下条件的文件: - 文件必须位于模型目录的直接子层级,不递归收集子目录中的文件。 - 文件必须是普通文件,不接受目录。 - 不跟随符号链接,避免通过软链接访问模型目录外的文件。 - 文件后缀必须严格为 .safetensors。 收集结果以 frozenset 保存,并通过 safetensors_files 字段进行懒加载缓存,供同一模型加载过程重复使用。如果模型路径不是目录,或者目录下不存在符合要求的 .safetensors 文件,立即报错。 #### 权重路径解析 resolve_safetensors_path 接收模型路径、待加载文件名和已收集的文件白名单,并执行以下校验: - 文件名必须是非空字符串。 - 文件名不得包含 NUL 字符。 - 权重文件后缀必须为 .safetensors。 - 相对路径以模型目录为基准解析;绝对路径直接解析。 - 解析后的真实路径必须存在于预先收集的模型目录文件白名单中。 因此,即使传入的文件名包含 ../、绝对路径或其他路径跳转形式,只要最终文件不在模型目录白名单中,就会被拒绝。合法的绝对路径和相对路径在解析后指向白名单内的同一个权重文件时均可正常加载。 #### 权重索引校验 对于 model.safetensors.index.json 中的 weight_map,新增统一校验: - weight_map 必须为字典。 - 权重名称必须是非空字符串。 - 每个权重分片路径都必须通过 .safetensors 后缀和文件白名单校验。 该校验逻辑已接入通用模型权重加载、DeepSeek V4 分片加载以及 deploy 导出流程,防止从模型目录之外读取未授权文件。 ## 如何测试 已安装本项目所需依赖的环境下,在仓库根目录执行: bash python -m pytest tests/unit_test/cli/test_llm_args.py python -m pytest tests/unit_test/common/models/llm/common/test_weight_path_validation.py python -m pytest tests/unit_test/common/models/llm/common/test_base.py python -m pytest tests/unit_test/common/models/llm/deepseek/test_deepseek_v4.py python -m pytest tests/unit_test/quantization/test_dtypes.py ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!266 | 8 天前 | |
新增文件 .clang-format,保证格式规范统一 Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !61 merge amct_open-patch-2 into master 新增文件 .clang-format,保证格式规范统一 Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 新增文件 .clang-format,保证C++代码格式规范统一 ## 如何测试 自动规范提交代码格式 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!61 | 5 个月前 | |
[Feature] Added structured pruning (amct_pytorch.pruning) Co-authored-by: leedongkun30-arch<lee.dongkun30@gmail.com> # message auto-generated for no-merge-commit merge: !140 merge feat/pruning into master [Feature] Added structured pruning (amct_pytorch.pruning) Created-by: leedongkun30-arch Commit-by: leedongkun30-arch Merged-by: cann-robot Description: ## 描述 新增 eager 模式**结构化剪枝**子系统 amct_pytorch.pruning,接口风格与 amct.quantize 对齐:对已实例化并加载权重的 torch.nn.Module 原地剪枝。覆盖三个目标域——**dense FFN 中间维 / CNN 通道 / MoE 专家**,仅剪枝“生产者↔消费者接口可验证”的维度,其余保守跳过(注意力投影、残差宽度等自动排除)。 改动为**增量式**:仅在 amct_pytorch/__init__.py 中以 PEP 562 惰性方式暴露剪枝入口,不修改既有量化代码;与 classic/graph_based 剪枝器共存,并复用其精度抽象 AutoCalibrationEvaluatorBase,使 prune→quantize 在同一预算下串联。 公开接口(__all__,与量化 1:1 对齐): - amct.prune(model, config=None, *, data, tolerance, evaluator, size_budget, finetune_fn, report) —— 原地剪枝,返回 None;可选传入 report=PruneReport() 就地收集统计(不保留任何进程级状态)。 - amct.accuracy_based_auto_prune(...) —— 按可接受精度损失自动搜索并应用满足容差的最大剪枝率,返回 AutoTuneResult,对应量化侧 accuracy_based_auto_calibration。 - 预定义配置 *_PRUNE_CFG:CNN_RECONSTRUCT / CNN_VARIANCE / DENSE_LOWVAR / FULL_STRUCTURED / MOE_MASSVAR / MOE_OUTPUT_MERGE / SENSITIVITY_ALLOC。 size_budget_prune / prune_finetune / prune_diagnose 及菜单配置为高级接口,可从 amct_pytorch.pruning 导入,不进入 __all__。剪枝与量化为正交压缩维度:先 prune 改变形状,再 amct.quantize / amct.convert。 ### 实测参考 在 16 个从零训练模型(CNN@MNIST / Dense-LM·MoE-LM@WikiText)与真实预训练 HF 模型上测得,供评审参考: - **CNN 输出保持重建**:训练后 MNIST CNN @0.3,naive variance_channel 0.343 vs reconstruct 0.574(参数量相同)。 - **Dense-LM 1% 预算空间**:无 finetune ≈0%;单遍 finetune(lr 1e-5 + warmup)后中位 27%(最高 61%)。真实 MoE(granite-1b-a400m)同样需要 finetune(≈0% → 17%)。 - **MoE 专家判据依赖路由深度**:全局 variance 劣于 mass,仅深层用 variance(boundary=K)在多专家路由上胜过 mass(OLMoE held-ppl 46.9→35.3);小专家路由(granite,32 专家)下菜单守卫正确回退到 mass。 - **敏感度分配依赖深度**:浅层网络(<10 层)6/6 胜,深层(≥10 层)4/19;guard='calib_nll' 在更差时回退均匀分配。 - **prune→int8 串联**:经恢复菜单剪枝的 SmolLM-135M 走完整 prune→int8→convert 流水线,ppl 1.649 → 剪枝后 1.699 → 叠加 int8 1.704。 ## 如何测试 本地运行单元测试: python -m pytest tests/amct_pytorch/test_pruning_*.py 覆盖核心剪枝、容差自动搜索、跨层敏感度分配、尺寸预算模式、MoE 输出合并、prune→quantize 串联,以及真实 HF 模型(Mixtral / Qwen3Moe / GraniteMoe / DeepseekV3 / Ernie4_5_Moe 等),全部通过。 ## 文档更新 - 新增 docs/zh/api/:prune.md、accuracy_based_auto_prune.md、size_budget_prune.md、prune_finetune.md、prune_diagnose.md、pruning_configs.md,并在 docs/zh/api/README.md 索引中登记。 - 新增示例 examples/algorithms/pruning/(dense / CNN / MoE)。 - amct_pytorch/pruning/README.md / README_en.md 增补“工作原理”走查(打分 → 剪枝 → 恢复 →(可选)量化),并配 5 张流程图(总流程、三个可剪枝的域、容差二分搜索、菜单择优、prune→quantize 串联),图片位于 amct_pytorch/pruning/figures/。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!140 | 20 天前 | |
更新.pre-commit-config.yaml,统一repo和rev Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !251 merge master into master 更新.pre-commit-config.yaml,统一repo和rev Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新.pre-commit-config.yaml,统一repo和rev ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新.pre-commit-config.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [√] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!251 | 19 天前 | |
更新.pre-commit-config.yaml,统一repo和rev Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !251 merge master into master 更新.pre-commit-config.yaml,统一repo和rev Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新.pre-commit-config.yaml,统一repo和rev ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新.pre-commit-config.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [√] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!251 | 19 天前 | |
[Feature] Added structured pruning (amct_pytorch.pruning) Co-authored-by: leedongkun30-arch<lee.dongkun30@gmail.com> # message auto-generated for no-merge-commit merge: !140 merge feat/pruning into master [Feature] Added structured pruning (amct_pytorch.pruning) Created-by: leedongkun30-arch Commit-by: leedongkun30-arch Merged-by: cann-robot Description: ## 描述 新增 eager 模式**结构化剪枝**子系统 amct_pytorch.pruning,接口风格与 amct.quantize 对齐:对已实例化并加载权重的 torch.nn.Module 原地剪枝。覆盖三个目标域——**dense FFN 中间维 / CNN 通道 / MoE 专家**,仅剪枝“生产者↔消费者接口可验证”的维度,其余保守跳过(注意力投影、残差宽度等自动排除)。 改动为**增量式**:仅在 amct_pytorch/__init__.py 中以 PEP 562 惰性方式暴露剪枝入口,不修改既有量化代码;与 classic/graph_based 剪枝器共存,并复用其精度抽象 AutoCalibrationEvaluatorBase,使 prune→quantize 在同一预算下串联。 公开接口(__all__,与量化 1:1 对齐): - amct.prune(model, config=None, *, data, tolerance, evaluator, size_budget, finetune_fn, report) —— 原地剪枝,返回 None;可选传入 report=PruneReport() 就地收集统计(不保留任何进程级状态)。 - amct.accuracy_based_auto_prune(...) —— 按可接受精度损失自动搜索并应用满足容差的最大剪枝率,返回 AutoTuneResult,对应量化侧 accuracy_based_auto_calibration。 - 预定义配置 *_PRUNE_CFG:CNN_RECONSTRUCT / CNN_VARIANCE / DENSE_LOWVAR / FULL_STRUCTURED / MOE_MASSVAR / MOE_OUTPUT_MERGE / SENSITIVITY_ALLOC。 size_budget_prune / prune_finetune / prune_diagnose 及菜单配置为高级接口,可从 amct_pytorch.pruning 导入,不进入 __all__。剪枝与量化为正交压缩维度:先 prune 改变形状,再 amct.quantize / amct.convert。 ### 实测参考 在 16 个从零训练模型(CNN@MNIST / Dense-LM·MoE-LM@WikiText)与真实预训练 HF 模型上测得,供评审参考: - **CNN 输出保持重建**:训练后 MNIST CNN @0.3,naive variance_channel 0.343 vs reconstruct 0.574(参数量相同)。 - **Dense-LM 1% 预算空间**:无 finetune ≈0%;单遍 finetune(lr 1e-5 + warmup)后中位 27%(最高 61%)。真实 MoE(granite-1b-a400m)同样需要 finetune(≈0% → 17%)。 - **MoE 专家判据依赖路由深度**:全局 variance 劣于 mass,仅深层用 variance(boundary=K)在多专家路由上胜过 mass(OLMoE held-ppl 46.9→35.3);小专家路由(granite,32 专家)下菜单守卫正确回退到 mass。 - **敏感度分配依赖深度**:浅层网络(<10 层)6/6 胜,深层(≥10 层)4/19;guard='calib_nll' 在更差时回退均匀分配。 - **prune→int8 串联**:经恢复菜单剪枝的 SmolLM-135M 走完整 prune→int8→convert 流水线,ppl 1.649 → 剪枝后 1.699 → 叠加 int8 1.704。 ## 如何测试 本地运行单元测试: python -m pytest tests/amct_pytorch/test_pruning_*.py 覆盖核心剪枝、容差自动搜索、跨层敏感度分配、尺寸预算模式、MoE 输出合并、prune→quantize 串联,以及真实 HF 模型(Mixtral / Qwen3Moe / GraniteMoe / DeepseekV3 / Ernie4_5_Moe 等),全部通过。 ## 文档更新 - 新增 docs/zh/api/:prune.md、accuracy_based_auto_prune.md、size_budget_prune.md、prune_finetune.md、prune_diagnose.md、pruning_configs.md,并在 docs/zh/api/README.md 索引中登记。 - 新增示例 examples/algorithms/pruning/(dense / CNN / MoE)。 - amct_pytorch/pruning/README.md / README_en.md 增补“工作原理”走查(打分 → 剪枝 → 恢复 →(可选)量化),并配 5 张流程图(总流程、三个可剪枝的域、容差二分搜索、菜单择优、prune→quantize 串联),图片位于 amct_pytorch/pruning/figures/。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!140 | 20 天前 | |
build: use cann third party protobuf Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !124 merge fix/use-add-cann-third-party into master build: use cann third party protobuf Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: 关联 Issue:#121 ## 描述 将本仓 protobuf 三方依赖迁移到 cann-cmake 统一入口: - 使用 add_cann_third_party(protobuf) 替换本地 cmake/third_party/protobuf.cmake。 - 开启 ENABLE_OPEN_SRC,确保统一 protobuf 脚本创建 host_protoc、ascend_protobuf_static 等目标。 - 将 proto 编译路径从旧的 build/protobuf_host/bin/protoc 切换为 $<TARGET_FILE:host_protoc>。 - 删除迁移后不再需要的本地 protobuf 脚本和 patch 文件。 ## 如何测试 - git diff --check - cmake -S . -B build_add_cann_third_party_default_check -DENABLE_TEST=OFF - cmake -S . -B build_add_cann_third_party_test_check -DENABLE_TEST=ON 说明:ENABLE_TEST=ON 配置过程中当前环境会打印已有的 torch_npu 后端符号错误 traceback,但 CMake 退出码为 0 并完成配置生成。 ## 文档更新 不涉及文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [x] 其他,请描述:构建依赖迁移 See merge request: cann/amct!124 | 3 个月前 | |
update CONRIBUTING.md for coding-standards Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !21 merge docs into master update CONRIBUTING.md for coding-standards Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 更新CONRIBUTING.md中关于特性代码风格及代码规范的说明链接 ## 如何测试 走读CONRIBUTING.md文档,描述无误 ## 文档更新 更新了CONRIBUTING.md文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!21 | 6 个月前 | |
docs: add English translation for all markdown documentation files Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !143 merge master into master docs: add English translation for all markdown documentation files Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: ## 描述 更新英文非产品文档资料 ## 如何测试 根据最新的中文md资料进行测试 ## 文档更新 非docs目录下的所有xx_en.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!143 | 2 个月前 | |
Initial commit | 8 个月前 | |
docs: add English translation for all markdown documentation files Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !143 merge master into master docs: add English translation for all markdown documentation files Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: ## 描述 更新英文非产品文档资料 ## 如何测试 根据最新的中文md资料进行测试 ## 文档更新 非docs目录下的所有xx_en.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!143 | 2 个月前 | |
Initial commit | 8 个月前 | |
更新.pre-commit-config.yaml,统一repo和rev Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !251 merge master into master 更新.pre-commit-config.yaml,统一repo和rev Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新.pre-commit-config.yaml,统一repo和rev ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新.pre-commit-config.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [√] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!251 | 19 天前 | |
[Feature] Added structured pruning (amct_pytorch.pruning) Co-authored-by: leedongkun30-arch<lee.dongkun30@gmail.com> # message auto-generated for no-merge-commit merge: !140 merge feat/pruning into master [Feature] Added structured pruning (amct_pytorch.pruning) Created-by: leedongkun30-arch Commit-by: leedongkun30-arch Merged-by: cann-robot Description: ## 描述 新增 eager 模式**结构化剪枝**子系统 amct_pytorch.pruning,接口风格与 amct.quantize 对齐:对已实例化并加载权重的 torch.nn.Module 原地剪枝。覆盖三个目标域——**dense FFN 中间维 / CNN 通道 / MoE 专家**,仅剪枝“生产者↔消费者接口可验证”的维度,其余保守跳过(注意力投影、残差宽度等自动排除)。 改动为**增量式**:仅在 amct_pytorch/__init__.py 中以 PEP 562 惰性方式暴露剪枝入口,不修改既有量化代码;与 classic/graph_based 剪枝器共存,并复用其精度抽象 AutoCalibrationEvaluatorBase,使 prune→quantize 在同一预算下串联。 公开接口(__all__,与量化 1:1 对齐): - amct.prune(model, config=None, *, data, tolerance, evaluator, size_budget, finetune_fn, report) —— 原地剪枝,返回 None;可选传入 report=PruneReport() 就地收集统计(不保留任何进程级状态)。 - amct.accuracy_based_auto_prune(...) —— 按可接受精度损失自动搜索并应用满足容差的最大剪枝率,返回 AutoTuneResult,对应量化侧 accuracy_based_auto_calibration。 - 预定义配置 *_PRUNE_CFG:CNN_RECONSTRUCT / CNN_VARIANCE / DENSE_LOWVAR / FULL_STRUCTURED / MOE_MASSVAR / MOE_OUTPUT_MERGE / SENSITIVITY_ALLOC。 size_budget_prune / prune_finetune / prune_diagnose 及菜单配置为高级接口,可从 amct_pytorch.pruning 导入,不进入 __all__。剪枝与量化为正交压缩维度:先 prune 改变形状,再 amct.quantize / amct.convert。 ### 实测参考 在 16 个从零训练模型(CNN@MNIST / Dense-LM·MoE-LM@WikiText)与真实预训练 HF 模型上测得,供评审参考: - **CNN 输出保持重建**:训练后 MNIST CNN @0.3,naive variance_channel 0.343 vs reconstruct 0.574(参数量相同)。 - **Dense-LM 1% 预算空间**:无 finetune ≈0%;单遍 finetune(lr 1e-5 + warmup)后中位 27%(最高 61%)。真实 MoE(granite-1b-a400m)同样需要 finetune(≈0% → 17%)。 - **MoE 专家判据依赖路由深度**:全局 variance 劣于 mass,仅深层用 variance(boundary=K)在多专家路由上胜过 mass(OLMoE held-ppl 46.9→35.3);小专家路由(granite,32 专家)下菜单守卫正确回退到 mass。 - **敏感度分配依赖深度**:浅层网络(<10 层)6/6 胜,深层(≥10 层)4/19;guard='calib_nll' 在更差时回退均匀分配。 - **prune→int8 串联**:经恢复菜单剪枝的 SmolLM-135M 走完整 prune→int8→convert 流水线,ppl 1.649 → 剪枝后 1.699 → 叠加 int8 1.704。 ## 如何测试 本地运行单元测试: python -m pytest tests/amct_pytorch/test_pruning_*.py 覆盖核心剪枝、容差自动搜索、跨层敏感度分配、尺寸预算模式、MoE 输出合并、prune→quantize 串联,以及真实 HF 模型(Mixtral / Qwen3Moe / GraniteMoe / DeepseekV3 / Ernie4_5_Moe 等),全部通过。 ## 文档更新 - 新增 docs/zh/api/:prune.md、accuracy_based_auto_prune.md、size_budget_prune.md、prune_finetune.md、prune_diagnose.md、pruning_configs.md,并在 docs/zh/api/README.md 索引中登记。 - 新增示例 examples/algorithms/pruning/(dense / CNN / MoE)。 - amct_pytorch/pruning/README.md / README_en.md 增补“工作原理”走查(打分 → 剪枝 → 恢复 →(可选)量化),并配 5 张流程图(总流程、三个可剪枝的域、容差二分搜索、菜单择优、prune→quantize 串联),图片位于 amct_pytorch/pruning/figures/。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!140 | 20 天前 | |
[Feature] Added structured pruning (amct_pytorch.pruning) Co-authored-by: leedongkun30-arch<lee.dongkun30@gmail.com> # message auto-generated for no-merge-commit merge: !140 merge feat/pruning into master [Feature] Added structured pruning (amct_pytorch.pruning) Created-by: leedongkun30-arch Commit-by: leedongkun30-arch Merged-by: cann-robot Description: ## 描述 新增 eager 模式**结构化剪枝**子系统 amct_pytorch.pruning,接口风格与 amct.quantize 对齐:对已实例化并加载权重的 torch.nn.Module 原地剪枝。覆盖三个目标域——**dense FFN 中间维 / CNN 通道 / MoE 专家**,仅剪枝“生产者↔消费者接口可验证”的维度,其余保守跳过(注意力投影、残差宽度等自动排除)。 改动为**增量式**:仅在 amct_pytorch/__init__.py 中以 PEP 562 惰性方式暴露剪枝入口,不修改既有量化代码;与 classic/graph_based 剪枝器共存,并复用其精度抽象 AutoCalibrationEvaluatorBase,使 prune→quantize 在同一预算下串联。 公开接口(__all__,与量化 1:1 对齐): - amct.prune(model, config=None, *, data, tolerance, evaluator, size_budget, finetune_fn, report) —— 原地剪枝,返回 None;可选传入 report=PruneReport() 就地收集统计(不保留任何进程级状态)。 - amct.accuracy_based_auto_prune(...) —— 按可接受精度损失自动搜索并应用满足容差的最大剪枝率,返回 AutoTuneResult,对应量化侧 accuracy_based_auto_calibration。 - 预定义配置 *_PRUNE_CFG:CNN_RECONSTRUCT / CNN_VARIANCE / DENSE_LOWVAR / FULL_STRUCTURED / MOE_MASSVAR / MOE_OUTPUT_MERGE / SENSITIVITY_ALLOC。 size_budget_prune / prune_finetune / prune_diagnose 及菜单配置为高级接口,可从 amct_pytorch.pruning 导入,不进入 __all__。剪枝与量化为正交压缩维度:先 prune 改变形状,再 amct.quantize / amct.convert。 ### 实测参考 在 16 个从零训练模型(CNN@MNIST / Dense-LM·MoE-LM@WikiText)与真实预训练 HF 模型上测得,供评审参考: - **CNN 输出保持重建**:训练后 MNIST CNN @0.3,naive variance_channel 0.343 vs reconstruct 0.574(参数量相同)。 - **Dense-LM 1% 预算空间**:无 finetune ≈0%;单遍 finetune(lr 1e-5 + warmup)后中位 27%(最高 61%)。真实 MoE(granite-1b-a400m)同样需要 finetune(≈0% → 17%)。 - **MoE 专家判据依赖路由深度**:全局 variance 劣于 mass,仅深层用 variance(boundary=K)在多专家路由上胜过 mass(OLMoE held-ppl 46.9→35.3);小专家路由(granite,32 专家)下菜单守卫正确回退到 mass。 - **敏感度分配依赖深度**:浅层网络(<10 层)6/6 胜,深层(≥10 层)4/19;guard='calib_nll' 在更差时回退均匀分配。 - **prune→int8 串联**:经恢复菜单剪枝的 SmolLM-135M 走完整 prune→int8→convert 流水线,ppl 1.649 → 剪枝后 1.699 → 叠加 int8 1.704。 ## 如何测试 本地运行单元测试: python -m pytest tests/amct_pytorch/test_pruning_*.py 覆盖核心剪枝、容差自动搜索、跨层敏感度分配、尺寸预算模式、MoE 输出合并、prune→quantize 串联,以及真实 HF 模型(Mixtral / Qwen3Moe / GraniteMoe / DeepseekV3 / Ernie4_5_Moe 等),全部通过。 ## 文档更新 - 新增 docs/zh/api/:prune.md、accuracy_based_auto_prune.md、size_budget_prune.md、prune_finetune.md、prune_diagnose.md、pruning_configs.md,并在 docs/zh/api/README.md 索引中登记。 - 新增示例 examples/algorithms/pruning/(dense / CNN / MoE)。 - amct_pytorch/pruning/README.md / README_en.md 增补“工作原理”走查(打分 → 剪枝 → 恢复 →(可选)量化),并配 5 张流程图(总流程、三个可剪枝的域、容差二分搜索、菜单择优、prune→quantize 串联),图片位于 amct_pytorch/pruning/figures/。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!140 | 20 天前 | |
升级cann-cmake至master-049,适配gcc-15/gcc-16 Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !263 merge master into master 升级cann-cmake至master-049,适配gcc-15/gcc-16 Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 升级cann-cmake至master-049,获取abseil-cpp GCC 15/16 兼容补丁,配合gcc-15/gcc-16 适配需求 ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> CC=gcc-15 CXX=g++-15 bash build.sh --torch编译通过 CC=gcc-16 CXX=g++-16 bash build.sh --torch编译通过 bash build.sh -u UT验证,gcc-15与gcc-13结果一致 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了SECURITY.md和SECURITY_en.md ## 类型标签 <!-- [x] 表示选中 --> - [x] 其他,请描述:构建过程或辅助工具的变动 See merge request: cann/amct!263 | 8 天前 | |
升级cann-cmake至master-049,适配gcc-15/gcc-16 Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !263 merge master into master 升级cann-cmake至master-049,适配gcc-15/gcc-16 Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 升级cann-cmake至master-049,获取abseil-cpp GCC 15/16 兼容补丁,配合gcc-15/gcc-16 适配需求 ## 如何测试 <!--描述测试此改动的步骤和前提条件。--> CC=gcc-15 CXX=g++-15 bash build.sh --torch编译通过 CC=gcc-16 CXX=g++-16 bash build.sh --torch编译通过 bash build.sh -u UT验证,gcc-15与gcc-13结果一致 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了SECURITY.md和SECURITY_en.md ## 类型标签 <!-- [x] 表示选中 --> - [x] 其他,请描述:构建过程或辅助工具的变动 See merge request: cann/amct!263 | 8 天前 | |
接入cann公共cmake仓 Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !78 merge public into master 接入cann公共cmake仓 Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 删除实际未使用到的cmakefile 接入cann公共cmake仓 ## 如何测试 bash build.sh --pkg生成amct包 ## 文档更新 更新了SECURITY.md文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!78 | 4 个月前 | |
[feat] add DeepSeek-V3.2-Exp W8A8C8/W4A8C8 quantization support Co-authored-by: SwaggyAlex<zhangyi601@huawei.com> # message auto-generated for no-merge-commit merge: !3 merge master into master [feat] add DeepSeek-V3.2-Exp W8A8C8/W4A8C8 quantization support Created-by: SwaggyAlex Commit-by: SwaggyAlex Merged-by: cann-robot Description: # 描述 新增对DeepSeek-V3.2-Exp W8A8C8/W4A8C8的量化支持,提供逐block的calibration数据dump、模型训练、精度测验、权重转换脚本,以及使用说明文档 # 类型 [ ] Bug修复 [x] 新功能 [ ] 重构(即不是新增,也不是修改bug的代码改动) [x] 构建过程或辅助工具的变动 [x] 文档内容更新 # 使用说明 **使用前请在sh文件内设置对应模型路径、输出路径等变量** # calibration数据dump bash scripts/dump.sh # 模型训练 bash scripts/train.sh # ppl测算 bash scripts/val.sh # 量化权重输出 bash scripts/deploy.sh # CheckList: [x] 我的代码遵循这个项目的代码风格 [x] 我已经自己测试过我的代码 [x] 我已经更新了对应的文档 [x] 我已经在标题中正确使用了类型标签(例如:feat, fix, refactor, docs, test) # 其他信息 See merge request: cann/amct!3 | 8 个月前 | |
feat: build.sh 按配置变更自动决定是否清理缓存 Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !173 merge feat/incremental-build into master feat: build.sh 按配置变更自动决定是否清理缓存 Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 原来每次构建都无条件删除 build/ 目录,导致无法利用增量编译,每次均为全量构建。 改为读取 CMakeCache.txt 中的关键编译参数(CMAKE_BUILD_TYPE、ENABLE_EXPERIMENTAL、ENABLE_ASAN),仅在这些值发生变化时才清理缓存,其余情况复用已有构建产物。 用户无需感知清理时机,脚本自动判断: - 编译参数未变(包括混用 --torch/--pkg)→ 增量构建 - --build-type、--experimental、--asan 有变化 → 自动全量清理后重建 - 首次构建或 build/ 不存在 → 直接创建,正常构建 ## 如何测试 1. 执行 bash build.sh --torch,记录编译时间 2. 再次执行 bash build.sh --torch,确认复用缓存,编译时间明显缩短 3. 执行 bash build.sh --torch --build-type=Debug,确认输出 Build config changed, cleaning build cache... 并全量重建 4. 混用 bash build.sh --pkg 与 bash build.sh --torch,确认无问题 ## 文档更新 无需更新文档。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!173 | 2 个月前 | |
[feat] add DeepSeek-V3.2-Exp W8A8C8/W4A8C8 quantization support Co-authored-by: SwaggyAlex<zhangyi601@huawei.com> # message auto-generated for no-merge-commit merge: !3 merge master into master [feat] add DeepSeek-V3.2-Exp W8A8C8/W4A8C8 quantization support Created-by: SwaggyAlex Commit-by: SwaggyAlex Merged-by: cann-robot Description: # 描述 新增对DeepSeek-V3.2-Exp W8A8C8/W4A8C8的量化支持,提供逐block的calibration数据dump、模型训练、精度测验、权重转换脚本,以及使用说明文档 # 类型 [ ] Bug修复 [x] 新功能 [ ] 重构(即不是新增,也不是修改bug的代码改动) [x] 构建过程或辅助工具的变动 [x] 文档内容更新 # 使用说明 **使用前请在sh文件内设置对应模型路径、输出路径等变量** # calibration数据dump bash scripts/dump.sh # 模型训练 bash scripts/train.sh # ppl测算 bash scripts/val.sh # 量化权重输出 bash scripts/deploy.sh # CheckList: [x] 我的代码遵循这个项目的代码风格 [x] 我已经自己测试过我的代码 [x] 我已经更新了对应的文档 [x] 我已经在标题中正确使用了类型标签(例如:feat, fix, refactor, docs, test) # 其他信息 See merge request: cann/amct!3 | 8 个月前 | |
chore: update amct graph package url Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !115 merge update_graph into master chore: update amct graph package url Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 更新 install_graph.sh 中 cann-amct-graph 包下载地址,从 20260131_newest 的 9.0.0 包更新为 20260520_newest 的 9.1.0 包,使打包流程获取最新 graph 兼容包。 ## 如何测试 - 清理构建缓存和生成物:build/、build_out/、amctgraph/、dist/、tmp/、amct_pytorch.egg-info、amct_pytorch/graph_based_compression/lib/、测试日志/覆盖率和 __pycache__ - 执行:bash build.sh --pkg - 解压:build_out/cann-amct_9.0.0_linux-aarch64.tar.gz - 检查生成物目录结构 验证结果:构建退出码为 0,日志包含 Build success!、package amct run success、Build finished。解压后确认 graph 包内容更新为 cann-amct_acl_9.1.0_linux-aarch64.run、amct_onnx-0.24.0-py3-none-linux_aarch64.whl,且新包不再包含 amct_mindspore/。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [x] 其他,请描述:更新构建辅助脚本中的外部 graph 包下载地址 See merge request: cann/amct!115 | 3 个月前 | |
新增HiF4-cast 直转工具 Co-authored-by: Zhang Jian<jianmusings@gmail.com> # message auto-generated for no-merge-commit merge: !201 merge jian/hifloat4-cast into master 新增HiF4-cast 直转工具 Created-by: zhangj1an Commit-by: Zhang Jian Merged-by: cann-robot Description: ## Latest Status [13 Aug 2026] Ready for review, CI已通过 --- ## Description <!--Describe your changes in detail, including the reasons for the changes and the methods adopted.--> 本PR希望把HiF4-cast工具集成到AMCT仓库中,需求编号为AR00002U9R。命令行调用、实现细节可以参见 https://gitcode.com/cann/amct/issues/163。 HiF4是一种4比特的层级缩放、块浮点格式。每64个元素为一个块,先用E6M2进行一级缩放,再以8个和4个数字为一组分别算出二、三级微指数,最后每个元素以S1P2表示(1个符号位+2个尾数位),可取{-1.75, -1.5, ... 0, ... 1.5, 1.75}共15个值。细节可参见HiF4技术报告 https://arxiv.org/abs/2602.11287。 ### 主要功能 | 输入 | 路径 | 命令 | 调用链 | 输出 | |---|---|---|---|---| | FP16/BF16 | 伪量化,仅注入HiF4误差,不输出新模型权重 | ptq --quant_dtype hifp --bit_config configs/hifloat4.yaml | fake_quant → hifloat4_fake_quant(NPU kernel / CPU fallback) | 注入HiF4误差,不产出文件 | | FP16/BF16 | 打包,输出HiF4打包字节 | deploy --quant_dtype hifp --granularity block | export_block_deploy → hif4_pack | HiF4 打包字节 | | HiF4 | 解码,输出FP32格式 | deploy --quant_dtype hifp --granularity tensor | convert_state_dict → hif4_unpack | FP32 | 其中,伪量化(BF16/FP16 → HiF4 → BF16/FP16)由NPU伪算子实现;打包和解码由PyTorch实现。打包格式为低位优先,元素0放在低4位,元素1放在高4位。当一个64元素块内出现NaN/+Inf/-Inf时,打包scale byte 0写入0xFF,解码时整块恢复为NaN。 ## Design (设计方案) ### 与开源HiF4仓库对比 本PR的HiF4-cast工具在 https://github.com/global-computing-consortium/HiFloat4 基础上,根据程禹最新的HiF4算子私仓内容,做了以下5点改进,已和程禹对齐。原本的github仓库中的伪量化(BF16/FP16 → HiF4 → BF16/FP16)是由NPU伪算子实现的。 1. 新增了打包函数,由PyTorch实现。存储格式为低位优先,元素 0 放在低 4 bit,元素 1 放在高 4 bit。 2. 在编解码函数中,在把元素除掉块scale,也做完二三级缩放后,在量化成S1P2之前,先做了一次round_to_bf16。 3. 在编解码函数中,当一个64元素块内出现NaN, +Inf, -Inf取值时,打包scale byte 0 写入0xFF, 解码时整块恢复为NaN。 4. 在编解码函数中,当对block max做规约时,从amax(dim=-1),改成了amax(dim=qdim, keepdim=True)。不再需要手动把qdim调整到-1维度。 5. 在伪量化算子中,在host 侧增加了一步处理:将 N 补零pad到 BATCH=512 的整数倍后再调用kernel,kernel不再需要处理当N不符合batch=512的整数的情况。 kernel 输出后裁剪回原长。 ### 适配AMCT仓库 为了将算法接入amct仓库,主要新增/修改以下模块: 1. 新增HiF4伪量化NPU算子文件夹:(amct_ops/hifloat4_cast/) ,做一次FP→HiF4→FP往返仿真。 2. 修改文件,新增HiF4 PyTorch实现的打包、解包、伪算子调度器(amct_pytorch/quantization/dtypes/hifp_impl.py) , 与HiF8并列存放。公开API: - hif4_pack(x) :打包算法, 浮点 → HiF4 uint8字节 - hif4_unpack(scale, value) :解包算法: HiF4 uint8字节 → FP32 - hifloat4_fake_quant(x, qdim=-1) : 伪算子调度器:NPU kernel优先,CPU fallback 内部共用一样的PyTorch算法, hif4_encode / hif4_decode(3级scale + S1P2 golden reference),保证PTQ和deploy路径数值一致。 3. 修改文件,在dtype和带有解码功能的deploy tensorwise函数中注册HiF4格式,(hifp.py、deploy_export.py)。 QuantDequantHifp 已支持 bits=4;convert_state_dict 新增HiF4检测与解码。 ## How to Test <!--Describe the steps and prerequisites for testing this change.--> ### 1. 单元测试 tests/amct_ops/test_hifloat4_cast.py, 里面包括了伪量化算子与golden参考的一致性和异常值处理的测试。 ### 2. CLI端到端的测试 bash # 伪量化:注入HiF4误差(ptq,不产出文件) python -m amct_pytorch.cli.llm.ptq \ --quant_dtype hifp --bit_config amct_pytorch/configs/w4a4.yaml \ --model <IN> --output_dir <OUT> # 打包:输出HiF4字节(deploy blockwise) python -m amct_pytorch.cli.llm.deploy \ --quant_dtype hifp --granularity block \ --model <IN> --output_dir <OUT> # 解码:输出FP32(deploy tensorwise) python -m amct_pytorch.cli.llm.deploy \ --quant_dtype hifp --granularity tensor \ --model <IN> --output_dir <OUT> 可以将模型权重打包又解码的产出和直接做伪量化的产出进行对比,如果达到逐比特一致说明算法正确。 ### 3. 看PPL是否符合预期 用amct仓库内的eval测试,比较BF16, MXFP4, HiF4在wikitext-2数据集上的PPL,看趋势是否符合预期。 <details> <summary> 调用命令</summary> # 1) BF16 baseline —— 不需要 quant_dtype / bit_config / quant_target python -m amct_pytorch.eval \ --model $MODEL --model_name Qwen3.5-9B \ --device npu:0 --eval_mode bf16 \ --seq_len 4096 --output_dir ./outputs # 2) MXFP4 W4A4 python -m amct_pytorch.eval \ --model $MODEL --model_name Qwen3.5-9B \ --device npu:0 --eval_mode quant \ --quant_dtype mxfp \ --bit_config amct_pytorch/configs/w4a4.yaml \ --quant_target mlp attn-linear \ --seq_len 4096 --output_dir ./outputs # 3) HiF4 W4A4 —— 只改 quant_dtype python -m amct_pytorch.eval \ --model $MODEL --model_name Qwen3.5-9B \ --device npu:0 --eval_mode quant \ --quant_dtype hifp \ --bit_config amct_pytorch/configs/w4a4.yaml \ --quant_target mlp attn-linear \ --seq_len 4096 --output_dir ./outputs 另外,当与github上的HiF4私仓github.com/ddddwee1/HiFloat-private (commit id: f511fdd)进行对比时,MXFP4的量化应调用hif4_gpu/quant_cy/base/cusrc/extended_quant_cuda.cu 里mx_shared_scale 函数的mxfp4_c725 分支,并且把round_to_decimal的阈值从1.8125改成1.75,就和amct仓库的实现是一致的。 </details> ## Test Result 在量化时,我们选择W4A4, 将模型的mlp和attn-linear部分进行量化,(其中也会量化linear attention)。 用Qwen3.5-9B和wikitext-2数据集,将HiF4在amct上进行了测试,结果与HiF4算子repo里的PPL趋势一致,HiF4的PPL比MXFP4会差0.5。 |量化选项|HiF4算子repo(程禹写的golden reference), 在A100上测试| amct, 该分支,在npu 910C上测试| |---|---|---| |BF16 baseline|8.202739840420143|8.176278114318848| |MXFP4 w4a4|9.664575071762391| 9.502161026000977| |HiF4 w4a4|10.020700353404631| 9.901074409484863| 由于该结果不太符合预期,HiF4并没有比MXFP4有优势,我们另外在下游数据集上进行了测试。结果显示在Qwen3.5-9B上,HiF4的精度比MXFP4好0.6. 作为对比,在Qwen3-8B上,HiF4的精度比MXFP4好1.7。这两个模型的主要差异在于千问3.5-9b的结构是(3层linear attention+1层full attention)x8,而千问3-8b的结构是36层full attention. ### Qwen3.5-9B上,HiF4的精度比MXFP4好0.6 | Dataset / Metric | FP16 | HiF4 (HiF4算子私仓的版本) | MXFP4 (AMCT实现的版本) | Δ HiF4 - MXFP4 | |---|---:|---:|---:|---:| | arc_challenge (acc_norm) | 55.9 | 55.0 | 54.8 | +0.2 | | arc_easy (acc_norm) | 74.2 | 76.2 | 76.8 | -0.6 | | boolq (acc) | 89.1 | 86.8 | 85.0 | +1.8 | | copa (acc) | 89.0 | 89.0 | 89.0 | 0.0 | | piqa (acc_norm) | 80.1 | 78.8 | 78.2 | +0.6 | | sciq (acc_norm) | 96.0 | 96.2 | 95.3 | +0.9 | | hellaswag (acc_norm) | 78.1 | 76.3 | 74.8 | +1.5 | | **Average** | **80.3** | **79.8** | **79.1** | **+0.6** | 其中表格最后一行,未四舍五入之前的平均值应该是 HiF4 = 79.75,MXFP4 AMCT = 79.11,差值 = +0.64,表格里展示成一位小数就是 +0.6。 ### Qwen3-8B上,HiF4的精度比MXFP4好1.7 | Dataset / Metric | FP16 | (HiF4算子私仓的版本) | MXFP4 (AMCT实现的版本) | Δ HiF4 - MXFP4 | |---|---:|---:|---:|---:| | arc_challenge (acc_norm) | 56.5 | 52.3 | 52.6 | -0.3 | | arc_easy (acc_norm) | 80.8 | 76.9 | 73.4 | +3.5 | | boolq (acc) | 86.6 | 85.9 | 84.5 | +1.4 | | copa (acc) | 85.0 | 84.0 | 82.0 | +2.0 | | piqa (acc_norm) | 77.7 | 76.3 | 75.2 | +1.0 | | sciq (acc_norm) | 95.6 | 95.8 | 94.3 | +1.5 | | hellaswag (acc_norm) | 75.0 | 73.9 | 71.3 | +2.6 | | **Average** | **79.6** | **77.9** | **76.2** | **+1.7** | 另外我们也将Qwen3.5-9b每一层W4A4量化后的SQNR进行了对比。HiF4在每一层的SQNR都比MXFP4高。 ### Qwen3.5-9B上,对权重作比较时,HiF4所有层的SQNR都优于MXFP4 | Layer | HiF4 (dB) | MXFP4 (dB) | Δ HiF4 − MXFP4 | |---|---:|---:|---:| | linear_attn/in_proj_a | 21.40 | 18.56 | +2.84 | | linear_attn/in_proj_b | 21.28 | 18.36 | +2.92 | | linear_attn/in_proj_qkv | 21.56 | 18.94 | +2.62 | | linear_attn/in_proj_z | 21.57 | 18.96 | +2.61 | | linear_attn/out_proj | 21.54 | 18.92 | +2.62 | | mlp/down_proj | 21.55 | 18.88 | +2.67 | | mlp/gate_proj | 21.56 | 18.91 | +2.65 | | mlp/up_proj | 21.56 | 18.91 | +2.65 | | self_attn/k_proj | 21.40 | 18.63 | +2.77 | | self_attn/o_proj | 21.51 | 18.88 | +2.63 | | self_attn/q_proj | 21.54 | 18.91 | +2.63 | | self_attn/v_proj | 21.43 | 18.71 | +2.72 | ### Qwen3.5-9B上,对激活作比较时,HiF4所有层的SQNR都优于MXFP4 | Activation / Layer | HiF4 (dB) | MXFP4 (dB) | Δ HiF4 − MXFP4 | |---|---:|---:|---:| | linear_attn/in_proj_{a,b,qkv,z} | 21.21 | 18.05 | +3.16 | | linear_attn/out_proj | 20.81 | 17.28 | +3.53 | | mlp/down_proj | 20.73 | 17.09 | +3.64 | | mlp/{gate,up}_proj | 20.72 | 17.79 | +2.93 | | self_attn/{q,k,v}_proj | 21.10 | 17.90 | +3.20 | | self_attn/o_proj | 20.72 | 17.21 | +3.51 | <details><summary> 单元测试9项通过 </summary> $ python -m pytest tests/amct_ops/test_hifloat4_cast.py -v tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4Kernel::test_kernel_bf16 PASSED [ 11%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4Kernel::test_kernel_fp16 PASSED [ 22%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4Kernel::test_kernel_padded PASSED [ 33%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4Kernel::test_kernel_zero_is_nan_free PASSED [ 44%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4CastShapes::test_dequant_shape_2x128 PASSED [ 55%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4CastShapes::test_dequant_shape_3x512 PASSED [ 66%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4CastShapes::test_packed_shape_1x64 PASSED [ 77%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4CastShapes::test_packed_shape_2x128 PASSED [ 88%] tests/amct_ops/test_hifloat4_cast.py::TestHiFloat4CastShapes::test_packed_shape_3x512 PASSED [100%] ======================== 9 passed, 15 warnings in 1.98s ======================== </details> <details><summary> 以下两种方案达到了逐比特一致:1. NPU 伪算子(hifloat4_fake_quant) 和 2. PyTorch 打包再解包(hif4_pack + hif4_unpack)</summary> 以 Qwen3.5-9B MLP 权重形状(2560×10240, 10240×2560)的合成 BF16 张量在 NPU 上验证: python import torch from amct_pytorch.quantization.dtypes.hifp_impl import hifloat4_fake_quant, hif4_pack, hif4_unpack shapes = [(2560, 10240), (10240, 2560), (2560, 10240)] for M, N in shapes: x = torch.randn(M, N, dtype=torch.bfloat16).npu() npu_out = hifloat4_fake_quant(x).cpu() # NPU AscendC kernel scale, value = hif4_pack(x.cpu()) # CPU 打包 decoded = torch.from_numpy(hif4_unpack(scale, value)).to(torch.bfloat16) diff = (npu_out.to(torch.float32) - decoded.to(torch.float32)).abs().max().item() print(f' [{M}x{N}] diff={diff:.2e}', '✓' if diff < 1e-4 else '✗') 得到了以下输出内容: [2560x10240] diff=0.00e+00 ✓ [10240x2560] diff=0.00e+00 ✓ [2560x10240] diff=0.00e+00 ✓ All bit-identical ✓ </details> ## Documentation Updates <!--If this PR includes documentation updates, please indicate them here. For example: Updated the README.md file.--> 更新了HiF4伪算子的文档,amct_ops/hifloat4_cast/README.md 和 README_en.md。 ## Type Label <!-- [x] indicates selected --> - [ ] Bug fix - [x] New feature - [ ] Performance optimization - [ ] Documentation update - [x] Code refactoring - [ ] Other, please describe: See merge request: cann/amct!201 | 16 天前 | |
fix: requirements.txt 中 torchao 未指定版本约束 (#170) Co-authored-by: zhengpeiyang<zhengpeiyang@huawei.com> # message auto-generated for no-merge-commit merge: !246 merge fix-issue-170 into master fix: requirements.txt 中 torchao 未指定版本约束 (#170) Created-by: zhengpeiyang Commit-by: zhengpeiyang Merged-by: cann-robot Description: ## 描述 - 修复摘要: requirements.txt 中 torchao 未指定版本约束,pip install -r requirements.txt 会安装最新版 0.18.0,该版本与项目 pinned 的 torch==2.7.1+cpu 不兼容(torchao 内部 ImportError: cannot import name 'ScalingType' from 'torch.nn.functional'),导致按文档执行 bash build.sh -u 时出现 27 个测试收集错误,开发者需自行排查并降级 torchao 版本 - 变更文件: - requirements.txt ### Diff 摘要 text requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ## 如何测试 - 测试结论: PASS - 检测到代码变更文件 1 个: requirements.txt - 测试日志包含通过信号 - 测试日志覆盖计划测试项 4 条 ## 文档更新 无文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## 自动填充信息 ## 自动填充信息 - 关联 Issue: https://gitcode.com/cann/amct/issues/170 - 修复摘要: requirements.txt 中 torchao 未指定版本约束,pip install -r requirements.txt 会安装最新版 0.18.0,该版本与项目 pinned 的 torch==2.7.1+cpu 不兼容(torchao 内部 ImportError: cannot import name 'ScalingType' from 'torch.nn.functional'),导致按文档执行 bash build.sh -u 时出现 27 个测试收集错误,开发者需自行排查并降级 torchao 版本 - 测试结论: PASS - 变更文件: - requirements.txt ### 测试证据 - 检测到代码变更文件 1 个: requirements.txt - 测试日志包含通过信号 - 测试日志覆盖计划测试项 4 条 ### 风险和遗留问题 - 完整 bash build.sh -u 未运行:当前 Windows 主机不具备 Linux CANN/NPU 构建环境;依赖兼容性已通过实际安装与 import smoke 验证。 ### Diff 摘要 text requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ## 风险和遗留问题 - 完整 bash build.sh -u 未运行:当前 Windows 主机不具备 Linux CANN/NPU 构建环境;依赖兼容性已通过实际安装与 import smoke 验证。 See merge request: cann/amct!246 | 22 天前 | |
style: 执行 pre-commit 格式化(#161) Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !228 merge chore/precommit-format-161 into master style: 执行 pre-commit 格式化(#161) Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 按照 issue #161 提到的 pre-commit 本地格式化方法,对仓内 tracked C/C++ 和 Python 文件执行格式化。本 PR 仅包含 clang-format / ruff-format 自动格式化结果,不包含 ruff 历史例外配置。 ## 如何测试 - pre-commit run clang-format --all-files:Passed - pre-commit run ruff-format --all-files:Passed - 未运行完整 pre-commit run --all-files;ruff-check 的历史例外按要求未纳入本次提交。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [x] 其他,请描述:pre-commit 格式化 See merge request: cann/amct!228 | 1 个月前 | |
add amct_pytorch pkg Co-authored-by: fujun19<fujun19@hisilicon.com> Co-authored-by: fujun19<ikX6KxGSevEwXSku7b7TnwyZ> # message auto-generated for no-merge-commit merge: !19 merge amct_pytorch into master add amct_pytorch pkg Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 新增amct_pytorch部分功能开源,包含数据与权重低比特量化、张量分解、模型部署优化(主要为算子融合)等功能 https://www.hiascend.com/document/detail/zh/canncommercial/850/devaids/amct/atlasamct_16_0001.html ## 如何测试 bash build.sh --pkg构建出包 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!19 | 6 个月前 |
🔥 最新动态
- [2026/08/07] 新增结构化剪枝(
amct_pytorch.pruning),支持 MoE 专家 / Dense FFN / CNN 通道剪枝,并提供 Qwen3.6-MoE 结构化剪枝 的一站式单卡样例 - [2026/05/28] 新增当前主流 LLM 网络量化、PTQ 算法支持,并提供 DeepSeek-V4 和 Qwen3.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 上启用低比特运算,显著提升推理性能。部署架构如下:
亮点为:
- 🎯 硬件亲和 —— 量化结果直接对接昇腾 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 |
| 结构化剪枝 | 稠密 FFN 中间维 / CNN 通道 / MoE 专家的结构化剪枝,详见 结构化剪枝 |
📊 性能收益
量化显著降低部署成本:
| 精度格式 | 仅权重(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(NPU 加速后端需使用 CPU 版 PyTorch,并配套 torch_npu) |
| GCC / CMake / patch | ≥ 7.3 / ≥ 3.16(推荐 3.20) / ≥ 2.7 |
| CANN(Toolkit & Ops) | ≥ 8.5.0(需提前安装 NPU 驱动 / 固件) |
⚠️ 使用 NPU 加速后端时,请安装 CPU 版 PyTorch 后再安装配套
torch_npu,不要在同一环境中混用非 CPU 版 PyTorch 与torch_npu。
完整环境部署请参见 快速安装。
安装&验证
# 1. 拉取源码并安装依赖
git clone https://gitcode.com/cann/amct.git
cd amct
pip3 install -r requirements.txt
# 2. 源码构建打包
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
⚠️ 注意:若使用
--no-build-isolation安装,pip 不会自动安装构建依赖; 请先执行pip install wheel,再追加--no-build-isolation安装产物包,否则可能出现error: invalid command 'bdist_wheel'。
# 验证 AMCT 安装
python3 -c "import torch; assert '+cpu' in torch.__version__, 'must use CPU torch for NPU path'"
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 推理体验。 |
| Qwen3.6-MoE 结构化剪枝 | 在 Atlas A3 环境中对 Qwen3.6-MoE 做 MoE 专家结构化剪枝,把单卡装不下的模型压到单卡以内,剪枝后可继续量化。 |
📖 文档样例
| 主题 | 内容 |
|---|---|
| 压缩概念 | 量化、稀疏、蒸馏等基础概念 |
| LLM量化 | 面向大语言模型(LLM)的量化特性 |
| 压缩特性 | AMCT 支持的基础压缩特性 |
| API 文档 | 接口使用说明 |
| 算法介绍 | AWQ、GPTQ、SmoothQuant等算法原理 |
🔍 目录结构
amct/
├── amct_pytorch/ # PyTorch 量化压缩核心源码
│ ├── algorithms/ # 量化算法实现
│ ├── cli/ # 命令行入口
│ ├── common/ # 通用工具、模型和数据处理
│ ├── configs/ # 量化配置模板
│ ├── experimental/ # 实验特性(HiFloat8、DeepSeek 等)
│ ├── pruning/ # 结构化剪枝
│ ├── 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。
量化后精度下降如何处理?
处理路径(按优先级):
- 调整校准数据量:增大
batch_num(推荐 batch_num × batch_size = 16 或 32) - 回退敏感层:识别量化敏感层(首层、尾层、参数量少的层),在配置中设置
quant_enable: false - 调整量化算法:分析模型数据分布特点,使用合适的量化算法
- 尝试量化感知训练(QAT):若 PTQ 无法满足精度,使用 QAT 重训练
安装时报 "ModuleNotFoundError: No module named 'torch'"?
原因:pip 版本 > 25.2,构建隔离导致 torch 未被识别。
解决方案:
# 方案 1:降低 pip 版本
pip install pip==25.2
# 方案 2:先安装 wheel,再添加 --no-build-isolation
pip install wheel
pip3 install build_out/amct_pytorch-${version}-py3-none-linux_${arch}.tar.gz --user --no-build-isolation
💬 社区讨论
欢迎加入 AMCT 社区,参与讨论与交流:
| 平台 | 用途 |
|---|---|
| GitCode Issue | 问题反馈、功能建议、技术讨论 |
| GitCode Discussions | 经验分享、最佳实践、社区互动 |
| SIG Discussions | 技术决策、问题处理、项目落地 |
🤝 参与贡献
欢迎贡献代码、算法与文档,详见 贡献指南:
- 简单 bug 修复:直接提交 PR
- 新特性 / 接口变更:先在 Issue 中讨论方案,达成共识后再提交 PR
- 代码风格:C/C++ 遵循 Google 规范(基于
.clang-format),Python 遵循 PEP8;提交前启用pre-commit
🙏 致谢
感谢所有为 AMCT 做出贡献的开发者!
本项目受启发于以下开源项目:
- AWQ - 激活感知权重量化
- GPTQ - GPTQ 实现参考
- SmoothQuant - 平滑激活量化
- FlatQuant - 矩阵平坦量化
📝 许可证
本项目基于 Apache 2.0 协议开源。使用前请阅读 安全声明 与 免责声明。