已合并
[BugFix] 新构建方案需求适配,支持构建与测试 #605
[BugFix] 新构建方案需求适配,支持构建与测试 #605
已合并
code_mingming创建于 6月23日
code_mingming成员
6月23日

PR 提交说明

1. 影响面评估

接口变更(按需):

输出件变更(按需):

非兼容变更(按需):

SIG 评审结论(按需):

2. 修改描述

修改背景(可选):(问题现象、使用场景等)

修改目的:(本 PR 要达成什么目标)
新构建方案适配,支持命令行在预期mindstudio镜像内完成构建与测试

修改内容:(按「概念 - 变化」分条,示例:core/算法:新增 SmoothQuant 离群值抑制)
构建脚本修改:

  1. 更新 build.py 支持一键式构建和UT执行

UT修复:

  1. 发现存在新用例test/cases/format/compressed_tensors_format/quantization/test_quant_scheme.py中依赖了pytest-mock,更新到资料里
  2. 发现pydantic>=2.13版本时UT校验存在问题,fix(test): ext 字段使用 exclude_if 约定空值不序列化,修正断言以兼容 pydantic>=2.13 的 model_dump 行为
  3. 适配 py311 枚举 f-string 渲染变化,将 _build_quant_tips 两处断言改为兼容 py310/py311 双版本。

3. 功能验证

冒烟由 CI 门禁检查,无需填写「冒烟是否通过」。

复现步骤(可选):

# 在此粘贴可复现命令

4. 自检(请逐项确认,不适用标 N/A)

典型安全编码问题

DT

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 code_mingming 的贡献)
ascend-robotascend-robot成员
6月23日 添加了label:stat/needs-squash
ascend-robotascend-robot成员
6月23日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
6月23日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-Ascend/msmodelslim 周容辰, rookie_hongchuan, yejiajun (3/2) 周容辰 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

code_mingming, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robot
ascend-robot成员
6月23日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
6月23日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
6月23日 评论:

✅ 文档门禁通过!

检查项 检查结果 详情
markdownlint ✅ 已通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情
likedislike
ascend-robotascend-robot成员
6月23日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
6月23日 添加了label:docs-ci-pipeline-success
code_mingming成员
6月23日 评论:

compile

likedislike
ascend-robotascend-robot成员
6月23日 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
6月23日 评论:

Ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
6月23日 删除了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
6月23日 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
6月23日 评论:

✅ 文档门禁通过!

检查项 检查结果 详情
markdownlint ✅ 已通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情
likedislike
ascend-robotascend-robot成员
6月23日 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
6月23日 添加了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
6月23日 删除了label:ci-pipeline-running
ascend-robotascend-robot成员
6月23日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
6月23日 评论:
流水线 PR-pipeline_msmodelslim#1754 [ commitID:c4e9c1b0 ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_msmodelslim >>>
恶意代码检查 Antipoison_MindStudio-ModelSlim >>>
编码安全与规范检查 CodeCheck_MindStudio-ModelSlim >>>
开源片段检查 SCA_MindStudio-ModelSlim >>>
开发者测试 UT_msmodelslim >>>
PreSmoke_msmodelslim >>>
流水线 PR-pipeline_msmodelslim >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
atomgit-bot
atomgit-bot
6月23日 评论:

变更摘要

此 PR 旨在适配新构建方案,使项目能够在目标 MindStudio 镜像内通过命令行完成一键式构建与单元测试。主要改动包括:重写 build.py 构建脚本引入 BuildManager 类统一管理依赖拉取、编译、测试流程;修复因 pydantic>=2.13 与 Python 3.11 行为变化导致的若干单元测试断言失败;并补充 pytest-mock 测试依赖。

主要改动

  • 构建脚本重构 (build.py): 新增统一的 BuildManager 类,支持 python build.py(完整构建)、python build.py test(单元测试)、python build.py local(跳过依赖下载)等命令行模式,集成依赖安装、torch_npu 冲突检测、产物归档等流程。
  • pydantic>=2.13 兼容修复: AscendV1QuantFormatConfigMindIEQuantFormatConfigext 字段采用 exclude_if 约定空值不序列化,对应测试用例 test_model_dump_include_empty_ext_when_ext_defaultmodel_dump() 断言调整为 assert not dumped.get("ext")
  • Python 3.11 枚举 f-string 兼容修复: _build_quant_tips 相关测试断言从仅检查 QuantType.XXX.value 改为同时兼容 str(QuantType.XXX),适配 Python 3.11 中 Enumf-string 渲染行为变化(输出变为完整限定名而非值)。
  • 测试依赖补充: 在 test/requirements.txt 中新增 pytest-mock,满足 test_quant_scheme.py 用例中使用 mocker fixture 的依赖需求。
likedislike
atomgit-bot
atomgit-bot
6月23日 评论:

代码审查

审查总结

按优先级统计本次审查发现:

  • P0:0 个
  • P1:0 个
  • P2:0 个
  • P3:2 个(均为可选改进,不影响正确性)

各文件审查结论

