| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
新增组合测试脚本run_throughput_optimizer_cases.py,组合多种设备 × 卡数 × 模型 × 输入/输出长度,输出总结csv,提升整体易用性 Co-authored-by: wangjin<wangjin171@huawei.com> # message auto-generated for no-merge-commit merge: !247 merge develop-w00637429 into develop 新增组合测试脚本run_throughput_optimizer_cases.py,组合多种设备 × 卡数 × 模型 × 输入/输出长度,输出总结csv,提升整体易用性 Created-by: gcw_hasgjVbP Commit-by: wangjin Merged-by: ascend-robot Description: **PR Type / PR类型** - [ x] Feature(功能新增) - [ ] Bugfix(Bug 修复) - [ x] Docs(文档更新) - [ ] CI/CD(持续集成/持续部署) - [ ] Refactor(代码重构) - [ ] Perf(性能优化) - [ x] Test-Cases(测试用例更新) - [ ] Other(其他) ## 🔍 Motivation / 变更动机 ------ 紧接着这个pull request:https://gitcode.com/Ascend/msmodeling/pull/106 ## 📝 Modification / 修改内容 ### PR Review Comments & Changes ### Overview PR 功能:新增 run_throughput_optimizer_cases.py,通过 CSV 驱动多组 benchmark case,顺序调用 throughput_optimizer 的 ParallelRunner 运行,结果写入同一张 CSV。 本文档记录收到的评审意见及对应修改说明。 --- #### Comment 1: CLI 文件名重命名 **评审意见:** CLI 名字可以换一下,例如 run_throughput_optimizer_cases,以前老的 benchmark CLI 已经被 throughput_optimizer 取代了,可以将文件名替换成 run_throughput_optimizer_cases.py。 **修改:** - 文件重命名:cli/inference/run_benchmark_cases.py → cli/inference/run_throughput_optimizer_cases.py - 模块 docstring 中所有 run_benchmark_cases 引用更新为 run_throughput_optimizer_cases - Usage 示例中 python -m cli.inference.run_benchmark_cases → python -m cli.inference.run_throughput_optimizer_cases --- #### Comment 2: 添加 UT **评审意见:** Please add UT. **修改:** 新增 tests/test_run_throughput_optimizer_cases.py,包含 15 个测试类,共 71 个测试用例: | 测试类 | 覆盖范围 | |--------|---------| | TestParseListFloat | 分号分隔浮点数解析、空值、None、空白 | | TestParseListInt | 整数列表解析、空值返回 None | | TestParseBool | true/1/yes → True,其他 → False | | TestParseOptionalBool | 空值 → None,有效值解析,无效值 → None | | TestParseMode | agg/disagg/空值/无效值 | | TestParseParallel | tp/pp/dp 解析(紧凑格式 + disagg 冗长格式)、无效格式 | | TestSingleLimit | 空列表 → None、单值返回、多值抛 ValueError | | TestLoadCasesFromCsv | CSV 加载、默认值、无效量化报错、空行跳过、缺少 case_name 自动命名 | | TestWriteTemplateCsv | 模板 header 正确、示例行存在、tpot 默认值 50ms | | TestBuildOptimizerArgs | agg/disagg 模式、_single_limit 应用、多值 ttft/tpot 报错 | | TestBenchmarkResult | CSV header 与行长度一致、CSV 读写 roundtrip、无 error 属性 | | TestParseArgs | argparse 各参数解析、默认值、--help 退出 | | TestSaveResultsToCsv | 结果正确写入、FLUSH_BATCH_SIZE 常量验证 | | TestDefaultTpotLimitMs | 默认值为 50.0ms | | TestIntegrationExampleCase | 基于 example_cases.csv 输入和 result.csv 输出的端到端集成测试 | TestIntegrationExampleCase 包含 5 个测试用例: - test_csv_load_parses_example_case:验证 CSV 行解析为 BenchmarkCase 的所有字段 - test_build_optimizer_args_from_example_case:验证 BenchmarkCase → Namespace 转换及 ParallelRunner 所需默认属性 - test_result_row_from_example_output:验证 BenchmarkResult → _result_row 输出与实际 result.csv 一致 - test_full_csv_roundtrip:端到端 CSV 写入 → 加载 → 构造结果 → 保存 → 读回验证 - test_parse_parallel_disagg_output:验证 disagg 模式 "TP=1 | PP=1 | DP=64" 格式解析 --- #### Comment 3: tpot_limits 单位确认 **评审意见:** throughput_optimizer 里 tpot_limits 单位应该是 ms,请确认单位是否有误。 **修改:** 确认 throughput_optimizer 中 ttft_limits 和 tpot_limits 均为毫秒(ms)单位(parallel_runner.py 日志 "Run Aggregation with ttft %r ms, tpot %r ms.")。原代码默认值 0.05 为秒,与链路 ms 语义不一致,已在 Comment 5 中修复。 --- #### Comment 4: 使用 argparse 模块实现参数解析 **评审意见:** 建议使用 argparse 模块实现参数解析,增加可维护性和扩展性。 **修改:** 将 _parse_args() 从手动 while 循环解析替换为 argparse.ArgumentParser: python def _parse_args(): parser = argparse.ArgumentParser( prog="run_throughput_optimizer_cases", description="...", ) parser.add_argument("--input-csv", ...) parser.add_argument("--write-template", ...) parser.add_argument("--output-csv", ...) parser.add_argument("--test-conversion", action="store_true", ...) args = parser.parse_args() return args.input_csv, args.write_template, args.output_csv, args.test_conversion 返回类型(4-tuple)不变,--num-workers 参数已移除(当前仅支持顺序执行,无意义参数不应保留),__main__ 块相应更新。新增 --help 自动生成帮助信息。 --- #### Comment 5: tpot_limits 默认值修正 **评审意见:** tpot_limits 为空时默认值写成 0.05,而链路按 ms 语义处理,会把默认 SLO 变成极端严格值(0.05ms),应统一成显式毫秒常量并使用 50.0。 **修改:** - 新增模块级常量 DEFAULT_TPOT_LIMIT_MS = 50.0 - load_cases_from_csv 中 tpot_limits = [0.05] → tpot_limits = [DEFAULT_TPOT_LIMIT_MS] - run_example 中 tpot_limits=[50] → tpot_limits=[DEFAULT_TPOT_LIMIT_MS] - _test_result_conversion 中 tpot_limits=[0.05] → tpot_limits=[DEFAULT_TPOT_LIMIT_MS] - _test_result_conversion 中 mock 数据 tpot=500 → tpot=40(原值 500 > 0.05 导致 SLO 过滤始终失败,测试实际不校验通过;改为 40 ≤ 50ms 使测试逻辑正确) - write_template_csv 中示例行 tpot_limits 使用 str(int(DEFAULT_TPOT_LIMIT_MS)) --- #### Comment 6: 量化 Action 解析失败时应报错而非静默降级 **评审意见:** quantize_linear_action / quantize_attention_action 解析失败时被静默降级为 None,后续回退默认量化配置,导致用户配置错误被"吞掉"。建议在配置非法时直接报错并给出可选值。 **修改:** python # 修改前 try: linear_action = QuantizeLinearAction(q_linear) if q_linear else None except ValueError: linear_action = None # 静默降级 # 修改后 if q_linear: try: linear_action = QuantizeLinearAction(q_linear) except ValueError: valid = ", ".join(e.value for e in QuantizeLinearAction) raise ValueError( f"Row case_name={case_name}: invalid quantize_linear_action '{q_linear}'. " f"Valid options: {valid}" ) from None else: linear_action = None quantize_attention_action 同理处理。UT 中 test_invalid_quantize_linear_raises、test_invalid_quantize_attention_raises、test_error_message_lists_valid_quantize_options 覆盖此变更。 --- #### Comment 7: BenchmarkResult 移除 error 字段 **评审意见:** BenchmarkResult 中不需要带有 best_decode_error 和 best_prefill_error。代码保持简洁高效。 **修改:** - 从 BenchmarkResult dataclass 中移除 best_decode_error 和 best_prefill_error 字段 - 从 _csv_header_and_ref_row 的输出 header 中移除 Decode_Error Message 和 Prefill_Error Message 列 - 从 _result_row 中移除对应字段 - UT 中 test_no_error_fields_in_result 验证 BenchmarkResult 不包含 error 属性 --- #### Comment 8: project_root 路径层级修正 **评审意见:** 当前 project_root 计算层级少了一层,得到的是 .../cli 而不是仓库根目录;在非仓库根目录启动脚本时,tensor_cast 等包可能导入失败。建议改为基于 Path(\_\_file\_\_) 向上三级定位根目录。 **修改:** python # 修改前 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 结果: .../msmodeling/cli/ (少一层) # 修改后 project_root = str(Path(__file__).resolve().parents[2]) # 路径: run_throughput_optimizer_cases.py -> inference/ -> cli/ -> msmodeling/ (正确) 新增 from pathlib import Path,移除不再使用的 import os。 --- #### Comment 9: 配套文档和 CI 门禁 **评审意见:** CLI 脚本对外使用,建议增加配套文档指导章节,配套 CI 门禁看护。 **修改:** - 新增 docs/en/run_throughput_optimizer_cases.md 使用指南文档 - CI 门禁作为后续 follow-up:在 CI 流水线中添加 tests/test_run_throughput_optimizer_cases.py 执行步骤 --- #### Comment 10: ttft_limits/tpot_limits 多值静默忽略问题 **评审意见:** ttft_limits/tpot_limits 在 CSV 中声明为列表输入,但实际执行仅使用第一个元素,容易导致用户误以为已覆盖多组 SLO。建议在当前单值执行模型下显式限制为单值并报错。 **修改:** 新增 _single_limit 辅助函数: python def _single_limit(values: List[float], name: str) -> Optional[float]: if not values: return None if len(values) > 1: raise ValueError( f"{name} accepts at most one value, got {len(values)}: {values}" ) return values[0] 在 _build_optimizer_args 和 _summary_results_to_benchmark_result 中使用 _single_limit 替代原来的 case.ttft_limits[0] if case.ttft_limits else None。多值输入现在会抛出明确错误,引导用户拆分为多行。UT 中 TestSingleLimit 和 TestBuildOptimizerArgs 覆盖此变更。 --- #### Comment 11: 批量 flush 优化 **评审意见:** 循环中每处理一个 case 就写入 CSV 并 flush,频繁 I/O 可能影响性能;如果案例数量较多(>100),考虑批量写入或使用缓冲。 **修改:** - 新增常量 FLUSH_BATCH_SIZE = 10 - run_cases_and_save 中将每个 case 后的 f.flush() 改为每 FLUSH_BATCH_SIZE 个 case flush 一次,并在循环结束后最终 flush: python for idx, case in enumerate(cases, 1): result = run_benchmark_case(case) all_results.append(result) writer.writerow(_result_row(result)) if idx % FLUSH_BATCH_SIZE == 0: f.flush() # Final flush after all cases f.flush() 在保证每 10 个 case 即可容错恢复的前提下,减少 I/O syscall 次数。UT 中 test_batch_flush_constant 验证常量值。 --- ## 📐 Associated Test Results / 关联测试结果 **Please provide the related test results, such as test reports, etc.** **请提供相关测试结果,例如测试报告等。**   ------ ## 🌟 Use cases (Optional) / 使用案例(可选) **If this PR introduces a new feature, it is better to list some use cases here and update the documentation.** **如果此拉取请求引入了新功能,最好在此处列出一些用例并更新文档。** 见pr关联的文档 ------ ## ✅ Checklist / 检查列表 **Before PR**: - [x ] Bug fixes are fully covered by unit tests, the case that causes the bug should be added in the unit tests. / 修复的 Bug 已完全由单元测试覆盖,导致 Bug 的情况应在单元测试中添加。 - [x ] The modification is covered by complete unit tests. If not, please add more unit tests to ensure the correctness. / 此拉取请求中的修改已完全由单元测试覆盖。如果不是,请添加更多单元测试以确保正确性。 - [x ] All relevant documentation (API docs, docstrings, example tutorials) has been updated to reflect these changes. / 所有相关文档(API 文档、文档字符串、示例教程)已更新以反映这些更改。 - [x ] Please ensure code files contain no Chinese comments. / 请保证代码文件中不含中文注释。 ------ See merge request: Ascend/msmodeling!247 | 15 天前 | |
新增组合测试脚本run_throughput_optimizer_cases.py,组合多种设备 × 卡数 × 模型 × 输入/输出长度,输出总结csv,提升整体易用性 Co-authored-by: wangjin<wangjin171@huawei.com> # message auto-generated for no-merge-commit merge: !247 merge develop-w00637429 into develop 新增组合测试脚本run_throughput_optimizer_cases.py,组合多种设备 × 卡数 × 模型 × 输入/输出长度,输出总结csv,提升整体易用性 Created-by: gcw_hasgjVbP Commit-by: wangjin Merged-by: ascend-robot Description: **PR Type / PR类型** - [ x] Feature(功能新增) - [ ] Bugfix(Bug 修复) - [ x] Docs(文档更新) - [ ] CI/CD(持续集成/持续部署) - [ ] Refactor(代码重构) - [ ] Perf(性能优化) - [ x] Test-Cases(测试用例更新) - [ ] Other(其他) ## 🔍 Motivation / 变更动机 ------ 紧接着这个pull request:https://gitcode.com/Ascend/msmodeling/pull/106 ## 📝 Modification / 修改内容 ### PR Review Comments & Changes ### Overview PR 功能:新增 run_throughput_optimizer_cases.py,通过 CSV 驱动多组 benchmark case,顺序调用 throughput_optimizer 的 ParallelRunner 运行,结果写入同一张 CSV。 本文档记录收到的评审意见及对应修改说明。 --- #### Comment 1: CLI 文件名重命名 **评审意见:** CLI 名字可以换一下,例如 run_throughput_optimizer_cases,以前老的 benchmark CLI 已经被 throughput_optimizer 取代了,可以将文件名替换成 run_throughput_optimizer_cases.py。 **修改:** - 文件重命名:cli/inference/run_benchmark_cases.py → cli/inference/run_throughput_optimizer_cases.py - 模块 docstring 中所有 run_benchmark_cases 引用更新为 run_throughput_optimizer_cases - Usage 示例中 python -m cli.inference.run_benchmark_cases → python -m cli.inference.run_throughput_optimizer_cases --- #### Comment 2: 添加 UT **评审意见:** Please add UT. **修改:** 新增 tests/test_run_throughput_optimizer_cases.py,包含 15 个测试类,共 71 个测试用例: | 测试类 | 覆盖范围 | |--------|---------| | TestParseListFloat | 分号分隔浮点数解析、空值、None、空白 | | TestParseListInt | 整数列表解析、空值返回 None | | TestParseBool | true/1/yes → True,其他 → False | | TestParseOptionalBool | 空值 → None,有效值解析,无效值 → None | | TestParseMode | agg/disagg/空值/无效值 | | TestParseParallel | tp/pp/dp 解析(紧凑格式 + disagg 冗长格式)、无效格式 | | TestSingleLimit | 空列表 → None、单值返回、多值抛 ValueError | | TestLoadCasesFromCsv | CSV 加载、默认值、无效量化报错、空行跳过、缺少 case_name 自动命名 | | TestWriteTemplateCsv | 模板 header 正确、示例行存在、tpot 默认值 50ms | | TestBuildOptimizerArgs | agg/disagg 模式、_single_limit 应用、多值 ttft/tpot 报错 | | TestBenchmarkResult | CSV header 与行长度一致、CSV 读写 roundtrip、无 error 属性 | | TestParseArgs | argparse 各参数解析、默认值、--help 退出 | | TestSaveResultsToCsv | 结果正确写入、FLUSH_BATCH_SIZE 常量验证 | | TestDefaultTpotLimitMs | 默认值为 50.0ms | | TestIntegrationExampleCase | 基于 example_cases.csv 输入和 result.csv 输出的端到端集成测试 | TestIntegrationExampleCase 包含 5 个测试用例: - test_csv_load_parses_example_case:验证 CSV 行解析为 BenchmarkCase 的所有字段 - test_build_optimizer_args_from_example_case:验证 BenchmarkCase → Namespace 转换及 ParallelRunner 所需默认属性 - test_result_row_from_example_output:验证 BenchmarkResult → _result_row 输出与实际 result.csv 一致 - test_full_csv_roundtrip:端到端 CSV 写入 → 加载 → 构造结果 → 保存 → 读回验证 - test_parse_parallel_disagg_output:验证 disagg 模式 "TP=1 | PP=1 | DP=64" 格式解析 --- #### Comment 3: tpot_limits 单位确认 **评审意见:** throughput_optimizer 里 tpot_limits 单位应该是 ms,请确认单位是否有误。 **修改:** 确认 throughput_optimizer 中 ttft_limits 和 tpot_limits 均为毫秒(ms)单位(parallel_runner.py 日志 "Run Aggregation with ttft %r ms, tpot %r ms.")。原代码默认值 0.05 为秒,与链路 ms 语义不一致,已在 Comment 5 中修复。 --- #### Comment 4: 使用 argparse 模块实现参数解析 **评审意见:** 建议使用 argparse 模块实现参数解析,增加可维护性和扩展性。 **修改:** 将 _parse_args() 从手动 while 循环解析替换为 argparse.ArgumentParser: python def _parse_args(): parser = argparse.ArgumentParser( prog="run_throughput_optimizer_cases", description="...", ) parser.add_argument("--input-csv", ...) parser.add_argument("--write-template", ...) parser.add_argument("--output-csv", ...) parser.add_argument("--test-conversion", action="store_true", ...) args = parser.parse_args() return args.input_csv, args.write_template, args.output_csv, args.test_conversion 返回类型(4-tuple)不变,--num-workers 参数已移除(当前仅支持顺序执行,无意义参数不应保留),__main__ 块相应更新。新增 --help 自动生成帮助信息。 --- #### Comment 5: tpot_limits 默认值修正 **评审意见:** tpot_limits 为空时默认值写成 0.05,而链路按 ms 语义处理,会把默认 SLO 变成极端严格值(0.05ms),应统一成显式毫秒常量并使用 50.0。 **修改:** - 新增模块级常量 DEFAULT_TPOT_LIMIT_MS = 50.0 - load_cases_from_csv 中 tpot_limits = [0.05] → tpot_limits = [DEFAULT_TPOT_LIMIT_MS] - run_example 中 tpot_limits=[50] → tpot_limits=[DEFAULT_TPOT_LIMIT_MS] - _test_result_conversion 中 tpot_limits=[0.05] → tpot_limits=[DEFAULT_TPOT_LIMIT_MS] - _test_result_conversion 中 mock 数据 tpot=500 → tpot=40(原值 500 > 0.05 导致 SLO 过滤始终失败,测试实际不校验通过;改为 40 ≤ 50ms 使测试逻辑正确) - write_template_csv 中示例行 tpot_limits 使用 str(int(DEFAULT_TPOT_LIMIT_MS)) --- #### Comment 6: 量化 Action 解析失败时应报错而非静默降级 **评审意见:** quantize_linear_action / quantize_attention_action 解析失败时被静默降级为 None,后续回退默认量化配置,导致用户配置错误被"吞掉"。建议在配置非法时直接报错并给出可选值。 **修改:** python # 修改前 try: linear_action = QuantizeLinearAction(q_linear) if q_linear else None except ValueError: linear_action = None # 静默降级 # 修改后 if q_linear: try: linear_action = QuantizeLinearAction(q_linear) except ValueError: valid = ", ".join(e.value for e in QuantizeLinearAction) raise ValueError( f"Row case_name={case_name}: invalid quantize_linear_action '{q_linear}'. " f"Valid options: {valid}" ) from None else: linear_action = None quantize_attention_action 同理处理。UT 中 test_invalid_quantize_linear_raises、test_invalid_quantize_attention_raises、test_error_message_lists_valid_quantize_options 覆盖此变更。 --- #### Comment 7: BenchmarkResult 移除 error 字段 **评审意见:** BenchmarkResult 中不需要带有 best_decode_error 和 best_prefill_error。代码保持简洁高效。 **修改:** - 从 BenchmarkResult dataclass 中移除 best_decode_error 和 best_prefill_error 字段 - 从 _csv_header_and_ref_row 的输出 header 中移除 Decode_Error Message 和 Prefill_Error Message 列 - 从 _result_row 中移除对应字段 - UT 中 test_no_error_fields_in_result 验证 BenchmarkResult 不包含 error 属性 --- #### Comment 8: project_root 路径层级修正 **评审意见:** 当前 project_root 计算层级少了一层,得到的是 .../cli 而不是仓库根目录;在非仓库根目录启动脚本时,tensor_cast 等包可能导入失败。建议改为基于 Path(\_\_file\_\_) 向上三级定位根目录。 **修改:** python # 修改前 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 结果: .../msmodeling/cli/ (少一层) # 修改后 project_root = str(Path(__file__).resolve().parents[2]) # 路径: run_throughput_optimizer_cases.py -> inference/ -> cli/ -> msmodeling/ (正确) 新增 from pathlib import Path,移除不再使用的 import os。 --- #### Comment 9: 配套文档和 CI 门禁 **评审意见:** CLI 脚本对外使用,建议增加配套文档指导章节,配套 CI 门禁看护。 **修改:** - 新增 docs/en/run_throughput_optimizer_cases.md 使用指南文档 - CI 门禁作为后续 follow-up:在 CI 流水线中添加 tests/test_run_throughput_optimizer_cases.py 执行步骤 --- #### Comment 10: ttft_limits/tpot_limits 多值静默忽略问题 **评审意见:** ttft_limits/tpot_limits 在 CSV 中声明为列表输入,但实际执行仅使用第一个元素,容易导致用户误以为已覆盖多组 SLO。建议在当前单值执行模型下显式限制为单值并报错。 **修改:** 新增 _single_limit 辅助函数: python def _single_limit(values: List[float], name: str) -> Optional[float]: if not values: return None if len(values) > 1: raise ValueError( f"{name} accepts at most one value, got {len(values)}: {values}" ) return values[0] 在 _build_optimizer_args 和 _summary_results_to_benchmark_result 中使用 _single_limit 替代原来的 case.ttft_limits[0] if case.ttft_limits else None。多值输入现在会抛出明确错误,引导用户拆分为多行。UT 中 TestSingleLimit 和 TestBuildOptimizerArgs 覆盖此变更。 --- #### Comment 11: 批量 flush 优化 **评审意见:** 循环中每处理一个 case 就写入 CSV 并 flush,频繁 I/O 可能影响性能;如果案例数量较多(>100),考虑批量写入或使用缓冲。 **修改:** - 新增常量 FLUSH_BATCH_SIZE = 10 - run_cases_and_save 中将每个 case 后的 f.flush() 改为每 FLUSH_BATCH_SIZE 个 case flush 一次,并在循环结束后最终 flush: python for idx, case in enumerate(cases, 1): result = run_benchmark_case(case) all_results.append(result) writer.writerow(_result_row(result)) if idx % FLUSH_BATCH_SIZE == 0: f.flush() # Final flush after all cases f.flush() 在保证每 10 个 case 即可容错恢复的前提下,减少 I/O syscall 次数。UT 中 test_batch_flush_constant 验证常量值。 --- ## 📐 Associated Test Results / 关联测试结果 **Please provide the related test results, such as test reports, etc.** **请提供相关测试结果,例如测试报告等。**   ------ ## 🌟 Use cases (Optional) / 使用案例(可选) **If this PR introduces a new feature, it is better to list some use cases here and update the documentation.** **如果此拉取请求引入了新功能,最好在此处列出一些用例并更新文档。** 见pr关联的文档 ------ ## ✅ Checklist / 检查列表 **Before PR**: - [x ] Bug fixes are fully covered by unit tests, the case that causes the bug should be added in the unit tests. / 修复的 Bug 已完全由单元测试覆盖,导致 Bug 的情况应在单元测试中添加。 - [x ] The modification is covered by complete unit tests. If not, please add more unit tests to ensure the correctness. / 此拉取请求中的修改已完全由单元测试覆盖。如果不是,请添加更多单元测试以确保正确性。 - [x ] All relevant documentation (API docs, docstrings, example tutorials) has been updated to reflect these changes. / 所有相关文档(API 文档、文档字符串、示例教程)已更新以反映这些更改。 - [x ] Please ensure code files contain no Chinese comments. / 请保证代码文件中不含中文注释。 ------ See merge request: Ascend/msmodeling!247 | 15 天前 | |
【重构】适配安全精简+删除历史坏味道代码 Co-authored-by: tt0cool<xujintao8@h-partners.com> # message auto-generated for no-merge-commit merge: !302 merge develop into develop 【重构】适配安全精简+删除历史坏味道代码 Created-by: tt0cool Commit-by: tt0cool Merged-by: ascend-robot Description: # PR Template Thanks for your contribution; we appreciate it a lot. The following instructions will make your pull request healthier and help you get feedback more easily. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers. 感谢您的贡献,我们非常重视。以下说明将使您的拉取请求更健康,更易于获得反馈。如果您不理解某些项目,请不要担心,只需提交拉取请求并从维护人员那里寻求帮助即可。 **PR Type / PR类型** - [ ] Feature(功能新增) - [ ] Bugfix(Bug 修复) - [ ] Docs(文档更新) - [ ] CI/CD(持续集成/持续部署) - [ ] Refactor(代码重构) - [ ] Perf(性能优化) - [ ] Test-Cases(测试用例更新) - [ ] Other(其他) ## 🔍 Motivation / 变更动机 **Please describe the motivation of this PR and the goal you want to achieve through this PR.** **请描述您的拉取请求的动机和您希望通过此拉取请求实现的目标。** ------ ## 📝 Modification / 修改内容 **Please briefly describe what modification is made in this PR.** **请简要描述此拉取请求中进行的修改。** ------ ## 📐 Associated Test Results / 关联测试结果 **Please provide the related test results, such as test reports, etc.** **请提供相关测试结果,例如测试报告等。** ------ ## 🌟 Use cases (Optional) / 使用案例(可选) **If this PR introduces a new feature, it is better to list some use cases here and update the documentation.** **如果此拉取请求引入了新功能,最好在此处列出一些用例并更新文档。** ------ ## ✅ Checklist / 检查列表 **Before PR**: - [ ] Bug fixes are fully covered by unit tests, the case that causes the bug should be added in the unit tests. / 修复的 Bug 已完全由单元测试覆盖,导致 Bug 的情况应在单元测试中添加。 - [ ] The modification is covered by complete unit tests. If not, please add more unit tests to ensure the correctness. / 此拉取请求中的修改已完全由单元测试覆盖。如果不是,请添加更多单元测试以确保正确性。 - [ ] All relevant documentation (API docs, docstrings, example tutorials) has been updated to reflect these changes. / 所有相关文档(API 文档、文档字符串、示例教程)已更新以反映这些更改。 - [ ] Please ensure code files contain no Chinese comments. / 请保证代码文件中不含中文注释。 ------ See merge request: Ascend/msmodeling!302 | 18 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 15 天前 | ||
| 15 天前 | ||
| 18 天前 |