Pull Request已成功合入, 合并人@CANN-robot
(感谢 Jett_Woo 的贡献)变更摘要
本 PR 在 autofuse/examples/af_sft_benchmark/ 下新增了一套完整的 Qwen3-1.7B SFT AutoFuse 融合收益 benchmark 示例,共 5 个文件(包括 1 个模板文件),总计 +1883 行。该示例实现了从环境自动检测与配置、依赖下载、权重/数据集获取,到 AF ON/OFF 双侧训练、profiling 采集、融合 kernel 分类解析及最终 Markdown 实验报告生成的端到端自动化流程。所有改动均为新增,不涉及 AutoFuse 核心逻辑或外部组件源码的修改。
主要改动
-
一键环境准备 (
setup.sh): 新增 538 行的 8 步环境自动配置脚本,自动检测 NPU 硬件(npu-smi)、CANN runtime/opp 路径(含torch_npu兼容性验证)、Python venv,并按需 clonetorchtitan-npu和torchair(固定 commit3c9418c2),下载 Qwen3-1.7B 权重与 Wordle 数据集,最终生成env.sh供后续脚本使用。 -
多模式训练与 Profiling 编排 (
run_benchmark.sh): 新增 182 行的执行脚本,支持af_off、af_on、profiling、profiling_off、debug和all六种运行模式;all模式自动串联全部子模式并调用generate_report.sh生成最终报告,训练参数通过--steps、--global-batch-size可配置。 -
Profiling 数据解析与融合 kernel 分类 (
parse_profiling.py): 新增 454 行的 Python 解析工具,读取ASCEND_PROFILER_OUTPUT下的op_statistic.csv和step_trace_time.csv,支持单目录解析与 AF OFF/ON 对比模式;对autofused前缀的融合 kernel 按功能归类(RMSNorm forward/backward、RoPE、residual/elementwise、格式转换),输出 step 级对比、算子总览、Top N 算子及融合收益来源分析。 -
实验报告自动生成 (
generate_report.sh): 新增 400 行的报告生成脚本,从训练日志中解析 step 级指标(tps、loss、mfu、显存等),结合 profiling 数据调用parse_profiling.py输出融合结构分析,生成包含实验背景、环境、配置、性能对比、正确性验证、逐 step 数据和结论的results.md报告。 -
环境配置模板 (
env.sh.template): 新增 37 行的参考模板,定义CANN_RUNTIME_PATH、ASCEND_OPP_PATH、PYTHON_VENV、TORCHTITAN_DIR、NGPU和LOG_RANK等关键环境变量格式,供用户了解setup.sh生成的env.sh结构。


代码审查
我已经完成了对所有 10 个文件的审查。以下是最终的审查汇总。
审查总结
| 文件 | 审查结果 |
|---|---|
.gitignore |
无问题 |
autofuse/examples/README.md |
无问题 |
autofuse/examples/README_en.md |
无问题 |
autofuse/examples/af_sft_benchmark/README.md |
无问题 |
autofuse/examples/af_sft_benchmark/env.sh.template |
无问题 |
autofuse/examples/af_sft_benchmark/results_template.md |
无问题 |
autofuse/examples/af_sft_benchmark/run_benchmark.sh |
无问题 |
autofuse/examples/af_sft_benchmark/parse_profiling.py |
无问题 |
autofuse/examples/af_sft_benchmark/generate_report.sh |
2 个问题(P2 ×1, P3 ×1) |
autofuse/examples/af_sft_benchmark/setup.sh |
1 个问题(P3 ×1) |
共发现 3 个问题:P2 = 1, P3 = 2。
- P2:
generate_report.sh内嵌 Python 通过 stdin 执行,__file__不可靠,导致parse_profiling.py定位失败,报告缺失融合结构分析章节。 - P3:
generate_report.sh第 267 行 tflops 变化率计算未做除零保护(与同类计算的防护模式不一致)。 - P3:
setup.sh第 258 行验证torch_npu导入时误用系统python3而非 venv 内的 Python。
整体风险评估:低。 该 PR 是新增的 benchmark 示例代码,不修改 AutoFuse 核心逻辑。三个问题均为工具/脚本层面的防御性缺陷,在实际正常使用场景中触发概率较低,不影响训练正确性或数据安全。建议在上线前修复 P2 问题以避免用户在非标准目录下运行时报告不完整。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 2 |
💬 仅评论


【openlibing.ci】检测到当前PR中存在代码检查告警抑制 1 处,详情见下表,请Committer检视合理性。 / Detected 1 code check alert suppression(s) in this PR, see table below. Committers please review.
| 文件路径/File | 行号/Line | 代码片段/Snippet | 工具/Tool |
|---|---|---|---|
| autofuse/examples/af_sft_benchmark/ setup.sh |
128 | # shellcheck disable=SC1090 |
ShellCheck |


/lgtm


/approve


描述
新增轻量 Qwen3-1.7B SFT AutoFuse Quickstart 示例,提供从零到报告的单线流程,帮助开发者在两卡 Ascend NPU 上快速验证 AF OFF/ON 方向性收益。
与现有
af_sft_benchmark的区别:triton_ascend,实测仅安装triton==3.7.0即可运行 AF变更类型
关联的Issue
#214
如何测试
bash check_env.sh --cann-root $CANN_ROOT --devices 0,1 --python python3.12bash run_compare.sh完成四次 AF OFF/ON 训练和 profilingresults/*/report.md中训练结论和 profiling 状态实测结果:
核对清单
其他信息
.gitignore、README.md、check_env.sh、run_compare.sh