文件 结论
build.py 1 个 P3:argparse choices 中包含冗余空列表 []
docs/zh/common/testing_guide.md 无问题,新增 pip install pytest-mocktest/requirements.txt 一致
test/cases/app/naive_quantization/test_application_helpers.py 无问题,py311 枚举 f-string 兼容性修复正确
test/cases/format/ascendV1_format/test_ascendV1.py 无问题,pydantic >= 2.13 exclude_if 兼容性修复正确
test/cases/format/mindie_format/test_mindie.py 无问题,同上
test/requirements.txt 1 个 P3:部分依赖未固定版本(可选改进)

整体风险评估

低风险。 本次变更主要完成以下工作:

  1. build.py 新增一键构建与测试能力,依赖安装逻辑清晰,命令行参数解析正确;
  2. 三处测试修复均针对 py311 / pydantic >= 2.13 的兼容性问题,修复方式正确且向后兼容;
  3. test/requirements.txt 将测试依赖正式化,与文档 testing_guide.md 保持一致。

未发现正确性、安全、可靠性或破坏性变更问题。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
atomgit-bot
atomgit-bot6月23日进行代码检视2
build.py
@@ -16,6 +16,7 @@
1616# See the Mulan PSL v2 for more details.
1717# -------------------------------------------------------------------------
1818import argparse
19+import importlib.util
1920import logging
2021import os
2122import shutil
@@ -52,7 +53,7 @@
5253 'command',
5354 nargs='*',
5455 default=[],
5556 choices=[[], 'local', 'test'],
atomgit-bot
atomgit-bot6月23日评论:

🔵 Low Priority

build.py 第 56 行,argparse.ArgumentParser.add_argumentchoices 参数被设置为 [[], 'local', 'test']。其中 [] 是一个空列表对象,不是一个字符串选项。

由于 nargs='*',argparse 对每个收集到的参数值逐一检查 value in choices。空列表 [] 永远不会等于任何字符串参数,因此这个选项实际上不会被匹配,是冗余的。

实际影响: 当用户传入非法命令时,argparse 的错误消息会包含 [],例如:
[] 出现在错误提示中对用户造成困惑,看起来像是显示了两个合法选项 localtest 之外还有一个空选项。

建议:将 choices=[[], 'local', 'test'] 改为 choices=['local', 'test'],移除冗余的空列表选项。nargs='*' 本身已允许零参数场景(通过 default=[] 配合),无需在 choices 中显式声明空列表。

改动建议
56
- choices=[[], 'local', 'test'],
56
+ choices=['local', 'test'],
应用建议
likedislike
code_mingming成员
6月24日 评论:

非本需求,不采纳

atomgit-bot
atomgit-bot6月23日进行代码检视2
test/requirements.txt
@@ -0,0 +2,4 @@
2+pytest-mock
3+coverage
4+torch==2.1.0
5+pyyaml
atomgit-bot
atomgit-bot6月23日评论:

🔵 Low Priority

test/requirements.txt 中部分关键依赖未固定版本号:pytestpytest-mockcoveragepyyaml 均未使用版本约束。

主要风险在于 pyyaml — 该库历史上有多个安全漏洞(CVE-2017-18342、CVE-2020-1747 等),涉及 yaml.load() 任意代码执行。虽然项目本身使用 yaml_safe_load(见 msmodelslim/utils/security.py),但如果环境中安装了包含已知漏洞的旧版本 pyyaml,仍存在一定风险。

testing_guide.md 中列出了 pip install pyyaml(同样未固定版本),两者一致,但最佳实践是固定已知安全的版本(如 pyyaml>=6.0)。

建议:建议对 pyyaml 添加最低版本约束 pyyaml>=6.0。对于其他测试工具(pytest、pytest-mock、coverage),如希望严格可复现,也可考虑固定版本或使用下限约束。

likedislike
code_mingming成员
6月24日 评论:

不采纳,目前不需要特别指定

Ccode_mingming成员
6月24日 修改标题为 “[Feature] 新构建方案需求适配,支持构建与测试”,原标题为“[Feature] 新构建方案适配,支持构建与测试”
Ccode_mingming成员
6月24日 修改了pull request 的描述
Ccode_mingming成员
6月24日 关联了里程碑:MindStudio 26.1.0
Ccode_mingming成员
6月24日 修改标题为 “[BugFix] 新构建方案需求适配,支持构建与测试”,原标题为“[Feature] 新构建方案需求适配,支持构建与测试”
Ccode_mingming成员
6月24日 关联了issue:[Bug] [自提]新构建方案需求,脚本尚未支持运行测试
Ccode_mingming成员
6月24日 解决了最后一个问题
yejj
6月24日 评论:

/lgtm

likedislike
rookie_hongchuan成员
6月24日 评论:

/lgtm

likedislike
ascend-robotascend-robot成员
6月24日 添加了label:lgtm
joejoezhou成员
6月25日 评论:

/approve

likedislike
ascend-robotascend-robot成员
6月25日 添加了label:approved
ascend-robotascend-robot成员
6月25日 合入了pull request
ascend-robot
ascend-robot成员
6月25日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike