已合并
feat(pypto_pro):support GM as cross core buffer #6975
huanyongben创建于 17 天前
feat(pypto_pro):support GM as cross core buffer #6975
已合并
huanyongben创建于 17 天前
huanyongben
17 天前

1、支持GM作为跨核buffer
2、修复部分框架bug

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 huanyongben 的贡献)
Hhuanyongben
17 天前 创建了 pull request,commit 1c26d3cb
atomgit-bot
atomgit-bot
17 天前 评论:

变更摘要

本 PR 为 pypto_pro 的自动流水线变换引入「GM 作为跨核缓冲区」能力:原先跨核 handover 只能通过 pl.make_tile_group(...) 声明的 UB/L1 缓冲区,现在 pl.make_tensor(...) 支持新增的 depth、fwd_ids、bwd_ids 关键字,将 GM(DDR)上的张量视图注册为跨核通道。为此扩展了 python/pypto_pro/language/_api.py、ir/op/ptr_ops.py 的 make_tensor 签名,把 _cross_core_scanner 中的 TileGroupDecl/scan_tile_group_decls 泛化为 BufferDecl/scan_buffer_decls(同时识别 tile group 与 GM 视图),在 _transformer 中新增 _select_gm_slots 等逻辑为每个 stage 选择 GM 槽位,并让 probe_kernel_facts 额外返回参数类型与结构体字段类型以支撑 ctx 字段初始化。同时本 PR 大量将原本内嵌行号的报错信息改为携带 span/stmt_header 的定位方式,并新增/重命名了若干 ST 用例。

主要改动

  • make_tensor 接口扩展为支持跨核缓冲声明:python/pypto_pro/language/_api.py 与 python/pypto_pro/ir/op/ptr_ops.py 的 make_tensor 新增仅关键字参数 depth(槽位数)、fwd_ids(生产者到消费者的跨核事件 ID)与 bwd_ids(反方向事件 ID),这些参数被标注为「仅供自动流水线变换读取,不属于 IR」。

  • 缓冲区声明扫描泛化并新增 GM 校验:_cross_core_scanner.py 将 TileGroupDecl 改名为 BufferDecl、scan_tile_group_decls 改名为 scan_buffer_decls,新增 _is_gm_buffer_decl/_gm_buffer_decl 识别携带 fwd_ids/bwd_ids 的 pl.make_tensor(memory 记为 MemorySpace.DDR),并新增 _validate_gm_layout 校验 depth 为正整数、槽位大小可由 shape/stride 推出。

  • 流水线变换生成 GM 槽位选择代码:_transformer.py 新增 _gm_buffers、_gm_slot_var、_select_gm_slots、_build_gm_slot_assign,为 stage 调用中命名多槽 GM 缓冲区的实参插入 _pl_gm_<name> = pl.make_tensor(pl.addptr(pl.make_ptr(<name>), 槽索引 % depth * 槽大小), ...),并把 task_id 自增语句移到尾部用户语句之前。

  • probe 与 ctx 字段初始化携带类型信息:probe_kernel_facts 返回值由 (if_const_map, var_types) 扩展为四元组,新增 arg_types(按调用参数位置索引的解析类型)与 field_types(结构体字段类型);_analyzer.py 新增 _scalar_field_init/_struct_field_init 依据 (类型名, 标量 dtype) 生成 ctx 字段初值,PipelineInfo 增加 arg_types、field_types、struct_defs、scalar_arg_nodes 字段。

  • 错误定位由行号文本改为 span/stmt_header:_astutil.py 新增 stmt_header、eval_const、gm_slot_size、_list_elts;_cross_core_scanner.py、_analyzer.py、_validate.py、_sync_graph.py、_transformer.py 中大量原本在消息里拼接 line {node.lineno} 的报错改为传入 span=span_of(...),并通过 current_span 让 stage 体内的报错定位到调用点。

  • 运行时 dump 与重解析衔接:runtime/jit.py 适配 probe_kernel_facts 四元组返回与 build_generated_file_source 的新返回值(同时返回重解析后的 func_def 并写回 kernel_def._func_def),_dump.py 在生成 pipeline_generated.py 后用 ast.parse 重解析并定位对应 FunctionDef。

likedislike
不准确?
atomgit-bot
atomgit-bot
17 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
17 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
17 天前 评论:

CLA Signature Pass

