CANN/cannbot-skills:CANNBot Step 1→7 在 MC2 场景下的工作流映射 CANNBot Step 1→7 在 MC2 场景下的工作流映射【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本文档把父级plugins-official/ops-direct-invoke/AGENTS.md的 7 步流程具体化到 MC2 通算融合算子场景。CANNBot 主控和 Architect/Developer/Reviewer 三类 Subagent 在每个 Step 进入前都应先读对应小节明确本阶段在 MC2 场景下要做什么、门禁是什么、调用哪些 skill。父级流程定义以plugins-official/ops-direct-invoke/AGENTS.md为准本文件只补充 MC2 场景的差异化要点不重写父级规则。Step 1环境检查门禁标准动作父级定义按ascendc-env-checkskill 运行npu-smi info查设备列表与状态检查ASCEND_HOME_PATH/CANN_TOOLKIT_HOME等环境变量运行workflows/scripts/verify_environment.sh {operator_name}生成environment.json。MC2 场景额外校验校验项命令 / 方法失败处理NPU 架构必须为 dav-3510npu-smi info读Chip Name应为Ascend 950系列CMake 阶段再次校验NPU_ARCHdav-3510非 3510 直接终止告知用户本 skill 仅支持 Ascend 950 (dav-3510)SHMEM 第三方库可解析检查references/all_to_all_matmul/third_party/shmem/symlink 是否指向有效路径若不存在cmake/shmem.cmake会触发git submodule update --init提示用户初始化 submoduletensor_apiBlaze 头可解析同上检查third_party/tensor_api/提示用户初始化 submodule多卡环境可用npu-smi info至少能看到rankNum张卡默认 4 卡提示用户准备多卡环境单卡只能跑精度模式性能模式需多卡门禁environment.json的validation.all_passedtrue且上述 MC2 校验全部通过 → 进入 Step 2。任何一项失败禁止进入 Step 2告知用户原因。Step 2设计Architect输出物父级要求双文件operators/{op}/docs/DESIGN.mdoperators/{op}/docs/PLAN.md。MC2 场景下 DESIGN.md必须额外包含以下小节Reviewer 在 Step 4 会交叉检查§三大约束显式确认## 三大约束确认 ### 约束 1通信走 SHMEM - 选用的 SHMEM 原语aclshmemx_udma_put_nbi / aclshmemx_barrier_all_vec / ... - 确认无 Hccl:: 高阶 API✅ ### 约束 2Matmul 走 Blaze - 选用的 Blaze 模板Blaze::Gemm::Block::BlockMmad Kernel::QuantMatmulMxKernelSwat 等 - DispatchPolicyMatmulWithScaleMx / ... - 确认无 asc-devkit matmul API✅ ### 约束 3流程合规 - 复用基底references/all_to_all_matmul/ - 计划修改的文件清单列出 [MODIFY] 文件§切分策略两阶段tileCnt策略详见pipeline_tuning.mdStep 2-4 设计/审查阶段tileCnt1headMSizem做串行基线简化精度/审查调试Step 6 性能验收阶段扫描tileCnt ∈ {1, 2, 4, 8, 16, 32}找最优headMSize512只是起点不是最优值。M 轴切分headMSize m / tileCntbufferSize4SHMEM 空间预算默认 1 GB需够装下rankSize * bufferSize * bufferBlockSize scale§AIV/AIC 分工图明确哪些 work 在 AIV通信哪些在 AIC计算同步点在哪里CrossCoreSetFlag0x2, PIPE_*。Architect 加载顺序加载本 skillascendc-mc2-best-practice读references/mc2_architecture.md建立整体心智模型若通信侧不确定用哪个 SHMEM 原语 → 读references/comm_shmem.md若计算侧不确定用哪个 Blaze 模板 → 读references/matmul_blaze.md输出 DESIGN.md PLAN.md。门禁双文件齐全DESIGN.md 包含三大约束确认小节且勾选 ✅切分策略中headMSize等参数有可解释的依据不能拍脑袋。Step 2.5设计串讲Developer 串讲模式关注点复用的基底文件清单是否合理不能把[REUSE]文件错标成[MODIFY]AIC 是否在通信 buffer 上遍历所有 rankrankrankId 是否切换到本卡 GMSHMEM 空间预算是否够rankSize * commMSize_ * kPerRank * bufferSize scale 段。Architect 串讲回应关注点若 Developer 提出想用 HCCL 替代 SHMEM → 直接拒绝引用 SKILL.md 约束 1若 Developer 提出想用 asc-devkit matmul API → 直接拒绝引用 SKILL.md 约束 2。收敛严格 1 轮串讲分歧写入 WALKTHROUGH.md## 设计串讲仲裁。Step 3开发Developer起手流程# 1. 从基底工程复制 cp -r references/all_to_all_matmul operators/{op_name} # 2. 按 [MODIFY] 标记定点改造 # - src/{op_name}.cpp函数名、kernel 调用、参数解析 # - include/kernel/all_to_all_comm_udma.h通信原语若非 AllToAll # - include/kernel/all_to_all_matmul_impl.h通算融合主类 # - include/kernel/qbmm_mx_kernel.hBlaze Kernel 包装改 Scale/dtype/bias 时动 # - include/tiling/*TilingData 字段 # - scripts/gen_data.py verify_result.pydtype/容差 # 3. 编译 cd operators/{op_name} cmake -S . -B build -DNPU_ARCHdav-3510 cmake --build build -j # 4. 跑精度 bash run.sh # 默认 m2048 k8192 n3584 rank4 precision开发阶段红线禁止新增Hccl::调用Reviewer 会在 Step 4 grep禁止包含 asc-devkit 的 matmul 头禁止为了赶进度跳过run.sh的精度模式直接跑 perf改完每个[MODIFY]文件后立即跑一次bash run.sh做冒烟避免最后一次性 debug。门禁编译通过bash run.shprecision 模式输出verify_result.py: PASS代码已提交到operators/{op_name}/。Step 4审查Reviewer必查清单来自 SKILL.md 约束清单按 R1~R7 逐项检查# R1 架构3510 grep -r npu-arch operators/{op}/CMakeLists.txt # R2 无 HCCL 高阶 API应为空 grep -rn Hccl:: operators/{op}/ # R3 无 asc-devkit matmul API应为空 grep -rn AscendC::Matmul\b operators/{op}/ # R4 通信走 SHMEM grep -rn shmem.h\|aclshmem operators/{op}/include/kernel/ # R5 Matmul 走 Blaze grep -rn blaze/gemm/block/ operators/{op}/include/ # R6 流程门禁 ls operators/{op}/docs/{DESIGN,PLAN,WALKTHROUGH,REVIEW}.md cat operators/{op}/environment.json | grep all_passed # R7 性能采集合规在 Step 6 才完整执行Step 4 检查 heavy_kernels.h 是否被正确 include grep -rn heavy_add_kernel\|cache_flush operators/{op}/src/常见 FAIL 原因现象根因修复方向grep 到Hccl::AllReduce开发者把 HCCL 当成熟悉的 API用了回退到 Step 3要求 Developer 改写为aclshmemx_udma_put_nbi 自实现 Reduce 逻辑grep 到AscendC::Matmul开发者误用 asc-devkit 接口回退到 Step 3替换为Blaze::Gemm::Block::BlockMmadSHMEM 空间不足崩溃DESIGN.md 的空间预算没算对回退到 Step 2重算SHMEM_SPACE_SIZE精度对不上但无报错多半是 ProcessSingleBatch 中 rankrankId 分支错未切换到本卡 GM /remoteRankCnt没从 0 起算回退到 Step 3对照qbmm_mx_kernel.h注释核对门禁REVIEW.md 判定PASS或PASS WITH NOTES→ 进入 Step 6REVIEW.md 判定FAIL→ 进入 Step 5 修复循环。Step 5修复循环最多 3 轮。每轮Developer 修复 → Reviewer 复审。MC2 场景下常见的修不动问题跨核同步 flag 错位CrossCoreSetFlag0x2, PIPE_MTE3(mLoopIdx)与CrossCoreWaitFlag0x2, PIPE_MTE2(mLoopIdx)的 idx 必须一致UDMA Put 顺序错aclshmemx_udma_quiet(remoteRank)必须在每次 Put 后调用否则数据未真正下发remoteRankCnt 错位splitKNum必须等于rankSize否则 fixpipe 时机不对最后一次 mmadOp_ 才触发3 轮仍未通过 → 暂停上报用户。Step 6性能验收DeveloperMC2 专用流程必须刷 L2 cache详细步骤见profiling_mc2.md。这里只给摘要。PROJ$(pwd) # 1. 算子二进制已具备 perf 模式run.sh 第 5 参传 perf bash run.sh 2048 8192 3584 4 perf # 2. msprof task-based 采集无 warm-upL2 flush 由 perf 主循环内部保证 msprof --ai-coreon --aic-modetask-based \ --output${PROJ}/docs/perf/round_001 \ --application${PROJ}/build/{op_name} 2048 8192 3584 4 perf # 3. 多卡后处理每卡取最后 5 次 main kernel 平均4 卡取最大 python3 scripts/extract_perf.py ${PROJ}/docs/perf/round_001 AllToAllQuantMatmulKernelE4M3E4M3 5关键点两阶段tileCnt扫描进入 Step 6 时算子默认处于tileCnt1串行基线Step 2-4 期间配置。Step 6 的工作是扫描tileCnt ∈ {1, 2, 4, 8, 16, 32}每个值跑一次 msprof 采集 后处理对比整体 Task Duration 找最优。完整流程见pipeline_tuning.md§3 阶段 B §6 决策树L2 cache flush 必须在主循环每轮触发参考工程在 perf 主循环src/all_to_all_matmul.cpp的mode perf分支中每轮先调用heavy_add_kernel256 MB bf16 全核扫一遍刷 L2再跑主 kernel避免上一轮的热度污染本轮采集——所以 msprof 不需要--warm-upperf 模式默认跑 10 轮msprof task-based 为每轮 main kernel 生成一条op_summary_*.csv记录多卡数据提取规则每卡取最后 5 次 main kernel 的 Task Duration 求平均 → 4 卡平均值取最大值作为整体性能多卡并行由最慢卡决定。门禁docs/perf/round_NNN/存在且包含 4 个PROF_*子目录每卡一份extract_perf.py输出每卡rank_avg与整体maxTask Duration最优tileCnt与对应整体 Task Duration 已写入 DESIGN.md 性能调优记录若整体 Task Duration 与理论耗时差距 50% → 视为性能不达标检查通算流水是否真的并行AIV time vs AIC time。Step 7完成汇报CANNBot 主控汇总以下信息给用户最终判定PASS / PASS WITH NOTES总分Reviewer 100 分制代码路径operators/{op_name}/性能概要Task Duration、主导流水MC2 通常 AIC cube 主导、通信隐藏率AIV 与 AIC 重叠度关键问题列表Step 4~5 期间遗留的 NOTE【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考