已合并
feat: 新增轻量 Qwen3-1.7B SFT AutoFuse Quickstart 示例(#214) #1396
feat: 新增轻量 Qwen3-1.7B SFT AutoFuse Quickstart 示例(#214) #1396
已合并
Jett_Woo创建于 7月21日
Jett_Woo成员
7月21日

描述

新增轻量 Qwen3-1.7B SFT AutoFuse Quickstart 示例,提供从零到报告的单线流程,帮助开发者在两卡 Ascend NPU 上快速验证 AF OFF/ON 方向性收益。

与现有 af_sft_benchmark 的区别:

  • 轻量 Host 模式,不依赖 Docker 编排
  • README 驱动的单线流程,命令不重复
  • 不需要 triton_ascend,实测仅安装 triton==3.7.0 即可运行 AF
  • 支持 Hugging Face 镜像回退
  • 不附带测试目录,验证依赖真实 E2E

变更类型

关联的Issue

#214

如何测试

  1. 在两卡 Ascend NPU(CANN >= 20260715)上执行 bash check_env.sh --cann-root $CANN_ROOT --devices 0,1 --python python3.12
  2. 按 README 安装依赖、clone 固定源码、下载模型和数据
  3. 执行 bash run_compare.sh 完成四次 AF OFF/ON 训练和 profiling
  4. 检查 results/*/report.md 中训练结论和 profiling 状态

实测结果:

  • 四次运行退出码均为 0
  • 训练结论:AF_ON_FASTER
  • Profiling 状态:COMPARABLE
  • 训练收益:16.17%

核对清单

其他信息

  • 设计文档详见关联 Issue #214
  • PR 仅包含 quickstart 四个文件:.gitignore、README.md、check_env.sh、run_compare.sh
  • 不包含 tests 目录、venv、模型、数据或实验结果
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 Jett_Woo 的贡献)
JJett_Woo成员
7月21日 创建了 pull request,commit a76a2e94
atomgit-bot
atomgit-bot
7月21日 评论:

变更摘要

本 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,并按需 clone torchtitan-npu 和 torchair(固定 commit 3c9418c2),下载 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 结构。

likedislike
不准确?
atomgit-bot
atomgit-bot
7月21日 评论:

代码审查

我已经完成了对所有 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

💬 仅评论

likedislike
不准确?
CANN-robot
CANN-robot成员7月21日进行代码检视1
.gitignore
已过期
CANN-robot
CANN-robot7月21日评论:

【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
likedislike
CANN-robotCANN-robot成员
7月21日 添加了label:stat/needs-squash
此处折叠了94条消息 查看更多
wangxiaotian995成员
7月29日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月29日 添加了label:lgtm
zhanj
zhanj成员
7月29日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月29日 添加了label:approved
CANN-robotCANN-robot成员
7月29日 合入了pull request