huanyongben, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robot
CANN-robot成员
17 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
docs ✅ lyz0328, wangbing110, gaoxiang618 (3/2) ✅ lyz0328 (1/1)
python/pypto_pro ✅ gaoxiang618, wangbing110 (2/2) ✅ wangbing110, gaoxiang618 (2/1)
repo-cann/pypto ✅ wangbing110, gaoxiang618 (2/2) ✅ wangbing110, gaoxiang618 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

huanyongben, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
17 天前 将xinweiliu,lyz0328,cam_bxh,dai-zhentao,lululu40888,shi-dingkun,gguuaanngg,codehjp423,gaoxiang618,wangzheng97,DCGDDD,syfeng,jason_yuan_ye,foundea,ym-HW,hw_zhangzhiqi,yinjie27_,congqiannan,zhangyuebing,tsungl4,gaoxingwang,zhiweiyuan,caodongdong,make_pto,zhoubotcam,linjiashu,wangbing110,WenboCodes设为评审人
此处折叠了6条事件消息 查看更多
Hhuanyongben
17 天前 关联了issue:[Documentation|文档反馈]: pypto_pro.language.jit缺少接口文档
huanyongben
17 天前 评论:

compile

likedislike
Hhuanyongben
17 天前 预合并成功(commit_id: 58afcd8bfa18921f1a90ce3f0080b7958d6407d2)
CANN-robot
CANN-robot成员
17 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
17 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
17 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
17 天前 添加了label:ci-pipeline-passed
huanyongben
15 天前 评论:

compile

likedislike
Hhuanyongben
15 天前 预合并成功(commit_id: d9161b1def7fa57b733e638fa31350778f5d78ac)
CANN-robot
CANN-robot成员
15 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
15 天前 删除了label:ci-pipeline-passed
CANN-robotCANN-robot成员
15 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
15 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
15 天前 添加了label:ci-pipeline-failed
CANN-robot
CANN-robot成员
15 天前 评论:

流水线分析报告 — pypto run#5919

流水线: https://gitcode.com/cann/pypto/actions/runs/b68bc956814042f5b12f2f35247473f1 | PR#6975 | 2026-10-19 09:41:26 ~ 09:43:12 | 失败 Job 4 个

定界结论: 工程问题 / 依赖包下载失败
  • 失败类型: 工程问题(CI 依赖服务侧,非 PR 代码问题)
  • 根因: 4 个编译 Job 执行 compile.sh 时,wget 从 OBS 下载依赖包 cann-pto-isa daily 版本(pto-isa/daily/cann-pto-isa_linux-{x86_64,aarch64}.run)均返回 403 Forbidden,脚本以退出码 8 终止。经复核,该 URL 当前仍返回 403,为持续性故障(daily 构建产物缺失或桶策略/权限变更),非瞬时网络抖动。
  • 影响 Job: Compile_Ascend_X86、Compile_Ascend_X86_ubuntu24、Compile_Ascend_ARM、Compile_Ascend_ARM_ubuntu24(4 个 Job 同因,均在编译依赖准备阶段失败,未进入 PR 代码编译)
  • 排除项: PR#6975 变更 22 个文件均为 docs / python 源码 / 测试,不涉及 compile.sh 与 CI 配置,与本次失败无关;pip 包安装、gcc 切换等前置步骤均正常。
  • 处置: ① 该失败与 PR 内容无关,提交者无需修改代码;请 CI/依赖维护者检查 ascend-ci 桶 pto-isa/daily/ 路径下 daily 构建产物的发布状态(缺失或权限变更)并修复。② 依赖恢复后重新触发流水线即可。

失败根因分析

根因 #1: 工程问题 / 依赖包下载失败 — cann-pto-isa daily 依赖包 OBS 下载 403
  • 判据: wget 下载 OBS 依赖包返回 403 Forbidden,compile.sh 退出码 8
  • 定位步骤: 3_compile_acc.log(4 个 Job 同一步骤、同一错误模式)
  • 影响 Job: Compile_Ascend_X86、Compile_Ascend_X86_ubuntu24、Compile_Ascend_ARM、Compile_Ascend_ARM_ubuntu24
  • 根因证据(日志原文):
