dump图详细信息
模型转换前,通过设置如下环境变量,dump出编译过程中的模型图,用户可以通过查看dump图观察模型的变化:
export DUMP_GE_GRAPH=1 #控制dump图的内容多少
export DUMP_GRAPH_LEVEL=1 #控制dump图的个数
在执行atc命令的当前路径会生成如下文件,关于环境变量的详细介绍请参见2。
-
ge_onnx*.pbtxt:基于ONNX的模型描述结构,可以使用Netron等可视化软件打开。
-
ge_proto*.txt:protobuf格式存储的文本文件,该文件可以转成JSON格式文件方便用户定位问题。该文件与ge_onnx*.pbtxt一般成对出现,但是ge_proto*.txt比ge_onnx*.pbtxt文件会多string类型的属性信息,因此ge_proto*.txt显示得更完整,用户选择其中一种文件打开。
由于ge_proto*.txt文件结构相比ge_onnx*.pbtxt已经做了文件大小的优化,因此DUMP_GE_GRAPH环境变量设置为2或3,对ge_proto*.txt文件效果相同,都显示为不含有权重等数据的基本版dump。
-
ge_readable*.txt:(可选)类似Dynamo fx图风格的高可读性文本文件。该类型的文件只在设置了DUMP_GRAPH_FORMAT环境变量,且取值中包括“readable”才会生成。
上述每个文件对应模型编译过程中的一个步骤,比如以ge_onnx_xxxx_PreRunBegin.pbtxt开始,以ge_onnx_xxxx_PreRunAfterBuild.pbtxt结尾。每个文件中包括完成该步骤所涉及的所有算子,关于dump图每个阶段的子图详细作用请参见下表(每个模型生成的dump子图可能不一致,但是主流程基本一致)。
表 1 dump图详细信息说明
| 序号 | 子图名称 | 涉及组件 | 所处阶段描述 | 是否白名单 |
|---|---|---|---|---|
| 1 | ge_proto_xxxx_GraphPreRunBegin.txt | GE | Graph编译前的图 | - |
| 2 | ge_proto_xxxx_AfterFlowGraphPartition.txt | GE | Flow切分后的图(flow切分是应用于DataFlow中的切分方式) | - |
| 3 | ge_proto_xxxx_AfterParallelPartitioner.txt | GE | pipeline并行切分后的图(这里的pipeline指后端推理场景的PP) | - |
| 4 | ge_proto_xxxx_PreRunBegin.txt | GE | 原始图结构 | 白名单 |
| 5 | ge_proto_xxxx_RunCustomPassBeforeInfershape.txt | GE | 在InferShape之前用户自定义Pass的出口图 | 白名单 |
| 6 | ge_proto_xxxx_PreRunAfterInitPreparation.txt | FE | 经历了图准备阶段所有初始化处理之后的图结构 | - |
| 7 | ge_proto_xxxx_PreRunAfterHandleSummaryOp.txt | GE | 对Summary节点做处理之后的图结构 | - |
| 8 | ge_proto_xxxx_PrepareAfterCheckAndUpdateInput.txt | GE | 校验并更新图输入数据处理之后的图结构 | - |
| 9 | ge_proto_xxxx_PrepareAfterGraphEquivalentTransformation.txt | GE | 将For循环图结构同等替换成While循环图结构处理之后的图结构 | - |
| 10 | ge_proto_xxxx_PrepareAfterProcessOutput.txt | GE | 对图数据进行相关处理之后的图结构 | - |
| 11 | ge_proto_xxxx_PrepareAfterOptimizeAfterGraphNormalization.txt | GE | 图标准化后图优化操作出口图 | - |
| 12 | ge_proto_xxxx_PrepareAfterInsertAipp.txt | GE | 在配置了AIPP参数下,对图进行AIPP相关处理之后的图结构 | - |
| 13 | ge_proto_xxxx_PrepareAfterProcessAippNodesDataFormat.txt | GE | AIPP节点格式刷新出口图 | - |
| 14 | ge_proto_xxxx_PreRunAfterNormalizeGraph.txt | GE | 图标准化出口图 | 白名单 |
| 15 | ge_proto_xxxx_PreRunAfterOptimizeGraphInit.txt | GE | 图优化初始化出口图 | - |
| 16 | ge_proto_xxxx_OptimizeGraph_TagNoConstFoldingAfter.txt | FE | 量化场景使用,FE会给算子打上不做常量折叠标签,GE在执行常量折叠时会判断此标签,如果存在,则不执行常量折叠 | - |
| 17 | ge_proto_xxxx_HcclAfterOptimizeGraphPrepare.txt | HCCL | HCCL图准备阶段优化后的图 | - |
| 18 | ge_proto_xxxx_PreRunAfterOptimizeGraphPrepare.txt | GE | 经过各算子信息库原图准备处理(OptimizeGraphPrepare接口调用)之后的图结构 | - |
| 19 | ge_proto_xxxx_PrepareAfterProcessBeforeInfershape.txt | GE | 对条件算子进行死边消除处理之后的图结构 | - |
| 20 | ge_proto_xxxx_AfterFirstInferformat.txt | GE | 经过全图inferformat处理之后的图结构 | - |
| 21 | ge_proto_xxxx_AfterInfershape.txt | GE | 经过全图infershape处理之后的图结构,会伴随常量折叠 | 白名单 |
| 22 | ge_proto_xxxx_PrepareAfterInferFormatAndShape.txt | GE | 经历完所有InferFormat与InferShape处理之后的图结构,与上图间经历了第二次全图InferFormat | - |
| 23 | ge_proto_xxxx_RunCustomPass_AfterInferShape.txt | GE | 在InferShape之后用户自定义Pass的出口图 | 白名单 |
| 24 | ge_proto_xxxx_AfterSecondInferformat.txt | GE | 第二次格式推导之后的图 | - |
| 25 | ge_proto_xxxx_PrepareAfterCtrlFlowPreProcess.txt | GE | 对条件算子做预处理之后的图结构 | - |
| 26 | ge_proto_xxxx_PrepareAfterGetDynamicOutputShape.txt | GE | 动态档位下,对图输出做处理之后的图结构 | - |
| 27 | ge_proto_xxxx_PrepareAfterProcessAippStage2.txt | GE | 在AIPP模式下,对图输入节点做相关处理之后的图结构 | - |
| 28 | ge_proto_xxxx_PrepareAfterPrepareOptimize.txt | GE | 在图准备阶段,做相关优化处理之后的图结构 | - |
| 29 | ge_proto_xxxx_PreRunAfterPrepare.txt | GE | 目前和上张图相同,经历过所有图准备处理之后的图结构 | 白名单 |
| 30 | ge_proto_xxxx_OptimizeQuantGraph_FeGraphFusionAfter.txt | FE | 图优化阶段的量化流程结束后的图结构 | - |
| 31 | ge_proto_xxxx_OptimizeOriginalGraph_FeGraphFusionAfter.txt | FE | 图融合流程结束后的图结构 | - |
| 32 | ge_proto_xxxx_OptimizeOriginalGraph_FeTopoSortingAfter.txt | FE | 图融合后进行拓扑排序,排查融合后是否成环的图结构 | - |
| 33 | ge_proto_xxxx_OptimizeOriginalGraph_DSAFeOpJudgeAfter.txt | FE | 经过动态shape分析后的格式DataType和Format选择的图 | - |
| 34 | ge_proto_xxxx_HcclBeforeOptimizeOriginalGraph.txt | HCCL | HCCL原图优化之前的图 | - |
| 35 | ge_proto_xxxx_HcclAfterOptimizeOriginalGraph.txt | HCCL | HCCL原图优化之后的图 | - |
| 36 | ge_proto_xxxx_RunCustomPassAfterBuiltinFusionPass.txt | GE | 内部Pass之后用户自定义Pass的出口图 | 白名单 |
| 37 | ge_proto_xxxx_PreRunAfterOptimizeOriginalGraph.txt | GE | 经过各算子信息库原图优化处理(OptimizeOriginalGraph接口调用)之后的图结构 | 白名单 |
| 38 | ge_proto_xxxx_PrepareAfterUpdateInputOutputByUserOptions.txt | GE | 根据用户参数,对图输入输出做相关处理之后的图结构 | - |
| 39 | ge_proto_xxxx_PrepareAfterUpdateVariableFormats.txt | GE | 对变量的Format进行相关处理之后的图结构 | - |
| 40 | ge_proto_xxxx_PreRunAfterPrepareRunningFormatRefiner.txt | GE | 与上图相同 | - |
| 41 | ge_proto_xxxx_BeforeOptimizeOriginalGraphJudgeInsert.txt | FE | op_judge流程的入口图 | - |
| 42 | ge_proto_xxxx_OptimizeOriginalGraph_FeOpDtypeJudgeAfter.txt | FE | 精度模式选择后的图 | - |
| 43 | ge_proto_xxxx_PreRunAfterRefineRunningPrecision.txt | GE | 精度选择之后的图 | - |
| 44 | ge_proto_xxxx_AfterPrecisionRefine.txt | GE | 精度选择之后经过转换算子融合生成的图 | - |
| 45 | ge_proto_xxxx_PreRunAfterAfterPrecisionRefine.txt | GE | 精度选择之后经过转换算子融合,再经过自动融合生成的图 如果未开启自动融合功能,该子图的内容会和 ge_proto_xxxx_AfterPrecisionRefine.txt子图内容一致 |
- |
| 46 | ge_proto_xxxx_OptimizeOriginalGraph_FeOpFormatJudgeAfter.txt | FE | 格式选择后完整op_judge的图 | - |
| 47 | ge_proto_xxxx_OptimizeOriginalGraph_FeDistHeavyFormatAfter.txt | FE | 重型算子扩散后的图结构 | - |
| 48 | ge_proto_xxxx_OptimizeOriginalGraph_FeInsertTransNodeAfter.txt | FE | 插入转换算子后的图结构 | - |
| 49 | ge_proto_xxxx_PreRunAfterRefineRunningFormat.txt | GE | 经过各算子信息库优化处理(OptimizeOriginalGraphJudgeInsert接口调用)之后的图结构 | - |
| 50 | ge_proto_xxxx_PreRunAfterSubexpressionMigration.txt | GE | 动态分档场景下公共子表达式提取之后的图结构 | - |
| 51 | ge_proto_xxxx_before_SameTransdataBreadthFusionPass.txt | GE | SameTransdataBreadthFusionPass入口图 | - |
| 52 | ge_proto_xxxx_after_SameTransdataBreadthFusionPass.txt | GE | SameTransdataBreadthFusionPass出口图 | - |
| 53 | ge_proto_xxxx_OptimizeStage1_1.txt | GE | 图优化1_1阶段处理之后的图结构 | - |
| 54 | ge_proto_xxxx_OptimizeStage1_2.txt | GE | 图优化1_2阶段处理之后的图结构 | - |
| 55 | ge_proto_xxxx_PreRunAfterOptimize1.txt | GE | 所有图优化1阶段处理之后的图结构 | - |
| 56 | ge_proto_xxxx_PreRunAfterOptimizeAfterStage1.txt | GE | 经过各算子信息库优化处理(OptimizeAfterStage1接口调用)之后的图结构 | 白名单 |
| 57 | ge_proto_xxxx_RunCustomPassAfterOriginGraphOptimize.txt | GE | 在原图优化阶段后执行自定义pass | 白名单 |
| 58 | ge_proto_xxxx_PreRunAfterInferShape2.txt | GE | 第二次InferShape处理之后的图结构 | - |
| 59 | ge_proto_xxxx_BeforeStagePartition.txt | GE | Stage切分前的图 | - |
| 60 | ge_proto_xxxx_AfterStagePartition.txt | GE | Stage切分后的图 | - |
| 61 | ge_proto_xxxx_AfterEnginePlacer.txt | GE | 引擎选择完成后的图 | - |
| 62 | ge_proto_xxxx_Before_DSP.txt | GE | 动静模型拆分前的图 | - |
| 63 | ge_proto_xxxx_After_DSP.txt | GE | 动静模型拆分后的图 | - |
| 64 | ge_proto_xxxx_AfterDynamicShapePartition.txt | GE | 动态shape图拆分之后的图结构 | - |
| 65 | ge_proto_xxxx_MergedComputeGraphAfterCompositeEnginePartition.txt | GE | 经历独立子图拆分与子图优化处理之后的合并图结构 | - |
| 66 | ge_proto_xxxx_partition0_rank0_inputNodeGraph_AtomicEnginePartitioning.txt | GE | 原子引擎规则图拆分后,输入节点子图的图结构 | - |
| 67 | ge_proto_xxxx_partition0_rank1_new_sub_graph1_AtomicEnginePartitioning.txt | GE | 原子引擎规则图拆分后,子图1的图结构 | - |
| 68 | ge_proto_xxxx_partition0_rank2_new_sub_graph110_AtomicEnginePartitioning.txt | GE | 原子引擎规则图拆分后,子图110的图结构 | - |
| 69 | ge_proto_xxxx_OptimizeSubgraphPreProc.txt | GE | 子图优化预处理出口图 | - |
| 70 | ge_proto_xxxx_DNN_VM_RTS_OptimizeSubGraphBefore.txt | RTS | - | - |
| 71 | ge_proto_xxxx_DNN_VM_RTS_OptimizeSubGraphAfter.txt | RTS | - | - |
| 72 | ge_proto_xxxx_AIcoreEngine_OptimizeSubGraphBefore.txt | FE | AI Core子图优化入口图 | - |
| 73 | ge_proto_xxxx_OptimizeSubGraphBefore.txt | GE | 子图优化操作前的子图结构,每张子图都有一份,同名不同序号,总个数根据子图个数确定 | - |
| 74 | ge_proto_xxxx_OptimizeSubGraphAfter.txt | GE | 子图优化操作后的子图结构,每张子图都有一份,同名不同序号,总个数根据子图个数确定 | - |
| 75 | ge_proto_xxxx_partition0_rank1_new_sub_graph1_lxfusion_input.txt | AOE(lxfusion) | ATC场景和AOE baseline场景的sgat输入图 | - |
| 76 | ge_proto_xxxx_partition0_rank1_new_sub_graph1_after_rebuild.txt | AOE(lxfusion) | AOE sgat内部流程UB融合图 | - |
| 77 | ge_proto_xxxx_AIcoreEngine_OptimizeSubGraphAfter.txt | FE | AI Core子图优化出口图 | - |
| 78 | ge_proto_xxxx_OptimizeSubgraphPostProc.txt | GE | 子图优化后处理出口图 | - |
| 79 | ge_proto_xxxx_mergedComputeGraph.txt | GE | 图合并之后的图结构,与上图相同 | - |
| 80 | ge_proto_xxxx_MergedComputeGraphAfterAtomicEnginePartition.txt | GE | 经历独立原子引擎拆分与子图优化处理之后的合并图结构 | - |
| 81 | ge_proto_xxxx_PreRunAfterOptimizeSubgraph.txt | GE | 子图优化处理之后的图结构 | 白名单 |
| 82 | ge_proto_xxxx_OptimizeWholeGraphaicpu_tf_optimizer.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 83 | ge_proto_xxxx_OptimizeWholeGraphaicpu_ascend_optimizer.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 84 | ge_proto_xxxx_OptimizeWholeGraphdvpp_graph_optimizer.txt | GE | 整图优化DVPP优化后出口图 | - |
| 85 | ge_proto_xxxx_OptimizeWholeGraphhccl_alltoallvc_fusion_optimizer.txt | HCCL | HCCL原图优化阶段融合优化后的图 | - |
| 86 | ge_proto_xxxx_OptimizeWholeGraphAIcoreEngine.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 87 | ge_proto_xxxx_OptimizeWholeGraphDSAEngine.txt | FE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 88 | ge_proto_xxxx_OptimizeWholeGraphhccl_graph_optimizer.txt | HCCL | HCCL原图优化阶段优化的图 | - |
| 89 | ge_proto_xxxx_OptimizeWholeGraphDNN_VM_RTS_GRAPH_OPTIMIZER_STORE.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 90 | ge_proto_xxxx_OptimizeWholeGraphDNN_VM_RTS_FFTS_PLUS_GRAPH_OPTIMIZER_STORE.txt | RTS | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 91 | ge_proto_xxxx_OptimizeWholeGraphDNN_VM_HOST_CPU_OPTIMIZER.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 92 | ge_proto_xxxx_OptimizeWholeGraphge_local_graph_optimizer.txt | GE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 93 | ge_proto_xxxx_OptimizeWholeGraphffts_plus.txt | FE | 调用各引擎的原图优化接口后的图信息,OptimizeWholeGraph后为引擎名称 | - |
| 94 | ge_proto_xxxx_PreRunAfterOptimizeWholeGraph.txt | GE | 经过各算子信息库优化处理(OptimizeWholeGraph接口调用)之后的图结构 | - |
| 95 | ge_proto_xxxx_PreRunAfterOptimize2.txt | GE | 所有图优化2阶段处理之后的图结构 | - |
| 96 | ge_proto_xxxx_PreRunAfterOptimizeGraphBeforeBuild.txt | GE | 模型编译入口图 | 白名单 |
| 97 | ge_proto_xxxx_PreRunAfterOptimizeTensorMove.txt | GE | 优化冗余TensorMove节点之后的图 | - |
| 98 | ge_proto_xxxx_BeforeHandleMemConflict.txt | GE | 处理内存冲突之前的图 | - |
| 99 | ge_proto_xxxx_AfterHandleMemConflict.txt | GE | 处理内存冲突之后的图 | - |
| 100 | ge_proto_xxxx_BeforeHandleMemoryLayoutConflict.txt | GE | 解决内存排布冲突入口图 | - |
| 101 | ge_proto_xxxx_PreRunAfterMemConflictProc.txt | GE | 解决内存读写冲突出口图 | - |
| 102 | ge_proto_xxxx_partition0_rank0_inputNodeGraph_SecondPartitioning.txt | GE | 二拆操作后,输入节点子图的图结构 | - |
| 103 | ge_proto_xxxx_partition0_rank1_new_sub_graph1_SecondPartitioning.txt | GE | 二拆操作后,子图1的图结构 | - |
| 104 | ge_proto_xxxx_partition0_rank2_new_sub_graph110_SecondPartitioning.txt | GE | 二拆操作后,子图110的图结构 | - |
| 105 | ge_proto_xxxx_BeforeUnfoldSubgraphs.txt | GE | 动态shape图展开之前的图 | - |
| 106 | ge_proto_xxxx_AfterUnfoldSubgraphs.txt | GE | 动态shape图展开之后的图 | - |
| 107 | ge_proto_xxxx_RunCustomPass_BeforeAssignLogicStream{pass_name}.txt | GE | 用户自定义流分配Pass处理之前的图 | 白名单 |
| 108 | ge_proto_xxxx_RunCustomPass_AfterAssignLogicStream{pass_name}.txt | GE | 用户自定义流分配Pass处理之后的图 | 白名单 |
| 109 | ge_proto_xxxx_AfterAssignResource.txt | GE | 流分配、内存分配、GenTask之后的图 | - |
| 110 | ge_proto_xxxx_Build.txt | GE | 模型编译出口图 | 白名单 |
| 111 | ge_proto_xxxx_PreRunAfterBuild.txt | GE | 与上图相同 | - |
| 112 | ge_proto_xxxx_BeforeAttrsCompress.txt | GE | 离线模型压缩前的图 | - |
| 113 | ge_proto_xxxx_AfterAttrsCompress.txt | GE | 离线模型压缩后的图 | - |
| 114 | ge_proto_xxxx_BeforeAttrsDecompress.txt | GE | 离线模型解压前的图 | - |
| 115 | ge_proto_xxxx_AfterAttrsDecompress.txt | GE | 离线模型解压后的图 | - |
| 116 | ge_proto_xxxx_ComputeGraphBeforeLowering.txt | GE | lowering前的计算图 | 白名单 |
| 117 | ge_proto_xxxx_Before_MultiStream_LoweringFirstLastEventSync.txt | GE | 多流插入Event之前的执行图 | - |
| 118 | ge_proto_xxxx_ExeGraphBeforeOptimize.txt | GE | 执行图优化前的执行图 | 白名单 |
| 119 | ge_proto_xxxx_AfterZeroCopy.txt | GE | 零拷贝优化之后的执行图 | - |
| 120 | ge_proto_xxxx_AfterCEM.txt | GE | CEM优化之后的执行图 | - |
| 121 | ge_proto_xxxx_AfterCopyFlowLaunch.txt | GE | 随路拷贝优化后的执行图 | - |
| 122 | ge_proto_xxxx_TrustOutTensorAfter.txt | GE | TrustOutTensor优化之后的执行图 | - |
| 123 | ge_proto_xxxx_AfterAicpuFuseHostInputs.txt | GE | AicpuFuseHostInputs优化之后的图 | - |
| 124 | ge_proto_xxxx_ExecuteGraphAfterSplit.txt | GE | 动态shape最终的执行图 | 白名单 |