已合并
【PR】: 新增gather+add融合用例 #1529
zzq创建于 7月28日
【PR】: 新增gather+add融合用例 #1529
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zzq 的贡献)atomgit-bot
7月28日 评论:
7月28日 评论:
变更摘要
本次 PR 新增了一个 gather + add 算子融合的示例用例,用于验证昇腾 NPU 上 torch.gather 与 torch.add 的自动融合能力。该用例通过 torch.compile 结合 ascendc 后端运行模型,并集成 NPU profiler 进行性能采集。
主要改动
- 新增融合示例文件
af_gather_add.py:在autofuse/examples/pytorch/af_gather/目录下新增完整的 gather+add 融合示例,包含模型定义、torch.compile配置和 profiler 采集流程。 - 定义融合模型
MyModel:通过nn.Module封装torch.add(torch.gather(x, 1, indices), y)组合,作为自动融合的目标计算图。 - 启用 NPU 自动融合后端:使用
torch.compile并指定options={"npu_backend": "ascendc"},搭配dynamic=False和fullgraph=True以触发静态全图编译与算子融合。 - 集成 NPU Profiler 性能采集:通过
torch_npu.profiler.profile结合ExperimentalConfig配置,对 100 步推理进行 PipeUtilization 等指标采集,并将 trace 输出至./profiling目录。


不准确?
atomgit-bot
7月28日 评论:
7月28日 评论:
代码审查
我已经完成了对所有 5 个变更文件的逐一审查。以下是我的完整分析:
逐文件审查结果
1. autofuse/examples/pytorch/af_gather/af_gather_add.py(新增)
对照已有示例 af_add_ge.py 和 af_mul_reducesum.py 逐一核查:
- 版权头:与现有文件格式一致(© 2026 为项目统一写法)。✓
- 导入:
torch、torch_npu、torch.nn as nn三者均在代码中被使用(nn.Module用于模型定义)。✓ - 张量形状与算子语义:
x:(128, 50),indices:(128, 25),y:(128, 25)torch.gather(x, 1, indices)沿 dim=1 按indices取值,输出形状 (128, 25) ✓indices值域 0–49,x.size(1)=50,不越界,且显式指定dtype=torch.int64满足gather要求 ✓torch.add((128,25), (128,25))逐元素相加,形状匹配 ✓
- Profiling 配置:与现有示例完全一致。✓
- 执行循环:100 步推理,返回值
result未使用——与现有两个示例的模式一致(profiling 示例中无需消费返回值)。✓ - 无异常吞噬、无可变默认参数、无闭包捕获循环变量、无
eval/exec、无硬编码密钥、无路径遍历等安全问题。 ✓
结论:无问题。
2. autofuse/examples/pytorch/af_gather/README.md(新增)
- 与已有
af_pointwise/README.md、af_reduce/README.md结构一致。✓ - 执行命令使用
python3(与其他子 README 一致)。✓ - 预期结果描述准确:说明了融合成功(
autofused_kernel)和回退(独立GatherElementsV2)两种情况。✓ - 无危险操作指令、无安全风险。✓
结论:无问题。
3. autofuse/examples/pytorch/af_gather/README_en.md(新增)
- 英文版与中文版内容对应,与已有英文子 README 格式一致。✓
- 无问题。✓
结论:无问题。
4. autofuse/examples/pytorch/README.md(变更)
- 用例数量更新:"两个"→"三个" ✓
- 新增用例描述 ✓
- 目录树结构调整:
af_reduce从末项变为中间项(└──→├──),af_gather作为新末项(└──),树形正确 ✓ - 执行指令新增
gather + add部分 ✓ - "三个用例均开启 NPU Profiling" 语句更新 ✓
结论:无问题。
5. autofuse/examples/pytorch/README_en.md(变更)
- 与中文 README 变更完全对应。✓
- 目录树、用例描述、执行指令均正确更新。✓
结论:无问题。
审查总结
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 0 |
整体风险评估:此变更不引入任何已知问题。 新增的 gather + add 融合示例严格遵循项目现有的代码模式(模型结构、profiling 配置、目录组织、README 格式均与已有示例一致),张量形状与算子语义正确,文档描述准确,无安全风险,无明显缺陷。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


不准确?
7月28日 添加了label:cann-cla/yes
此处折叠了55条消息 查看更多
7月28日 添加了label:lgtm
zhanj
7月28日 评论:
7月28日 评论:
/approve


7月28日 添加了label:approved
7月28日 合入了pull request
Pull Request
描述
新增gather+add融合用例。
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.在CANNLab平台上执行通过
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。