AI Agent 整网模块拆解规范【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本文用于指导 AI agent 分析多流优化。流程分两层整网模块拆解目标把整网拆成模块画出模块级 DAG判断模块与模块哪些能并行。每个模块的算子级拆解目标对每个模块继续拆成算子画出模块内算子 DAG判断模块内哪些算子能并行。当前文档同时约束这两层但第一层优先。总目标agent 必须完成下面 4 件事把整网的中的一种层拆成一组模块画出单层模块 DAG判断模块与模块哪些能并行对每个模块继续拆成算子并判断模块内算子并行性输出物分析完成后必须产出模块清单模块依赖清单模块 Mermaid DAG模块级并行性结论此处分析完成后必须补充每个模块的算子清单每个模块的算子级依赖清单每个模块的算子级 Mermaid DAG每个模块内部的算子并行性结论固定产物地址与模板分析结果统一输出为一个 Markdown 文件放在cann-recipes-infer/docs/common/multi-stream-analysis/network_or_case_name.md命名规则使用小写英文、短横线连接名字描述“整网分析对象”不要只写某个局部函数名示例cann-recipes-infer/docs/common/multi-stream-analysis/deepseek-r1-decode.mdcann-recipes-infer/docs/common/multi-stream-analysis/longcat-flash-decode.mdcann-recipes-infer/docs/common/multi-stream-analysis/hunyuanimage3-moe-path.md模板文件固定放在./analysis-template.mdagent 输出时必须基于该模板生成结果保留模板的一级、二级标题结构先写整网模块分析再写每个模块的算子分析Mermaid 图直接内嵌在结果文件中一、整网模块拆解规则1. 拆的是整网不是局部函数第一步必须从整网执行路径出发而不是直接抓某个局部热点函数。agent 要先回答这 3 个问题整网主路径从哪里开始到哪里结束当前分析的是prefill还是decode整网里有哪些模块如果这一步还没完成就不能直接进入某个局部模块内部。2. 模块定义模块必须同时满足下面 4 条语义完整例如Embedding、Attention Main Path、Router Path、Shared Expert、Dispatch、Expert Compute、Combine、KVCache Offload、LM Head输入输出明确能说清该模块吃什么、产什么、是否写共享状态可独立讨论调度可以单独判断“是否可能和别的模块并行”尺度合适不能只是局部 reshape、cast、view 或某个融合算子内部的小步骤也不是 Decoder Layer、Attention Block、Moe Block这种大模块。3. 模块优先沿这些边界拆子网络边界Attention、MoE、MLP、LM Head通信边界all_to_all、send/recv、all_gather、reduce_scatter状态边界KVCache update、offload、reload同步边界record_event / wait_event、wait_stream资源边界明显偏计算、偏通信、偏搬运的切换点4. 第一层不要过早拆成算子第一层不要把下面内容单独当模块reshape / cast / view融合算子内部步骤没有调度意义的局部前后处理第一层的目标只是把整网骨架立起来并回答模块与模块之间的并行关系。二、整网模块 DAG 规则1. 节点一个节点对应一个一级模块节点名要体现模块语义不要用代码行名汇合点可以单独画成控制节点例如merge_shared_router2. 边类型每条边必须标注依赖类型只允许下面 4 类data后继模块直接消费前驱模块输出state后继模块依赖前驱写完 cache、buffer 或共享状态event后继模块依赖前驱的事件、同步或 stream waitcollective_order通信顺序固定不能随意重排3. 共同输入不是依赖如果两个模块都使用同一个输入例如hidden_states同时进入router_path和shared_expert不要把它们之间画成依赖边而是补一个共同上游节点。正确画法4. Mermaid 画法统一使用flowchart LR如果还没决定流归属用Main Path / Side Path / Comm Path如果代码里已经明确是Stream0 / Stream1才用流名做subgraph边规则--data或state-.-event三、模块级并行性判断判为serial满足任一条件就必须串行存在data依赖存在共享可写状态冲突通信顺序固定不能插入其中一个只是另一个内部步骤判为parallel_candidate同时满足下面条件时可以判为模块级并行候选没有data依赖没有明确共享写冲突两者结果在后面的汇合点才相遇通信顺序没有把它们绑定成单链条判为parallel_pending_validation逻辑上可并行但下面因素还没确认资源是否冲突shape 是否太小图模式或 runtime 是否有限制是否会引入额外 clone / buffer / host 开销四、算子级拆解规则第二层不是只分析部分模块而是每个模块都要继续拆成算子。1. 算子级拆解目标对每个模块都要回答模块内部有哪些关键算子或算子组算子与算子之间的 DAG 是什么模块内部哪些算子能并行哪些必须串行2. 算子级拆解原则仍然优先沿计算、通信、同步、状态边界拆一个算子节点可以是单算子也可以是没有必要继续拆的算子组模块内的共同输入、汇合点、同步点仍然要单独标清3. 算子级输出每个模块都要补齐模块内算子清单算子级依赖算子级 DAG模块内算子并行性结论五、推荐输出格式1. 整网模块清单module_idmodule_namemodule_typeinputsoutputsside_effectresource_hint2. 整网模块依赖清单fromtodependency_typereason3. 整网模块 DAG直接输出 Mermaid。4. 模块级并行性结论模块级并行性结论不要写成module_a / module_b的二元表因为整网分析往往涉及多个模块同时并行一个流里串行一组模块另一个流里并行另一组模块多个分叉点和多个汇合点因此模块级并行性结论必须直接按“分组和结构”描述至少包含下面 4 部分主串行链说明哪些模块构成当前主路径不能打断。可并行模块组说明哪些模块可以作为一组与主路径或其他组并行。待验证模块组说明逻辑可并行但资源或运行时约束还要验证的模块组。建议流分组用Stream0 / Stream1 / Stream2或Main Path / Side Path / Comm Path的方式描述推荐分组不要求现在就和代码中的真实流一一对应。推荐写法示例主串行链embedding - attention_main - merge - lm_head可并行模块组组 Arouter_path - dispatch - combine组 Bshared_expert待验证模块组组 Ckvcache_reload - indexer_prolog建议流分组Stream0attention_main - merge - lm_headStream1shared_expertStream2router_path - dispatch - combine5. 每个模块的算子级结果对每个模块都要补一组结果算子清单算子依赖清单算子级 Mermaid DAG模块内算子并行性结论算子级并行性结论也不要写成op_a / op_b的二元表。原因和模块级相同模块内部同样可能是多组算子并行、多个汇合点、多个同步点。因此每个模块内部的算子并行性结论也必须按“分组和结构”描述至少包含模块内主串行链模块内可并行算子组模块内待验证算子组模块内建议流分组推荐写法示例模块内主串行链qkv_prepare - attention_score - merge_out模块内可并行算子组组 Ashared_expert_gate - shared_expert_down_proj组 Brouter_topk - dispatch模块内待验证算子组组 Ckvcache_reload - indexer_prolog模块内建议流分组Stream0qkv_prepare - attention_score - merge_outStream1shared_expert_gate - shared_expert_down_projStream2router_topk - dispatch实际写文件时必须按./analysis-template.md的结构落盘。六、最小示例下面示例只演示第一层如何把整网中的一段 MoE 路径整理成模块级局部骨架。模块清单module_idmodule_namemodule_typeinputsoutputsside_effectresource_hintrouter_pathRouter Pathcomputehidden_statesrouted_hidden_states无compute commshared_expertShared Expertcomputehidden_statesshared_hidden_states无computemerge_shared_routerMerge Shared Routercontrolrouted_hidden_states, shared_hidden_stateshidden_states无light compute依赖清单fromtodependency_typereasonrouter_pathmerge_shared_routerdatamerge 需要 routed_hidden_statesshared_expertmerge_shared_routerdatamerge 需要 shared_hidden_statesMermaid DAG模块级并行性结论主串行链router_path - merge_shared_router可并行模块组组 Ashared_expert待验证模块组无建议流分组Main Pathrouter_path - merge_shared_routerSide Pathshared_expert关键词whole-graph decompositionmodule dagmodule parallelismoperator dag【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考