--2026-10-19 09:42:24--  https://ascend-ci.obs.cn-north-4.myhuaweicloud.com/pto-isa/daily/cann-pto-isa_linux-aarch64.run
Resolving ascend-ci.obs.cn-north-4.myhuaweicloud.com ... connected.
HTTP request sent, awaiting response...
403 Forbidden
2026-10-19 09:42:24 ERROR 403: Forbidden.
[CloudCache] 2026/10/19 09:42:24 build failed with exit code 8: build failed, cmd: [bash -c bash compile.sh] err: exit status 8
::error::构建命令执行失败,退出码: 8
  • 补充论证: ① x86_64 与 aarch64 两个架构的 URL 同期均 403,排除单文件误删,指向 pto-isa/daily/ 目录级缺失或权限变更;② 会话内 curl 复测仍返回 403,确认持续性故障,重试无法恢复;③ 失败发生在 PR 代码编译之前,与 PR 变更内容无关。
结构化定界摘要
[{"repo": "pypto", "run_number": 5919, "Failed_Type": "工程问题",
  "Failed_Sub_Type": "依赖包下载失败",
  "Failed_Reason": "compile.sh 从 OBS 下载 cann-pto-isa daily 依赖包(pto-isa/daily/cann-pto-isa_linux-{x86_64,aarch64}.run)返回 403 Forbidden,退出码 8;URL 复测仍 403,属 daily 构建产物缺失或桶权限变更,与 PR 代码无关",
  "evidence": "2026-10-19 09:42:24 ERROR 403: Forbidden.",
  "suggestion": "CI/依赖维护者检查 ascend-ci 桶 pto-isa/daily/ 发布状态并修复,依赖恢复后重新触发流水线",
  "jobs": "Compile_Ascend_X86,Compile_Ascend_X86_ubuntu24,Compile_Ascend_ARM,Compile_Ascend_ARM_ubuntu24"}]

由门禁失败定界分析自动生成 | repo: pypto | run: b68bc956814042f5b12f2f35247473f1 | PR#6975

likedislike
huanyongben
15 天前 评论:

compile

likedislike
Hhuanyongben
15 天前 预合并成功(commit_id: 8e14eb957dd88f218a9eb79123fb6f33eb227dcf)
CANN-robot
CANN-robot成员
15 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
15 天前 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
15 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
15 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
15 天前 添加了label:ci-pipeline-passed
poorwillpoorwill成员
15 天前 通过审查
poorwillpoorwill成员
15 天前 通过了评审
poorwill
poorwill成员
15 天前 评论:

/approve
/lgtm

likedislike
Hhuanyongben
15 天前 修改了pull request 的描述
gaoxiang618成员
15 天前 评论:

/approve
/lgtm

likedislike
CANN-robotCANN-robot成员
15 天前 添加了label:lgtm
lyz0328
lyz0328成员15 天前进行代码检视1
docs/zh/guide/programming_guide/pro/advanced_programming/auto_parallel_pipeline.md
@@ -51,2 +50,3 @@
50+`mutex_ids`与`fwd_ids`、`bwd_ids`作用于不同范围:`mutex_ids`用于管理核内Tile的流水同步和地址复用,仅UB和L1需要配置;`fwd_ids`、`bwd_ids`用于Cube与Vector之间的数据交接。声明了`fwd_ids`或`bwd_ids`,且该Buffer分别被Cube stage和Vector stage使用时,框架才将其识别为跨核共享Buffer,并插入相应的核间同步。
5151 
52-其中`fwd_ids`为正向同步(生产者写完通知消费者),生产者stage之后插入set、消费者stage之前插入wait;`bwd_ids`为反向同步(消费者用完通知生产者可以覆写),消费者stage之后插入set、生产者stage之前插入wait。只配置`fwd_ids`时,仅保证消费者读到的是生产者写完的数据,不保证生产者下一轮覆写时消费者已经读完。每次迭代使用的Tile按Tile数轮转;核间同步id则按`ids[迭代序号 % len(ids)]`轮转,因此二者的轮转周期可以不同。
52+`fwd_ids`和`bwd_ids`的数量不要求始终与slot数一致:可以为每个slot分别配置一个id,也可以只配置一个由所有slot共用的id。共用一个核间同步id会使不同slot之间的交接串行化,能够减少同步id占用,但可能降低流水并行度。
lyz0328
lyz032815 天前评论:

slot概念文中没有出现,是否是pypto领域专用术语,是否需要解释

likedislike
lyz0328lyz0328成员
15 天前 解决了最后一个问题
lyz0328
lyz0328成员
15 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
15 天前 添加了label:approved
CANN-robotCANN-robot成员
15 天前 合入了pull request