| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[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 | 24 天前 | |
调整docs目录区分中英文 Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !142 merge master into master 调整docs目录区分中英文 Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: ## 描述 docs目录区分中英文 ## 如何测试 根据最新的目录进行测试 ## 文档更新 docs目录下中的中文文档,移入docs/zh目录,后续英文在docs/en目录 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!142 | 3 个月前 | |
[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 | 24 天前 | |
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 | 13 天前 | |
feat: 新增 HiGPTQ 校准算法支持 Co-authored-by: zhangj1an<lanzhao944@gmail.com> Co-authored-by: zhangj1an<jianmusings@gmail.com> # message auto-generated for no-merge-commit merge: !252 merge higptq_cli into master feat: 新增 HiGPTQ 校准算法支持 Created-by: nancycyzl Commit-by: zl;Zhang Jian;ZL_PC;zhangj1an Merged-by: cann-robot Description: ## Description 本提议新增 HiGPTQ,把经典 GPTQ 的 Hessian 累积 + Cholesky 闭式求解思路引入 LLM PTQ 框架,并针对 HiFloat4(HiF4) 这个块浮点格式做适配。 AMCT PTQ 框架( amct_pytorch.ptq / LlmPtqWorkflow) 现有的算法(LAC、LWC、AutoRound、OmniQuant、FlatQuant)都是"可微分/可迭代"一类,以 weight/activation/structure 为 target 插件式串进 QuantLinear 正向传播,靠 BlockwiseSolver 反向传播+优化器多轮迭代求解。GPTQ / HiGPTQ 这种单次前向、闭式求解的路径,没有可学习参数,求解方式和上述算法不同。但只需要把求解过程中的中间结果罗盘,就可以复用框架现有的 BlockwiseSolver 和插件机制。 本提议延续框架现有的结构(CLI → LlmPtqWorkflow → Blockwise Solver → 具体算法),新增一个模块: - GPTQuant(amct_pytorch/algorithms/quant/gptq.py):继承 QuantAlgorithmBase,实现基于 INT 和 HiF4 的 GPTQ 算法。 ## How to Test 1. Unit test python -m pytest tests/unit_test/algorithms/test_higptq.py -v 结果: (amct) [ma-user amct]$python -m pytest tests/unit_test/algorithms/test_higptq.py -v ==================================================================================================== test session starts ===================================================================================================== platform linux -- Python 3.11.15, pytest-9.1.1, pluggy-1.6.0 -- /home/ma-user/.conda/envs/amct/bin/python cachedir: .pytest_cache rootdir: /home/ma-user/work/z84448474/amct configfile: pyproject.toml plugins: xdist-3.6.1, typeguard-4.5.2, anyio-4.14.1, env-1.7.0 collected 8 items tests/unit_test/algorithms/test_higptq.py::test_higptq_is_registered_as_a_calibrate_solver_algo PASSED [ 12%] tests/unit_test/algorithms/test_higptq.py::test_cal_scale_offset_static_has_no_external_quant_factors PASSED [ 25%] tests/unit_test/algorithms/test_higptq.py::test_cal_quant_weight_group_delegates_to_hifloat4_fake_quant PASSED [ 37%] tests/unit_test/algorithms/test_higptq.py::test_single_group_optimization_matches_direct_hifloat4_quant PASSED [ 50%] tests/unit_test/algorithms/test_higptq.py::test_dead_hessian_column_is_zeroed_before_quantization PASSED [ 62%] tests/unit_test/algorithms/test_higptq.py::test_optimization_handles_column_counts_not_aligned_to_group_or_block_size PASSED [ 75%] tests/unit_test/algorithms/test_higptq.py::test_fake_quant_forward_quantizes_once_and_reuses_cache PASSED [ 87%] tests/unit_test/algorithms/test_higptq.py::test_forward_updates_weight_after_batch_num_then_switches_to_fake_quant PASSED [100%] ===================================================================================================== 8 passed in 1.47s ====================================================================================================== 2. 端到端测试 a) 保存激活值 通过 amct_pytorch.extract_ptq_data 保存激活值,需对不同类型层分别运行,比如 --quant_target mlp 或者 --quant_target attn_linear python -m amct_pytorch.extract_ptq_data \ --model /home/ma-user/work/z84448474/models/Qwen3.5-9B \ --model_name qwen3_5 \ --seq_len 4096 \ --granularity block \ --device npu:0 \ --data_dir ptq_data/qwen3_5/mlp \ --quant_target mlp b) 运行 HiGPTQ 算法 需对不同类型层分别运行,比如 --quant_target mlp 或者 --quant_target attn_linear,以及配置对应的 --data_dir python -m amct_pytorch.ptq \ --model /home/ma-user/work/z84448474/models/Qwen3.5-9B \ --model_name qwen3_5 \ --seq_len 4096 \ --granularity block \ --device npu:0 \ --data_dir /data/z84448474/z84448474/ptq_data/qwen3_5/mlp \ --quant_dtype hifp \ --algos gptq \ --bit_config amct_pytorch/configs/hifloat4.yaml \ --quant_target mlp \ --moe_mlp_param_dir ptq_result/ptq_params/qwen3_5/mlp \ --output_dir ptq_result/ c) 进行 PPL 测评 配置 --attn_linear_param_dir 和 --moe_mlp_param_dir 等路径(第二步的结果) python -m amct_pytorch.eval \ --model /home/ma-user/work/z84448474/models/Qwen3.5-9B \ --model_name qwen3_5 \ --seq_len 4096 \ --granularity block \ --device npu:0 \ --eval_mode quant \ --quant_target mlp attn-linear \ --quant_dtype hifp \ --bit_config amct_pytorch/configs/hifloat4.yaml \ --attn_linear_param_dir ptq_result/ptq_params/qwen3_5/attn-linear \ --moe_mlp_param_dir ptq_result/ptq_params/qwen3_5/mlp 测试结果(PPL对比): HiF4 直转 (w4a16):9.948 HiGPTQ 校准后:8.401 ## Type Label <!-- [x] indicates selected --> - [ ] Bug fix - [x] New feature - [ ] Performance optimization - [ ] Documentation update - [ ] Code refactoring - [ ] Other, please describe: See merge request: cann/amct!252 | 19 天前 | |
fix: 修复 sdist 安装构建依赖声明(#144) Co-authored-by: fujun19<fujun19@hisilicon.com> # message auto-generated for no-merge-commit merge: !198 merge fix/issue-144-build-system into master fix: 修复 sdist 安装构建依赖声明(#144) Created-by: fujun19 Commit-by: fujun19 Merged-by: cann-robot Description: ## 描述 修复 #144:为 sdist 安装补齐 PEP 517/518 构建后端声明,并修正文档中 --no-build-isolation 安装路径的构建依赖说明。 主要改动: - 在 pyproject.toml 增加 [build-system],声明 setuptools、wheel 与 setuptools.build_meta。 - 更新 README.md、README_en.md 与 docs/zh/build.md,说明使用 --no-build-isolation 时需先执行 pip install wheel,避免 invalid command 'bdist_wheel'。 ## 如何测试 - python3 -m pip wheel . --no-deps --no-build-isolation -w /tmp/amct_issue144_wheel - python3 /home/developer/.codex/skills/codearts-check/scripts/run_codearts_check.py - git diff --check ## 文档更新 更新 README.md、README_en.md 和 docs/zh/build.md 中关于 --no-build-isolation 与 wheel 构建依赖的安装说明。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!198 | 2 个月前 | |
调整docs目录区分中英文 Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !142 merge master into master 调整docs目录区分中英文 Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: ## 描述 docs目录区分中英文 ## 如何测试 根据最新的目录进行测试 ## 文档更新 docs目录下中的中文文档,移入docs/zh目录,后续英文在docs/en目录 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: See merge request: cann/amct!142 | 3 个月前 | |
[wip]fix docs | 11 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 24 天前 | ||
| 3 个月前 | ||
| 24 天前 | ||
| 13 天前 | ||
| 19 天前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 11 天前 |