已合并
[Feature]命令行参数优化与help提示优化 #805
[Feature]命令行参数优化与help提示优化 #805
已合并
chenruijie创建于 20 天前
chenruijie成员
20 天前

PR 提交说明

提交前请阅读 贡献指南,开发者文档:模型接入指南

PR 标题前缀:[Feature]、[Bugfix]、[Doc]、[Test](与 CONTRIBUTING 一致)

1. 影响面评估

接口变更(按需):

备注:CLI 命令行参数接口发生变更:

--topk → --top_k、--calib_dataset → --calibration_dataset、--pattern → --patterns、--tag → --tags
旧 snake_case 写法保留为隐藏兼容别名,仍可解析但触发弃用告警;不在 --help 中展示
新增顶层 --version / -V 参数
新增统一日志开关 --log_level、-v/--verbose、-q/--quiet
布尔参数 --trust_remote_code 改为 flag 用法(兼容旧 True/False 值写法)

输出件变更(按需):

备注:若无变更请保留「无」;涉及导出格式、产物路径等请在此项补充说明。

非兼容变更(按需):

备注:若无变更请保留「无」;若有非兼容变更请说明迁移方式。

SIG 评审结论(按需):

提醒:非兼容、安全风险等高危 PR 须经 SIG 评审后合入;无则保留「无」。

2. 修改描述

修改背景(可选):
当前 msmodelslim CLI 参数命名与 MindStudio 工具链其他工具不一致(snake_case、缺少 --version、帮助信息不完整),导致用户跨工具学习成本高、AI Agent 难以自动化调用

修改目的:
依据《MindStudio 工具链命令行统一规范化设计方案》,将 msmodelslim 的 CLI 参数体系收敛到统一规范(kebab-case 长选项、--version、统一日志开关、统一帮助信息),同时通过隐藏兼容别名保证存量脚本零中断。

修改内容:
cli:长选项统一为 kebab-case,旧 snake_case 降级为隐藏兼容别名并触发一次性弃用告警
cli:新增顶层 --version / -V 版本查询参数(含 MindStudio Logo、Git commit hash、Copyright、License)
cli:新增统一日志开关 --log-level {debug,info,warning,error}、-v/--verbose、-q/--quiet,并按冲突裁决规则生效
cli:布尔参数 --trust-remote-code 改为 flag 用法(兼容旧 True/False 值写法)
cli:带值参数补齐语义化取值占位符(metavar)
cli:帮助信息补全,含用途、必填参数清单、示例、默认值标注
cli:优化帮助 formatter,--help 仅展示规范名、隐藏旧别名

(在此填写)

概念域参考(填写提示):

  • cli:命令行 quant / analyze / tune
  • app:最佳实践量化、量化分析、精度反馈自动调优等
  • core:算法、量化服务、调度、张量量化、调优策略、最佳实践、上下文等
  • infra:模型适配、调优计划/历史/缓存、测评服务等
  • utils:日志、错误处理、插件等

3. 功能验证

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

复现步骤(可选):

msmodelslim --version
msmodelslim --help
msmodelslim quant --help
msmodelslim analyze linear --help
msmodelslim tune --help
# 旧别名弃用告警验证
msmodelslim quant --model_path ./dummy --save_path ./dummy-out --model_type Qwen2.5-7B-Instruct --help

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

典型安全编码问题

DT

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 chenruijie 的贡献)
atomgit-bot
atomgit-bot
20 天前 评论:

用户要求我根据PR信息生成一个变更摘要。让我分析PR标题、描述、变更文件和补丁。

PR标题:[Bugfix]命令行参数优化与help提示优化

这个PR涉及以下变更:

  1. CLI参数标准化:将snake_case长选项(如--model_path)改为kebab-case(如--model-path),旧的snake_case作为隐藏兼容别名保留,会触发弃用警告,但不在--help中显示。

  2. 新增--version/-V参数:显示版本信息,包括MindStudio Logo、Git commit hash、Copyright、License。

  3. 新增统一日志开关--log-level-v/--verbose-q/--quiet,并按冲突裁决规则生效。

  4. 布尔参数--trust-remote-code改为flag用法:兼容旧的True/False值写法。

  5. 带值参数补齐语义化取值占位符(metavar)

  6. 帮助信息补全:含用途、必填参数清单、示例、默认值标注。

  7. 优化帮助formatter--help仅展示规范名、隐藏旧别名。

现在让我从补丁中梳理出具体变更:

文件1: msmodelslim/cli/__main__.py(+574 -55,主要变更)

主要新增内容:

  • DEPRECATED_ALIASES 字典:将旧的snake_case选项映射到新的kebab-case规范名
  • CANONICAL_LONG_OPTIONS 集合:定义在--help中显示的规范长选项
  • _repo_root() 函数:返回仓库根目录
  • _get_version() 函数:获取已安装包版本
  • _get_git_hash() 函数:获取git commit hash
  • _print_version() 函数:打印统一版本横幅
  • _UnifiedHelpFormatter 类:自定义help格式化器,隐藏弃用/非规范选项别名
  • _add_log_level_args() 函数:添加统一日志级别/详细程度开关
  • _apply_log_level() 函数:解析生效的日志级别
  • _parse_timeout() 函数:解析超时值
  • _warn_deprecated() 函数:对旧选项发出一次性弃用警告

