Pull Request已成功合入, 合并人@CANN-robot
(感谢 huanyongben 的贡献)变更摘要
本 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。


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


compile


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


compile


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


流水线分析报告 — 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-isadaily 版本(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


compile


| 🚀 CI 流水线已启动 |
|---|
| 📋 执行详情: 点击查看流水线 |


/approve
/lgtm


/approve
/lgtm


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


/approve


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