ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

CANN PyPTO Pass 业务流分析技能实战:从执行顺序、依赖关系到数据流转的完整分析方法论

CANN PyPTO Pass 业务流分析技能实战:从执行顺序、依赖关系到数据流转的完整分析方法论 CANN PyPTO Pass 业务流分析技能实战从执行顺序、依赖关系到数据流转的完整分析方法论【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto导读PyPTOParallel Tensor/Tile Operation 编程范式将算子编译拆解为一条由数十个 Pass 串成的流水线理解某个业务场景如冗余 op 消除、切图合图、动态参数处理中哪些 Pass 参与、按什么顺序执行、彼此如何依赖、数据如何流转是定位编译问题、优化编译性能的前提。本文基于仓库.agents/skills/pypto-pass-workflow-analyzer/SKILL.md提供的分析方法论结合framework/src/passes/下的真实源码与配置系统讲解 Pass 业务流分析的完整工作流如何定位业务文档、解析 Pass 职责、依据默认策略确定执行顺序、识别依赖关系与数据流转并最终按报告模板产出结构化分析结果。读完本文你将掌握一套可复用的 PyPTO Pass 业务流分析方法并能直接应用于冗余消除、切图合图等具体业务的代码阅读与问题排查。一、技能定位什么是 Pass 业务流分析PyPTO 的编译前端python/pypto/与框架后端framework/src/之间存在一条完整的 Pass 流水线前端产出的高层计算图会依次经过数十个编译 Pass 的变换与优化最终变成可执行图并交付代码生成。单个 Pass 解决的是局部图变换问题例如去掉一个冗余 reshape而业务流分析解决的是整条流水线协同问题某个业务场景如冗余 op 消除、切图合图、动态参数处理的完整执行流程是什么业务流程中涉及哪些 Pass 模块各自承担什么职责各 Pass 的执行顺序和依赖关系如何各 Pass 之间通过什么数据结构进行数据流转和状态传递围绕这些问题pypto-pass-workflow-analyzer技能SKILL.md定义了一套四步工作流定位业务流程文档 → 解析业务流程设计 → 结合源代码验证 → 生成业务流分析报告。它与同目录下的pypto-pass-module-analyzer单 Pass 模块代码分析形成互补前者站在业务流视角看全局协同后者站在模块视角看单个 Pass 内部实现详见 .agents/README.md。二、适用场景与触发关键词2.1 适用场景当需要理解以下内容时使用该技能某个业务场景如冗余 op 消除、切图合图、动态参数处理等的完整执行流程业务流程中涉及的各个 Pass 模块及其作用各 Pass 模块的执行顺序和依赖关系各 Pass 模块之间的数据流转和状态传递。2.2 触发关键词技能定义了四类自然语言触发模式便于 Agent 在对话中自动匹配触发模式目标产出分析 pass XXX 业务流程指定业务中 Pass 执行的完整业务流分析 XXX 业务的 pass 执行流程指定业务中 Pass 执行的完整业务流分析 XXX 业务涉及哪些 pass涉及的 Pass 模块及完整执行流程分析 pass xxx 的数据流变化业务涉及 Pass 的数据流转过程三、工作流步骤 1定位业务流程文档业务流分析的起点是找到描述该业务的设计文档若用户指定了文档目录优先在该目录下查找相关业务流程文档否则根据描述的业务场景在仓库docs/目录中查找相关业务流程文档。在定位文档时可借助关键词在docs/下检索业务名如 graph partition、loop unroll、dynamic shape 等。若仓库文档缺失或描述不完整则转入源码侧以framework/src/passes/中的 Pass 实现为第一手依据详见步骤 3。四、工作流步骤 2解析业务流程设计从文档及 Pass 模块代码中提取四类核心信息这是整个分析的主体部分。4.1 业务场景描述需要厘清三个要素业务名称和目标业务要解决什么问题例如消除冗余 op 以缩短执行序列业务触发条件什么输入形态/配置会触发该业务例如图分区由sgPartitionAlgorithm配置决定采用哪种分区算法业务适用范围该业务作用于哪些算子、哪些编译阶段、哪些芯片架构。以切图合图为例framework/src/passes/tile_graph_pass/graph_partition/graph_partition.cpp中GraphPartition::RunOnFunction会读取function.paramConfigs_.sgPartitionAlgorithm按Iso、OspSarkar、OspBsp三种模式分发到不同的分区器IsoPartitioner / OspPartitioner这既是业务的触发条件也直接决定了后续子图形态。4.2 涉及的 Pass 模块列出所有参与的 Pass 模块并逐一给出名称与基本功能。Pass 的完整枚举定义在 pass_type.h 中PassName枚举共 40 余项且每个 Pass 有唯一的字符串标识符identifier通过kPassNameStringMap建立映射如PassName::GRAPH_PARTITION↔GraphPartition。分析单个 Pass 功能时可调用pypto-pass-module-analyzer技能辅助产出结构化模块说明。4.3 执行顺序和依赖关系执行顺序的确定遵循三层证据链默认策略顺序以 pass_manager.cpp 中BuildPvc2OooPassEntries()定义的PVC2_OOO策略顺序为准这是当前架构默认 Pass 调度策略阶段划分根据 Pass 源码所在目录判断其所属编译阶段——framework/src/passes/tensor_graph_pass/对应 Tensor Graph Passframework/src/passes/tile_graph_pass/对应 Tile Graph Passframework/src/passes/block_graph_pass/对应 Block Graph Pass另有 Execute Graph Pass 阶段。阶段枚举PassTypeTYPE_TENSOR_GRAPH/TYPE_TILE_GRAPH/TYPE_BLOCK_GRAPH同样定义在 pass_type.h源码依赖分析在framework/src/passes/中查找相关 Pass 的源代码分析模块间的数据依赖与状态依赖。下面给出PVC2_OOO策略的完整 Pass 顺序来自 pass_manager.cpp这是业务流分析中执行顺序的最权威基准序号Pass 标识符所属源码目录阶段1InferTensorFormattensor_graph_pass2RemoveRedundantReshapetensor_graph_pass3AutoCasttensor_graph_pass4InferMemoryConflicttensor_graph_pass5RemoveUndrivenViewtensor_graph_pass6ExpandFunctiontensor_graph_pass7MergeViewAssembletile_graph_pass/graph_optimization8SplitReshapetile_graph_pass/graph_optimization9SplitRawTensortile_graph_pass/graph_optimization10SplitLargeFanoutTensortile_graph_pass/graph_optimization11DuplicateOptile_graph_pass/graph_optimization12AssignMemoryTypetile_graph_pass/data_path13InferDiscontinuousInputtile_graph_pass/graph_optimization14RemoveRedundantOptile_graph_pass/graph_optimization15InsertOpForViewAssembletile_graph_pass/graph_optimization16ProcessAtomictile_graph_pass/graph_optimization17BuildTreeFromReducetile_graph_pass/graph_optimization18GraphPartitiontile_graph_pass/graph_partition19NBufferMergetile_graph_pass/graph_partition20L1CopyInReuseMergetile_graph_pass/graph_partition21ReduceCopyMergetile_graph_pass/graph_partition22IntraSubgraphAdaptertile_graph_pass/data_path23GenerateMoveOptile_graph_pass/data_path24CommonOperationEliminatetile_graph_pass/graph_partition25AxisCombinetile_graph_pass/graph_constraint26PadLocalBuffertile_graph_pass/graph_constraint27RemoveUnalignedReshapetile_graph_pass/graph_constraint28ReplaceTensortile_graph_pass/graph_constraint29PreGraphProcesstile_graph_pass/graph_constraint30InferDynShapetile_graph_pass/graph_constraint31SubgraphToFunctiontile_graph_pass32VFFusionClusterIdentifyblock_graph_pass33InferParamIndexblock_graph_pass34SrcDstBufferMergeblock_graph_pass/memory_reuse35AddAllocblock_graph_pass/schedule_ooo36OoOScheduleblock_graph_pass/schedule_ooo37TuneTileOpSeqForVFblock_graph_pass38RemoveAllocblock_graph_pass/schedule_ooo39CopyOutResolveblock_graph_pass40InsertSyncblock_graph_pass41TuneSyncForVFblock_graph_pass42MixSubgraphSplitblock_graph_pass43LastUseMarkblock_graph_pass44GlobalMemoryReuseblock_graph_pass/memory_reuse45CodegenPreprocblock_graph_pass除PVC2_OOO外pass_manager.cpp 还注册了两个子策略FunctionUnroll仅含LoopUnroll与ExecuteGraph含DynAttrToStatic、LoopaxesProc分别用于函数展开与执行图收尾阶段。4.4 数据流转和状态变化针对每个参与模块按处理前数据及状态 → 模块处理 → 处理后数据及状态的格式逐模块刻画模块 1模块处理前数据及状态 → 模块处理 → 模块处理后数据及状态变化 模块 2模块处理前数据及状态 → 模块处理 → 模块处理后数据及状态变化PyPTO 各 Pass 共享的核心数据结构是Function函数级计算图与其内部的Operation节点、LogicalTensor数据边。业务流分析应关注两类流转数据流转前一个 Pass 改写后的图结构如SubgraphToFunction生成的子函数与 call op如何作为下一个 Pass如VFFusionClusterIdentify、MixSubgraphSplit的输入状态传递Pass 在Function/paramConfigs_等对象上设置的配置与标记例如GraphPartition写入的sgParallelNum参数、ExpandFunction对 tile 形状的刷新如何被后续 Pass 读取。一个典型的状态依赖示例ExpandFunction执行后pass_manager.cpp 会将其后的图规模function.GetOperationSize()写入MonitorManager作为后续 Pass 的阈值基线——这是前序 Pass 设置状态、后续 Pass 消费状态的直接证据。五、工作流步骤 3结合源代码验证文档描述必须与代码实现交叉验证这是保证分析事实准确的关键环节。5.1 验证执行入口与生命周期Pass 注册PassRegistrypass_registry.cpp以passName → 工厂函数的方式注册所有 PassRegPass()pass_manager.cpp通过宏REG_PASS完成注册执行入口外部以 C 接口RunPass(Program, Function, const std::string strategy)pass_api.cpp调用PassManager::RunPasshost 侧在framework/src/interface/machine/host/host_machine.cpp中对不含 call operation 的函数调用backend.runPass(...)并传入config::GetPassStrategy()Pass 生命周期Pass::Runpass.cpp按PreRun → RunOnFunction → PostRun三段执行若passDfxconfigs_.disablePass为真则直接跳过——这解释了default_pass_configs.disable_pass配置为何能把 Pass 从流程中排除架构过滤GetStrategyPassespass_manager.cpp在执行前会依据pass-GetSupportedArches()过滤掉当前 NPU 架构不支持的 Pass因此同一策略在不同芯片上的实际执行序列可能不同。5.2 验证依赖关系检查pass_dependency.cpp 实现了两类依赖约束注册策略时会自动校验前置依赖pre-dependencies某些 Pass 必须在指定 Pass 之后执行例如GraphPartition要求DuplicateOp、SplitLargeFanoutTensor、SplitReshape、ProcessAtomic、BuildTreeFromReduce均在其前SubgraphToFunction要求GraphPartition、ReplaceTensor、PreGraphProcess、InferDynShape在前InsertSync要求OoOSchedule、CopyOutResolve在前顺序依赖sequence dependenciesGraphPartition之后必须紧跟ReduceCopyMerge、NBufferMerge、L1CopyInReuseMerge、IntraSubgraphAdapter、GenerateMoveOp这一有序序列。若策略配置违反依赖CheckStrategyDependency会输出WARNING级日志并给出缺失依赖、应在 XX 前插入 YY的修复提示。分析报告中的前置依赖 / 数据依赖 / 状态依赖三分类即可直接映射到这两类源码约束加上前文的数据流转分析。5.3 补充文档未说明的实现细节文档往往只描述业务意图源码则暴露实现细节。例如切图合图业务中GraphPartition::RunOnFunctiongraph_partition.cpp按分区算法分发Iso走 IsoPartitioner同构子图合并参考iso_partitioner.cppOspSarkar/OspBsp走 OspPartitioner对应algorithms/osp/bsp与algorithms/coarser/sarkar等调度器族分区完成后由FinalizePartitionWithTokenDependency建立 token 依赖再交给NBufferMergeN 缓冲合并等后续 Pass 处理存储复用SubgraphToFunctionsubgraph_to_function.cpp随后把子图提升为独立子函数并记录 incast/outcast 信息——这就是切图与合图两条业务线的分水岭。六、工作流步骤 4按模板生成业务流分析报告分析结论需按报告模板组织输出。模板文件位于 pass-workflow-report-template.md包含以下章节业务概述业务名称、目标、触发条件、适用范围涉及的 Pass 模块以表格列出序号 / Pass 名称 / 阶段 / 主要功能执行流程整体流程图mermaidgraph TD按阶段用 subgraph 分组 详细执行顺序列表依赖关系分析前置依赖、数据依赖、状态依赖并给出数据流/状态流如Pass1 → 数据A → Pass2数据流转与状态变化关键数据变化表数据项 / 来源 Pass / 变化描述 / 目标 Pass与状态机图mermaidstateDiagram-v2、关键状态变更表状态名称 / 初始值 / 设置 Pass / 变化条件 / 使用 Pass各 Pass 详细说明每个 Pass 的功能、输入、输出、关键逻辑、与其他 Pass 的关系业务价值性能提升、资源优化、功能增强须有源码或文档依据禁止编造量化数据典型应用场景冗余 op 消除、切图合图、动态参数处理、VF 融合等注意事项文档与代码不一致之处、依赖约束、架构过滤等边界条件相关文件文档路径与代码路径清单。模板中的 mermaid 流程图与状态图是执行顺序与数据流转的可视化载体报告中应保留便于快速浏览与后续引用。七、输出要求与注意事项7.1 输出要求使用清晰的层级结构使用表格展示 Pass 列表使用流程图或列表展示执行顺序详细说明每个 Pass 的功能和依赖关系提供实际的应用场景示例。7.2 注意事项如果文档信息不完整以源代码为准进行补充如果发现文档与代码不一致在报告中显式标注重点关注 Pass 之间的依赖关系和数据流转对于复杂的业务流程按编译阶段Tensor Graph / Tile Graph / Block Graph / Execute Graph分阶段详细说明不要混为一谈。八、配套调试配置让业务流看得见业务流分析不仅依赖静态阅读PyPTO 还提供了动态观测手段可在分析报告中作为验证依据按 Pass 转储计算图与 IR配置debug.dump_pass_graph数组值为当前 Pass 策略中的 Pass 标识符列表而非 PassName 枚举未匹配的标识符会输出告警即可让匹配的 Pass 输出计算图 dump 与 IR 打印见 tile_fwk_config_schema.json一键调试模式compile_debug_mode置 1 时pass_manager.cpp 会强制所有 Pass 开启printGraph、dumpGraph、printProgramPass 级默认配置pass.default_pass_configs提供print_graph、print_program、dump_graph、dump_pass_time_cost、pre_check、post_check、expected_value_check、disable_pass、health_check、use_max_freq_label等开关见 tile_fwk_config_schema.json按阶段截断compile_stage0~5可控制编译停在某个阶段——ExpandFunction之后对应 Tensor Graph 阶段CS_TENSOR_GRAPH1SubgraphToFunction之后对应 Tile Graph 阶段CS_TILE_GRAPH2ShouldTerminateAtStagepass_manager.cpp据此提前终止策略执行便于分阶段观察数据流转Pass 校验开启enable_pass_verify后每个 Pass 执行完会调用Program::VerifyPasspass_manager.cpp配合pass_check/目录下的 Checker如common_operation_eliminate_checker.cpp、subgraph_to_function_checker.cpp等完成前置/后置校验是确认状态在 Pass 间正确传递的有力工具。九、实战示例分析切图合图业务流结合上述方法论快速演示一个完整分析骨架对应报告模板的产出形态业务概述切图Graph Partition将优化后的 tile 图按同构性/通信代价切分为若干子图合图SubgraphToFunction将子图提升为可独立编译的子函数并建立调用关系为后续 OOO 调度与 VF 融合做准备。涉及 Pass按执行顺序DuplicateOp → SplitReshape/SplitRawTensor/SplitLargeFanoutTensor → ProcessAtomic → BuildTreeFromReduce → GraphPartition → NBufferMerge → L1CopyInReuseMerge → ReduceCopyMerge → IntraSubgraphAdapter → GenerateMoveOp → CommonOperationEliminate → … → SubgraphToFunction → VFFusionClusterIdentify。依赖关系GraphPartition前置依赖DuplicateOp、SplitLargeFanoutTensor、SplitReshape、ProcessAtomic、BuildTreeFromReduce顺序依赖ReduceCopyMerge → NBufferMerge → L1CopyInReuseMerge → IntraSubgraphAdapter → GenerateMoveOpSubgraphToFunction前置依赖GraphPartition、ReplaceTensor、PreGraphProcess、InferDynShapeVFFusionClusterIdentify依赖SubgraphToFunction。数据流转tile 图含 LogicalTensor 数据边→GraphPartition生成子图集合与 token 依赖 → 存储复用类 PassNBufferMerge 等改写缓冲 →SubgraphToFunction产出 root function leaf function 与 call op →VFFusionClusterIdentify在子函数级别识别可融合的向量化函数集群。十、相关文件索引技能定义SKILL.md报告模板pass-workflow-report-template.md技能总览.agents/README.mdPass 管理与策略pass_manager.cpp、pass_manager.h、pass_api.cppPass 注册与依赖pass_registry.cpp、pass_dependency.cppPass 抽象与生命周期pass.h、pass.cpp、pass_type.hPass 源码目录framework/src/passes/tensor_graph_pass、framework/src/passes/tile_graph_pass、framework/src/passes/block_graph_passPass 校验器framework/src/passes/pass_check配置 Schematile_fwk_config_schema.jsonhost 侧调用链host_machine.cpp、backend.cpp【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表