| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 新增 Qwen3-0.6B dense FFN low_variance ratio 剪枝样例(#183) Co-authored-by: Su1860571<18605179694@163.com> # message auto-generated for no-merge-commit merge: !357 merge feat/qwen3-0-6b-low-variance-ratio-pruning-issue183 into master feat: 新增 Qwen3-0.6B dense FFN low_variance ratio 剪枝样例(#183) Created-by: Su1860571 Commit-by: Su1860571 Merged-by: cann-robot Description: ## 描述 完成 issue #183 任务 5:Qwen3-0.6B dense FFN 中间维 low_variance 剪枝,ratio 模式 prune_ratio=0.1/0.2/0.5 三档。 - 新增 examples/algorithms/pruning/src/run_qwen3_0_6b_pruning_low_variance_ratio.py:启动打印完整运行参数,先 prune_diagnose() 预览再 amct.prune() 正式剪枝,落盘 PruneReport、PPL 指标与复现元数据;模型/数据集均为占位相对路径,不提交权重与数据 - src/utils.py 抽出通用 load_model 与公开 disable_torchaudio 别名(在 transformers 导入前屏蔽损坏的 torchaudio) - README.md / README_en.md 同步新增任务 5 章节:运行说明(三档命令+参数表)、诊断与报告(诊断输出与 PruneReport)、结果表 - .gitignore 排除 examples/algorithms/*/outputs/ 实验产物目录 每档均从未剪枝原始模型独立运行;校准集 Pileval 8 样本 @ seq_len=512,评估集 WikiText2 test 全量 @ seq_len=4096,单卡 Ascend 910(npu:0)bf16。 ## 如何测试 bash bash build.sh --torch pip3 install build_out/amct_pytorch-*.tar.gz --user cd examples/algorithms/pruning/ python3 src/run_qwen3_0_6b_pruning_low_variance_ratio.py \ --model-path ./path/to/Qwen3-0.6B \ --save-dir ./outputs/qwen3_0_6b_low_variance_ratio/r0_1 \ --prune-ratio 0.1 --calib-samples 8 --calib-seq-len 512 三档(0.1/0.2/0.5)逐档独立运行,输出见 README 结果表。ruff check / ruff format 通过。 ## 文档更新 examples/algorithms/pruning/README.md 与 README_en.md 新增任务 5 章节(中英文内容一致)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 代码重构 - [ ] 其他,请描述: 关联 issue:#183(任务 5) See merge request: cann/amct!357 | 15 天前 | |
docs(deepseekv4): 移除 walkthrough 不支持的 mlp 目标 Co-authored-by: dududu121<1595630181@qq.com> # message auto-generated for no-merge-commit merge: !384 merge fix/amct-2026-10-01-005-unsupported-mlp-target into master docs(deepseekv4): 移除 walkthrough 不支持的 mlp 目标 Created-by: dududu121 Commit-by: dududu121 Merged-by: cann-robot Description: ## 描述 修正 DeepSeek-V4 walkthrough 的 ALL_QUANT_TARGETS:移除适配器明确拒绝的 mlp,并在中英文文档保持一致。该列表目前被两个量化评测命令和一个导出命令展开;适配器的量化块构建路径会对 mlp 抛出 ValueError(本 PR 不声称 tensorwise 导出会执行该构建路径)。与已合入 PR #344 修复未定义参数目录常量不同,本 PR 只修复目标列表,不改产品代码或运行行为。 ## 关联的Issue 关联Issue #228 ## 测试 实际执行以下静态检查: bash python3 - <<'PY' from pathlib import Path import ast, re expected=['moe','attn-linear','attn-cache'] for name in ('DeepSeekV4-Flash-Walkthrough.md','DeepSeekV4-Flash-Walkthrough_en.md'): path=Path('examples/models/deepseekv4')/name text=path.read_text(encoding='utf-8') blocks=re.findall(r'python\n(.*?)', text, re.S) for i, block in enumerate(blocks, 1): ast.parse(block, filename=f'{name}:block{i}') match=re.search(r'^ALL_QUANT_TARGETS\s*=\s*(.+)$', text, re.M) targets=ast.literal_eval(match.group(1)) refs=len(re.findall(r'\*ALL_QUANT_TARGETS', text)) assert targets == expected, (name, targets) assert refs == 3, (name, refs) assert 'mlp' not in targets print(f'{name}: PASS; {len(blocks)} Python blocks parse; targets={targets}; expansions={refs}') PY git diff --check 结果:中英文各 8 个 Python 代码块均通过解析;目标列表均为 ['moe', 'attn-linear', 'attn-cache'],各有 3 个引用点。git diff --check 退出码为 0、无输出。未运行模型或 NPU 流程。 ## 文档更新 - examples/models/deepseekv4/DeepSeekV4-Flash-Walkthrough.md - examples/models/deepseekv4/DeepSeekV4-Flash-Walkthrough_en.md ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ### 当前PR是否有AI参与: [] 否 [x] 是 __1. Agent平台信息: Codex CLI 0.153.4 __2. 模型信息: gpt-5.6-luna __3. Prompt摘要: 独立复核 DeepSeek-V4 walkthrough 的目标参数与适配器支持范围、完成全量去重,并实施只移除不支持目标的最小文档修正。 ### 希望检视人员了解: 1. 本轮由 AI 执行源码核对、全量去重、文档修改及静态验证;人工提供候选报告、环境信息和提交授权。未运行模型或 NPU 流程。 See merge request: cann/amct!384 | 2 天前 | |
fix: torchair离线导出sample Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !339 merge master into master fix: torchair离线导出sample Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 新增 torchair 离线模型导出示例( examples/algorithms/export),将 AMCT 量化后的 deploy 模型导出为 torchair AIR 离线计算图,供下游「ATC 转 om → 板端推理」使用。 **支持场景:** - LLM:Qwen/Llama 类因果语言模型,导出输入为真实文本 token 化后的 [1, seqlen] int64 张量; - VLM:CLIP-ViT 类纯图输入模型,图像预处理为 [batch_size, 3, H, W] 张量(仅视觉塔)。 **主要能力:** - 通过 torch.load 加载 AMCT 量化 deploy 模型(含 NpuQuantizationLinear 等自定义模块,无法用 from_pretrained 恢复); - 构建真实 forward 输入,torch.compile + tng.dynamo_export 导出 .air + input.bin; - 大模型权重总量超过内嵌阈值(约 1.8G)时,自动外置到 weights/ 子目录,保持导出目录整洁; - 导出时强制 eager attention(避免 sdpa 被重派发为 torchair 未支持的 npu_fusion_attention_v3)、关闭 KV cache,规避 GE InferShape 无法处理的空张量 ConcatV2; - output_dir 统一归一化为绝对路径,避免 .air 中 FileConstant 外置权重因相对路径导致 ATC 转 om 时找不到权重。 ## 如何测试 1. 按文档完成 AMCT 量化(如 smoothquant)并保存 deploy 模型(torch.save 为 model.pth + tokenizer 文件); 2. 执行 LLM 导出: ```bash python3 src/export_torchair_sample.py --model_path=/path/to/quantized_llm --seqlen=2048 3. VLM 导出(可选): python3 src/export_torchair_sample.py --model_type=vlm --model_path=/path/to/quantized_clip --image_path=/path/to/img.jpg --batch_size=1 --dtype=float16 4. 核对产物:<export_name>.air、input.bin,大模型场景还应有 weights/dynamo.pbtxt 与外置权重文件; 5. 执行 atc --model=./<export_name>.air --framework=1 --output=./<name> --soc_version=<本机soc> 转 om,并用 xacl_fmk 等离线推理工具验证可正常加载运行。 文档更新 新增 examples/algorithms/export/README.md 与 README_en.md,说明前置条件、使用方式、参数表、导出产物布局及注意事项。 类型标签 - Bug修复 - 新特性 - 性能优化 - 文档更新 - 代码重构 - 其他,请描述: See merge request: cann/amct!339 | 22 天前 | |
fix: torchair离线导出sample Co-authored-by: Whn0604<wuhannan1@h-partners.com> # message auto-generated for no-merge-commit merge: !339 merge master into master fix: torchair离线导出sample Created-by: Whn0604 Commit-by: Whn0604 Merged-by: cann-robot Description: ## 描述 新增 torchair 离线模型导出示例( examples/algorithms/export),将 AMCT 量化后的 deploy 模型导出为 torchair AIR 离线计算图,供下游「ATC 转 om → 板端推理」使用。 **支持场景:** - LLM:Qwen/Llama 类因果语言模型,导出输入为真实文本 token 化后的 [1, seqlen] int64 张量; - VLM:CLIP-ViT 类纯图输入模型,图像预处理为 [batch_size, 3, H, W] 张量(仅视觉塔)。 **主要能力:** - 通过 torch.load 加载 AMCT 量化 deploy 模型(含 NpuQuantizationLinear 等自定义模块,无法用 from_pretrained 恢复); - 构建真实 forward 输入,torch.compile + tng.dynamo_export 导出 .air + input.bin; - 大模型权重总量超过内嵌阈值(约 1.8G)时,自动外置到 weights/ 子目录,保持导出目录整洁; - 导出时强制 eager attention(避免 sdpa 被重派发为 torchair 未支持的 npu_fusion_attention_v3)、关闭 KV cache,规避 GE InferShape 无法处理的空张量 ConcatV2; - output_dir 统一归一化为绝对路径,避免 .air 中 FileConstant 外置权重因相对路径导致 ATC 转 om 时找不到权重。 ## 如何测试 1. 按文档完成 AMCT 量化(如 smoothquant)并保存 deploy 模型(torch.save 为 model.pth + tokenizer 文件); 2. 执行 LLM 导出: ```bash python3 src/export_torchair_sample.py --model_path=/path/to/quantized_llm --seqlen=2048 3. VLM 导出(可选): python3 src/export_torchair_sample.py --model_type=vlm --model_path=/path/to/quantized_clip --image_path=/path/to/img.jpg --batch_size=1 --dtype=float16 4. 核对产物:<export_name>.air、input.bin,大模型场景还应有 weights/dynamo.pbtxt 与外置权重文件; 5. 执行 atc --model=./<export_name>.air --framework=1 --output=./<name> --soc_version=<本机soc> 转 om,并用 xacl_fmk 等离线推理工具验证可正常加载运行。 文档更新 新增 examples/algorithms/export/README.md 与 README_en.md,说明前置条件、使用方式、参数表、导出产物布局及注意事项。 类型标签 - Bug修复 - 新特性 - 性能优化 - 文档更新 - 代码重构 - 其他,请描述: See merge request: cann/amct!339 | 22 天前 | |
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 | 1 个月前 | |
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 | 1 个月前 | |
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 | 1 个月前 | |
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 | 1 个月前 | |
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 | 1 个月前 |
简介
简体中文 | English
本项目提供了不同场景的调用样例,搭建完环境后,可以根据实际场景尝试运行:
| 样例 | 算法 | 说明 |
|---|---|---|
| 使用MIN-MAX算法量化模型 | Min-Max | 基于极值的简单量化,入门首选 |
| 使用AWQ算法量化模型 | AWQ | 激活感知的权重量化,适合大模型 PTQ |
| 使用GPTQ算法量化模型 | GPTQ | 基于二阶信息的权重量化,逐层优化 |
| 使用SmoothQuant算法量化模型 | SmoothQuant | 平滑激活分布的 W8A8 量化 |
| 使用Cast直转算法量化模型 | Cast | HiFloat8 数据直转 |
| 使用Quantile算法量化模型 | Quantile | HiFloat8 分位量化 |
| 使用ofmr算法量化模型 | OFMR | 输出特征 Min-Max 量化 |
| 使用mxquant算法量化模型 | MXQuant | 微缩浮点量化(MXFP8/MXFP4) |
| 使用FlatQuant算法量化模型(试验特性) | FlatQuant | 通过仿射变换平整化分布的量化 |
| 使用结构化剪枝压缩模型 | Pruning | dense FFN / CNN 通道 / MoE 专家 结构化剪枝 |
| 使用torchair导出离线模型 | Torchair离线导出 | 将量化后deploy模型导出为torchair AIR离线计算图 |
注意:标注"试验特性"的样例依赖
amct_pytorch/experimental/目录下的内容,需使用bash build.sh --torch --experimental(或--pkg --experimental)构建安装包后方可使用。