主要修改:

  • main() 函数大量重写:
    • 新增--version/-V参数处理(顶级)
    • 在解析前对旧选项发出弃用警告
    • 使用_UnifiedHelpFormatter
    • 所有子命令(quant、analyze、tune)的参数改为kebab-case,旧名作为别名
    • 为所有参数添加metavar
    • 所有子命令新增descriptionepilog
    • 所有子命令新增_add_log_level_args
    • --trust-remote-code改为nargs='?', const=True的flag用法
    • --timeout使用_parse_timeout
    • 新增--device-id--device-ids参数

文件2: msmodelslim/cli/auto_tuning/__main__.py(+11 -1)

  • 新增对args.device_idsargs.device_id的处理
  • timeout为int时转换为timedelta

文件3: msmodelslim/cli/naive_quantization/__main__.py(+4 -0)

  • 新增对args.device_idsargs.device_id的处理

现在我来总结:


变更摘要

本次变更旨在依据《MindStudio 工具链命令行统一规范化设计方案》,将 msmodelslim CLI 的参数体系收敛到统一规范。核心改动包括:长选项从 snake_case 统一为 kebab-case,旧写法保留为隐藏兼容别名并触发弃用告警;新增顶层 --version / -V 参数与统一日志开关(--log-level-v / --verbose-q / --quiet);布尔参数 --trust-remote-code 改为 flag 用法;为所有带值参数补齐 metavar 占位符;升级帮助信息格式化器,使 --help 仅展示规范名并隐藏旧别名,同时补全各子命令的描述、必填参数清单与使用示例。

主要改动

  • CLI 参数 kebab-case 规范化与向后兼容:在 __main__.py 中新增 DEPRECATED_ALIASES 映射表和 CANONICAL_LONG_OPTIONS 集合,将所有子命令(quantanalyzetune)的长选项从 snake_case(如 --model_path)改为 kebab-case(如 --model-path),旧写法通过 _warn_deprecated() 触发一次性弃用警告但仍可解析
  • 新增 _UnifiedHelpFormatter 帮助格式化器:自定义 argparse.RawDescriptionHelpFormatter 子类,覆写 _format_action_invocation 方法,使 --help 输出仅展示规范长选项名与短选项,隐藏弃用别名,确保显示拼写稳定
  • 新增 --version / -V 与版本打印功能:在 main() 中新增顶层 --version 参数处理,配合 _get_version()_get_git_hash()_print_version() 函数,输出包含 MindStudio Logo、msmodelslim 版本号、Git commit hash、Copyright 和 License 的统一版本横幅
  • 新增统一日志开关:通过 _add_log_level_args()quantanalyzetune 三个子命令统一注入 --log-level-v/--verbose-q/--quiet 参数,并由 _apply_log_level() 按优先级裁决生效(--log-level 优先,其次 --verbose/--debug → debug,--quiet → error)
  • 子命令帮助信息补全与参数语义化:为 quantanalyze(含 linearlayerattn)、tune 子命令补全 descriptionepilog(含使用示例与输出说明),所有带值参数统一添加 metavar 占位符(如 <MODEL_TYPE><PATH>),--trust-remote-code 改为 nargs='?' 的 flag 用法并兼容旧 True/False 值写法
  • --device-id / --device-ids 参数拆分与 --timeout 语义化:在 quanttune 子命令中新增 --device-id(单设备)和 --device-ids(多设备列表)参数,--timeout 改为接收整数秒数(通过 _parse_timeout 兼容旧时长字符串),并在 auto_tuning/__main__.pynaive_quantization/__main__.py 中增加对应的 device_ids / device_id 取值逻辑及 int 到 timedelta 的转换
likedislike
atomgit-bot
atomgit-bot
20 天前 评论:

代码审查

✅ 未发现问题

likedislike
ascend-robotascend-robot成员
20 天前 添加了label:stat/needs-squash
ascend-robotascend-robot成员
20 天前 添加了label:ascend-cla/yes
此处折叠了275条消息 查看更多
ascend-robotascend-robot成员
8 天前 合入了pull request
ascend-robot
ascend-robot成员
8 天前 评论:

Pull Request 已合并或已关闭。

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

likedislike
Cchenruijie成员
6 天前 修改标题为 “[Feature]命令行参数优化与help提示优化”,原标题为“[Bugfix]命令行参数优化与help提示优化”
ascend-robot
ascend-robot成员
6 天前 评论:

Pull Request 已合并或已关闭。

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

likedislike
ascend-robot
ascend-robot成员
6 天前 评论:

Pull Request 已合并或已关闭。

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

likedislike