| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: add KernelBench benchmark verifier Co-authored-by: zouwenxiang<zouwenxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !9 merge akg-bench-local-verifier-squash into master feat: add KernelBench benchmark verifier Created-by: wen_xiang_zou_admin Commit-by: zouwenxiang Merged-by: cann-robot Description: # Getting Started 本文档说明如何在 pypto-gym 仓库中运行 KernelBench x PyPTO benchmark。 ## 1. 准备环境 先准备可用的 pypto-gym benchmark 环境,包括: - NPU / CANN / torch_npu 环境可用。 - opencode 和模型配置可用。 - 当前目录位于 pypto-gym 仓库根目录。 - PyPTO 源码仓通过 benchmark 脚本独立下载,用于代码生成阶段。 下载或更新 PyPTO master 源码仓: bash bash benchmark/scripts/download_pypto.sh 默认下载到: text benchmark/.cache/pypto/ ## 2. 下载 KernelBench 数据集 bash bash benchmark/scripts/download_kernelbench.sh 默认会下载到: text benchmark/.cache/KernelBench/ benchmark 运行时默认读取: text benchmark/.cache/KernelBench/KernelBench/ ## 3. 准备本地 YAML 配置 当前 benchmark 只通过 YAML 配置运行。建议复制默认配置: bash cp benchmark/configs/default.yaml benchmark/configs/local.yaml 按需修改 benchmark/configs/local.yaml,例如: yaml bench_dir: "" level: "level1" cases: "19_ReLU" devices: [0] concurrency: 1 output: root_dir: "/tmp/pypto_gym_benchmark" base_dir: "benchmark_runs" pypto: repo_root: "" opencode_model: "alibaba-cn/glm-5" timeout_sec: 10800 skip_pypto_gen: false force_regen: false verifier: mode: "performance" verifier_mode: "opencode" verify_rtol: 1.0e-2 verify_atol: 2.5e-2 monitor: poll_sec: 3 pypto.repo_root 留空时使用 benchmark/.cache/pypto/。Stage 7 按 PyPTO 原生工作流执行,benchmark 不提供跳过 Stage 7 的配置项。 cases 支持单 level 和多 level: text 19_ReLU 19 1:21,31,41:50 level1=1,3,10,18,19;level2=9,14,29;level3=43,46;pto_case=1:6 其中 pto_case 是 PyPTO 自维护 case 在 KernelBench fork 里的 level 名。 ## 4. 运行 benchmark bash python -m benchmark run --config configs/local.yaml 运行开始后会打印类似: text monitor_state_dir: /tmp/pypto_gym_benchmark/state monitor_command: python -m benchmark monitor /tmp/pypto_gym_benchmark/state ## 5. 查看实时进度 复制 monitor_command 到另一个终端执行: bash python -m benchmark monitor /tmp/pypto_gym_benchmark/state monitor 会读取 state/state.json,展示每个 case 的 PyPTO 阶段、Verifier 阶段、PID、耗时和状态。 ## 6. 查看产物 一次运行的产物统一写到 output.root_dir,例如: text /tmp/pypto_gym_benchmark/ ├── logs/ ├── report/ │ ├── summary.json │ ├── summary.md │ └── <level>/<op>/ │ ├── pypto_run.log │ ├── pypto_session.md │ ├── verifier.log │ ├── verifier_session.md │ └── result.json └── state/ └── state.json 常用产物: - report/summary.md:本批次最终报告。 - report/<level>/<op>/pypto_run.log:PyPTO 算子开发日志。 - report/<level>/<op>/verifier.log:gym 侧验证日志。 - report/<level>/<op>/pypto_session.md:PyPTO 开发阶段完整会话。 - report/<level>/<op>/verifier_session.md:验证阶段完整会话。 - benchmark/.cache/pypto/custom/<op>/:PyPTO 生成的算子开发产物。 ## 7. 增加自定义 case 自定义 case 不放在 pypto-gym 或 PyPTO 源码仓中。新增 case 应提交到 PyPTO 维护的 KernelBench fork,并放在: text KernelBench/pto_case/<N>_<Name>.py case 必须满足 KernelBench 标准格式: python class Model(nn.Module): ... def get_inputs(): return [...] def get_init_inputs(): return [...] 提交到 KernelBench fork 后,重新下载数据集,再通过 YAML 指定: yaml level: "pto_case" cases: "1" 然后运行: bash python -m benchmark run --config configs/local.yaml ## 设计目标 benchmark 的核心目标是把 PyPTO 算子生成和 gym 侧验证解耦: - PyPTO 源码仓只作为算子生成工作仓使用。 - KernelBench case、调度、验证、报告和监控逻辑保留在 pypto-gym/benchmark 中。 - verifier 不向 PyPTO 仓复制 gym 侧代码,也不依赖 PyPTO 仓内 benchmark 或验证脚本。 - 对外入口保持为 python -m benchmark,运行参数统一来自 YAML。 ## 边界关系 mermaid flowchart LR User[User / CI] --> CLI["python -m benchmark"] CLI --> Config["YAML config"] CLI --> Gym["pypto-gym/benchmark"] Gym --> KernelBench["KernelBench dataset<br/>benchmark/.cache/KernelBench"] Gym --> PyPTORepo["PyPTO source repo<br/>benchmark/.cache/pypto"] PyPTORepo --> Generation["PyPTO op generation<br/>cwd = PyPTO repo"] Generation --> CustomArtifacts["custom/<op>/ artifacts<br/>SPEC / impl / golden / tests"] CustomArtifacts --> Verifier["gym verifier<br/>cwd = pypto-gym repo"] KernelBench --> Verifier Verifier --> Reports["logs / report / state"] ## 端到端流程 mermaid flowchart TD A["Load YAML config"] --> B["Resolve KernelBench cases"] B --> C["case_loader.load_case"] C --> D["Write SPEC.md and task_desc.py<br/>under PyPTO custom/<op>/"] D --> E["pypto_runner.run_pypto_workflow"] E --> F["opencode pypto-op-orchestrator<br/>cwd = PyPTO repo"] F --> G["Generated PyPTO artifacts"] G --> H{"PyPTO generation OK?"} H -- no --> I["Write pypto_failed result"] H -- yes --> J["verifier_runner.run_verifier"] J --> K{"verifier_mode"} K -- opencode --> L["pypto-kernel-validator<br/>cwd = pypto-gym repo"] K -- direct --> M["KernelVerifier direct call"] L --> N["cheat check + correctness + optional performance"] M --> N N --> O["write result.json"] O --> P["write summary.json / summary.md"] P --> Q["monitor reads state/state.json"] ## 主要模块 | 模块 | 职责 | 运行位置 | | --- | --- | --- | | benchmark.__main__ | 公开 CLI,分发 run / monitor 子命令 | pypto-gym | | run_kernelbench.py | 批处理调度、并发、状态写入、报告汇总 | pypto-gym | | case_loader.py | 读取 KernelBench case,生成 CaseSpec、SPEC.md 和 task_desc.py | pypto-gym | | pypto_runner.py | 启动 PyPTO 7 阶段工作流 | 子进程 cwd 为 PyPTO 仓 | | verifier_runner.py | 选择 opencode verifier 或 direct verifier | pypto-gym | | verifier/ | 反作弊、精度验证、性能验证的内部实现 | pypto-gym | | monitor.py | 渲染运行状态看板 | pypto-gym | | report.py | 写入 case 结果和批次汇总 | pypto-gym | ## 运行目录 mermaid flowchart TB subgraph GymRepo["pypto-gym repo"] Bench["benchmark/"] GymAgents[".opencode/agents<br/>.opencode/skills"] Runs["benchmark_runs/ or output.root_dir"] KB["benchmark/.cache/KernelBench"] PyCache["benchmark/.cache/pypto"] end subgraph PyPTO["Downloaded PyPTO repo"] Custom["custom/<op>/"] PyAgents["PyPTO native .opencode agents/skills"] end PyCache -. "is" .-> PyPTO Bench --> KB Bench --> PyCache PyAgents --> Custom GymAgents --> Runs Custom --> Runs ## 产物位置 | 产物 | 默认位置 | 说明 | | --- | --- | --- | | PyPTO 源码仓 | benchmark/.cache/pypto/ | 由 download_pypto.sh 下载,仅用于生成阶段 | | KernelBench 数据集 | benchmark/.cache/KernelBench/ | 由 download_kernelbench.sh 下载 | | 算子生成产物 | benchmark/.cache/pypto/custom/<op>/ | PyPTO 工作流生成的实现、golden、测试和状态文件 | | 批次报告 | <output.root_dir>/report/ | summary.json、summary.md 和单 case 结果 | | 运行状态 | <output.root_dir>/state/state.json | monitor 子命令读取该文件 | | 原始日志 | <output.root_dir>/report/<level>/<op>/ | pypto_run.log、verifier.log 和会话导出 | ## 隔离原则 生成阶段和验证阶段的隔离规则如下: - download_pypto.sh 只负责下载/更新 PyPTO master,不复制 pypto-gym 代码到 PyPTO 仓。 - pypto_runner 可以在 PyPTO 仓下运行 pypto-op-orchestrator,并把生成产物写入 PyPTO 仓的 custom/<op>/。 - verifier_runner 在 pypto-gym 仓下运行 validator,读取 PyPTO 生成产物进行验证。 - pypto-gym verifier 不要求 PyPTO 仓内存在 benchmark 包、validator skill 或 gym 自定义 agent。 - 新增 benchmark case 通过 KernelBench fork 管理,不直接提交到 PyPTO 或 pypto-gym 的源码目录。 See merge request: cann/pypto-gym!9 | 1 个月前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): Migrate Operator Development Capabilities to pypto-gym Co-authored-by: wangzheng97<wangzheng97@hisilicon.com> # message auto-generated for no-merge-commit merge: !345 merge migrate/op-dev-skills into master feat(agent): Migrate Operator Development Capabilities to pypto-gym Created-by: wangzheng97 Commit-by: wangzheng97 Merged-by: cann-robot Description: > 关联 Issue:#13 (Closes #13) ## 概述 将 PyPTO 算子开发能力(op-dev skill / 编排 agent 团队 + 状态机插件 + lint hook)从 cann/pypto 迁入 pypto-gym,并新增 pypto-docs-search 解决 gym 无 docs/、models/ 目录时的资料获取。 ## 提交结构(三段式) - **C1 迁入算子开发能力(自 cann/pypto master 原样迁入)**:17 个 skill + 9 个编排 agent(op-orchestrator 团队)+ pypto-op-lint / pypto-state-transition 插件 + pypto-op-lint hook,与上游逐字节一致,未做修改。 - **C2 自洽裁剪**:删除迁入文件中对未迁入单元的引用,保持自洽子集;个别仍需的脚本能力(CCE 行→前端源码定位)复制到本地作替代,不留悬空描述。 - **C3 新增 pypto-docs-search + devkit 资料接入**:会话初始化用 sync_devkit.py 装配本地缓存(docs/ops/tests,工作树已含则符号链接复用、免下载);检索用原生 Grep/Glob 模板 + 按入口键的索引文件(本地路径优先、在线 _sources 兜底);各 agent/skill 以 capability 级调用 pypto-docs-search,单点已知文档用 raw markdown URL 直取。 ## 说明 - **不迁移** pypto-fused-op-integration:gym 仓内的版本为最新,保留不动。 - 按算子开发范围裁剪,未迁入 pass 开发 / PR 工具 / 部分设备侧深调子 skill 等非算子开发核心单元。 See merge request: cann/pypto-gym!345 | 2 天前 | |
feat(agent): add pypto-pro-op-orchestrator and pro skills Co-authored-by: xuzhenghao8<xuzhenghao8@huawei.com> # message auto-generated for no-merge-commit merge: !348 merge master into master feat(agent): add pypto-pro-op-orchestrator and pro skills Created-by: xuzhenghao8 Commit-by: xuzhenghao8 Merged-by: cann-robot Description: # pypto-pro-op-orchestrator 工作流 > 分析对象: .opencode/agents/pypto-pro-op-orchestrator.md > 关联 skill:pypto-pro-op-plan、pypto-pro-material-explore、pypto-pro-op-design、pypto-pro-op-develop、pypto-golden-generate(Stage 2 复用) --- ## 一、角色定位 pypto-pro-op-orchestrator 是 PyPTO-Pro 算子开发的 **primary(主)编排代理**,只负责三件事:**调度子代理、验收产物、把关质量**。它有三条不可逾越的边界: 1. **从不亲自写 kernel 代码,也不做 API 探索**——所有实作交给子代理。 2. **从不亲自调试或修改 kernel**——检查清单失败项只反馈回子代理,由子代理自修复。 3. **自身不加载业务 skill**——skill 由子代理在收到任务后自行加载,orchestrator 只下达任务、跑验收命令。 --- ## 二、四阶段流水线 编排是一个 **门禁式线性流水线**:每个 Stage 结束时 orchestrator 执行检查清单,通过才推进,不通过则把缺失项反馈给子代理修正。 | Stage | 子代理加载的 skill | 核心产物 | 关键门禁判据 | |---|---|---|---| | **1 需求规划** | pypto-pro-op-plan(内部再调 pypto-intent-understand + pypto-pro-material-explore) | SPEC.md、EXPLORE_REPORT.md、PRO_MATERIAL_INDEX.md、MEMORY.md | EXPLORE_REPORT 含 ≥8 章节且 §3/§4/§5 三方向齐全;无未解决的 unsupported;INDEX 含 §A/§B/§C | | **2 Golden 生成** | pypto-golden-generate(唯一可复用的非 Pro skill,因纯 torch+torch_npu、不含 pl.*) | {op}_golden.py、GOLDEN_PERF_REPORT.md | golden 自验证 exit code 0 | | **3 架构设计** | pypto-pro-op-design | DESIGN.md | 含 §0–§9 十章节;§8 综合评估无 ❌;§9 Tile 数据流全景图存在;无 TBD/待定 | | **4 Kernel 实现** | pypto-pro-op-develop | test_{op}.py(kernel+test 单文件) | 静态检查(设备一致、atol 合理、≥2 个 test)→ orchestrator 亲自运行 python custom/<op>/test_{op}.py 得 PASS | --- ## 三、各 Stage 内部机制 ### Stage 1(先需求后探索) pypto-pro-op-plan 强制"先需求、后探索"顺序——先用 pypto-intent-understand 产出 SPEC.md,再用 pypto-pro-material-explore 探索。探索的核心理念是 **"先建图,后按图索骥"**: - 每次重新扫描仓库动态生成 PRO_MATERIAL_INDEX.md(§A API 文档 grep pypto_pro 过滤、§B a5 样例、§C 教程)。 - 随后 **同一消息内并行发起 3 个 Explore 子代理**(API/约束、a5 样例、教程模式),汇总成 EXPLORE_REPORT.md。 - 报告的 §7 环境常量快照(UB 容量、event_id 上限、stride 阈值)是后续 Stage 3 决策的硬依据。 ### Stage 2(Golden 生成) 复用非 Pro 的 pypto-golden-generate 生成 {op}_golden.py。可复用的原因是它产出纯 torch + torch_npu 参考实现,不涉及 pl.* API,与 PyPTO-Pro 无冲突。golden 提供设备选择函数 _get_device()(经 TILE_FWK_DEVICE_ID 环境变量),供 Stage 4 测试保持设备一致。 ### Stage 3(9 轮迭代式约束收敛) pypto-pro-op-design 是问题驱动的 R0–R8 迭代,不是线性填表: - **R0** Phase 划分 → **R1** API 映射 → **R2** Tile 规划 → **R3** UB 空间布局 → **R4** 循环与 Section → **R5** 分核 → **R6** 同步与核间流水 → **R7** 尾块处理 → **R8** 综合评估。 - **回溯规则**:每轮发现矛盾立即回溯修正前序轮次,不累积到 R8;R8 发现 ≤3 处问题就地修复重跑 R8,>3 处回到最早出问题的轮次,最多 5 次完整迭代。 - 存在显式 **跨轮联合决策**(如 R3↔R6:pipeline 深度决定 double buffer 地址翻倍,需回填 R3)。 - 最终产出 §9 Tile 数据流全景图,作为交给 Stage 4 的"施工图"。 ### Stage 4(单代理自修复闭环) pypto-pro-op-develop 以 DESIGN.md(全局结构)+ EXPLORE_REPORT.md(API 约束/样例/教程)为主依据,7 步走: 1. 确认输入齐全(DESIGN.md §0–§9 完整性) 2. 逐 API 确认参数(参数名/顺序/约束) 3. 编写 tile 声明(默认 make_tile_group + auto_mutex) 4. 编写 section 和循环骨架 5. 填入 Phase 内部实现 6. 编写测试函数(设备须从 _get_device() 取,atol 合理) 7. 本地验证与自修复 子代理 **不得把失败抛回 orchestrator**,须参照 pitfalls.md 自行修到 PASS。 --- ## 四、两个关键控制细节 1. **Stage 4 硬性规则块**:调度 Stage 4 子代理时,prompt **最开头必须逐字粘贴**禁止环境配置的规则块(禁 conda activate/source/export/pip install,运行只允许 python {脚本})。设计意图是 **压制 LLM "先配环境再干活" 的内置先验**。 2. **Stage 4 双阶段验收**:orchestrator 先做静态扫描(文件存在、设备与 golden 一致、atol≥下界、≥2 个 test 覆盖整切+尾块),全过后 **亲自运行** 脚本确认 PASS——这是 orchestrator 唯一"动手"的动作,仍不涉及改代码。 --- ## 五、工作流图 ┌─────────────────────────────────────────────────────────────────────┐ │ 用户请求开发 PyPTO-Pro 算子 │ │ orchestrator 首问:算子名 / 数学公式 / 输入输出 shape+dtype │ └───────────────────────────────┬─────────────────────────────────────┘ ▼ ╔═══════════════════════════ STAGE 1 需求规划 ═══════════════════════════╗ ║ dispatch general 子代理 ──► 自载 skill: pypto-pro-op-plan ║ ║ ├─ Step1 载 pypto-intent-understand ──► SPEC.md ║ ║ └─ Step2 载 pypto-pro-material-explore ║ ║ ├─ 重扫仓库 ──► PRO_MATERIAL_INDEX.md (§A API/§B a5/§C 教程) ║ ║ └─ 并行 3 Explore 子代理(同一消息): ║ ║ [1]API&约束 [2]a5样例 [3]教程模式 ──► EXPLORE_REPORT.md ║ ║ 产物: SPEC / EXPLORE_REPORT / INDEX / MEMORY ║ ╚═══════════════════════════════╤═══════════════════════════════════════╝ orchestrator 门禁: ≥8章节? §3/§4/§5齐? 无unsupported? §A/B/C? FAIL─►反馈缺失项回子代理 │ PASS─▼ ╔═══════════════════════════ STAGE 2 Golden 生成 ═══════════════════════╗ ║ dispatch general 子代理 ──► 自载 skill: pypto-golden-generate ║ ║ (唯一复用的非Pro skill: 纯torch+torch_npu, 无 pl.*) ║ ║ 产物: {op}_golden.py + GOLDEN_PERF_REPORT.md ║ ╚═══════════════════════════════╤═══════════════════════════════════════╝ orchestrator 门禁: golden.py存在? 自验证 exit=0? perf报告在? FAIL─►反馈 │ PASS─▼ ╔═══════════════════════════ STAGE 3 架构设计 ══════════════════════════╗ ║ dispatch general 子代理 ──► 自载 skill: pypto-pro-op-design ║ ║ 9 轮迭代式约束收敛 (问题驱动, 发现矛盾即回溯): ║ ║ R0 Phase划分 → R1 API映射 → R2 Tile规划 → R3 UB布局 ║ ║ → R4 循环/Section → R5 分核 → R6 同步/核间流水 → R7 尾块 ║ ║ → R8 综合评估(≤3就地修/>3回最早轮, 最多5轮) ║ ║ ↖────────── 跨轮回溯 (如 R3↔R6 buffer地址回填) ──────────┘ ║ ║ 产物: DESIGN.md (核心=§9 Tile 数据流全景图) ║ ╚═══════════════════════════════╤═══════════════════════════════════════╝ orchestrator 门禁: §0-§9齐? §8无❌? §9全景图在? 无TBD/待定? FAIL─►反馈对应轮次 │ PASS─▼ ╔═══════════════════════════ STAGE 4 Kernel 实现 ══════════════════════╗ ║ dispatch general 子代理 ║ ║ ⚠ prompt 最开头逐字粘贴【硬性规则块: 禁环境配置/仅 python 脚本】 ║ ║ ──► 自载 skill: pypto-pro-op-develop ║ ║ 7步: 确认输入→逐API确认参数→tile声明→section/循环骨架 ║ ║ →Phase实现→写测试→本地验证 ║ ║ ┌──────── 子代理独立自修复闭环 (不抛回 orchestrator) ────────┐ ║ ║ │ 开发 → 运行 → 失败? → 查 pitfalls.md 定位根因 → 修复 → 重跑 │ ║ ║ └────────────────────────────────────────────────────────────┘ ║ ║ 产物: test_{op}.py (kernel + ≥2 test 单文件) ║ ╚═══════════════════════════════╤═══════════════════════════════════════╝ orchestrator 双阶段验收: ① 静态扫描: 文件在? 设备与golden一致? atol≥下界? test数≥2(整切+尾块)? ② 静态全过 ──► orchestrator 亲自运行 python custom/<op>/test_{op}.py 运行FAIL─►错误反馈回子代理重修 │ PASS─▼ ┌─────────────────────────┐ │ 算子交付 (精度通过) │ └─────────────────────────┘ --- See merge request: cann/pypto-gym!348 | 1 天前 |