查看计算图#
功能说明#
计算图描述PyPTO程序计算流程的结构,由多个表达数据的Tensor节点和表达数据操作的Operation节点组成。它通过有向无环图(DAG)的形式表示数据流动和计算逻辑。PyPTO中的计算图与GE(Graph Engine)计算图的概念有所不同,PyPTO的计算图包括Tensor Graph、Tile Graph、Block Graph、Execute Graph,表征了PyPTO程序从抽象计算描述到硬件执行的完整编译流程。本节介绍如何查看计算图及计算图上展示的关键信息。
前提条件#
执行PyPTO程序,生成计算图文件。
开启图编译阶段调试模式开关:
@pypto.frontend.jit( debug_options={"compile_debug_mode": 1} )
重新执行PyPTO程序,例如:
python3 examples/02_intermediate/operators/softmax/softmax.py执行结束后,在${work_path}/output/output_*/目录(*代表时间戳)下生成不同阶段的计算图文件(.json 格式)。
output_xx/ ├── program.json # 记录function name, semantic label等静态信息 ├── computation_graph/ │ ├── Strategy_00_xxx/ │ │ ├── Pass_00_xxx/ │ │ │ ├── After_xxx_xxx.json # pass优化后的计算图文件 │ │ │ ├── After_xxx_xxx.tifwkgr # 用户暂不需要关注 │ │ │ ├── Before_xxx_xxx.json # pass优化前的计算图文件 │ │ │ ├── Before_xxx_xxx.tifwkgr # 用户暂不需要关注 │ │ │ └── xxx.log │ │ ├── Pass_01_xxx/ │ │ │ └── … │ │ └── … │ ├── Strategy_01_xxx/ │ │ ├── Pass_00_xxx/ │ │ │ └── … │ │ └── … │ └── … └── … ```
下面将选取计算图各编译阶段的最后一张计算图文件,帮助用户了解各类计算图的关键信息。
Tensor Graph:Before_004_ExpandFunction_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8.json
Tile Graph:Before_027_SubgraphToFunction_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8.json
Block Graph:After_037_CodegenPreproc_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8_LEAF_program_id_00_15536366383870408930.json
Execute Graph:After_037_CodegenPreproc_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8_ROOT.json
查看Tensor Graph#
打开计算图文件,下面提供两种方式,用户任选其一即可:
在Visual Studio Code侧边栏,单击
图标,打开PyPTO Toolkit,在运行结果界面打开计算图文件(此种方式仅支持打开文件命名以After开头的图)。在Visual Studio Code工作区,右键单击计算图文件,在弹出的菜单中选择“PyPTO Toolkit:打开文件”。
打开Before_004_ExpandFunction_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8.json文件,显示以下界面。

通过上方标题右侧可以看到计算图类型为Tensor Graph。Tensor Graph由以下几部分组成:
Incast/Outcast节点:数据源/数据结果节点,对应图中标号①,各参数解释参见表1。
Tensor节点:数据节点,对应图中标号②,各参数解释参见表2。
Operation节点:操作节点,对应图中标号③,各参数解释参见表3。
从图中可以看到,Tensor Shape和代码定义一致,且没有经过Tile展开。
参数
说明
节点名称
计算图的Incast/Outcast节点名称,在卡片标题中展示。例如上图中的TENSOR_1。
Magic ID
节点的唯一标识,对应卡片右上角的数字。例如上图中的7。
rawTensor_MagicID
节点所属的逻辑内存块编号,一块rawTensor内存会分配给多个Tensor。对应卡片标题后面括号中的数字。例如上图中的8。
shape
节点的形状信息,为整数数组。
rawshape
rawTensor的形状信息。
offset
当前Tensor在rawTensor内存中的偏移量,为整数数组。
datatype
数据类型。
参数
说明
节点名称
计算图的Tensor节点名称,在卡片标题中展示。例如上图中的INCAST_LOCAL_BUF0。
Magic ID
节点的唯一标识,对应卡片右上角的数字。例如上图中的8。
rawTensor_MagicID
节点所属的逻辑内存块编号,一块rawTensor内存会分配给多个Tensor。对应卡片标题后面括号中的数字。例如上图中的9。
shape
Tensor节点的形状信息,为整数数组。
rawshape
rawTensor的形状信息。
offset
当前Tensor在rawTensor内存中的偏移量,为整数数组。
datatype
数据类型。
参数
说明
节点名称
计算图的Operation节点名称,例如上图中的TILE_VIEW。
Magic ID
当前Operation的Magic ID,一张图中Operation的Magic ID唯一。例如上图中的10007。
shape
被处理Tensor的形状信息,为整数数组。
from
Operation的源操作数据的内存层级,即经过该操作前所处的内存层级,与前一个Tensor节点tobe字段一致。
to offset
Operation的目的操作数据相对于源操作数据的内存偏移量。
查看Tile Graph#
打开Before_027_SubgraphToFunction_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8.json文件,显示以下界面。

通过上方标题右侧可以看到计算图类型为Tile Graph。Tile Graph由以下几部分组成:
Incast/Outcast节点:数据源/数据结果节点,对应图中标号①,各参数解释参见表1。
Tensor节点:数据节点,对应图中标号②,各参数解释参见表2。
Operation节点:操作节点,对应图中标号③和④,两者的区别是④这类Operation与输入/输出Tensor的Shape无关,因此无Shape属性,详细参数解释参见表3。
从图中可以看到,相比于Tile展开前,Tile Graph中增加了很多节点,这是因为原Shape为(-1, 32, 1, 256)的Tensor经过Tile展开,切分成Shape为(1, 4 ,1, 64)的Tile。同时,为Tile分配内存层级(对应图中asis-原地址,tobe-目的地址),并将Tensor前后关联的Operation节点进行切分和处理(例如图中TILE_COPY_IN和TILE_COPY_OUT等)。
查看Block Graph#
打开After_037_CodegenPreproc_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8_LEAF_program_id_00_15536366383870408930.json,显示以下界面。

通过上方标题右侧可以看到计算图类型为Block Graph。Block Graph由以下几部分组成:
Incast/Outcast节点:数据源/数据结果节点,对应图中标号①,各参数解释参见表1。
Tensor节点:对应图中标号②,各参数解释参见表2。
Operation节点:对应图中标号③和④,两者的区别是例如④这类Operation与输入/输出Tensor的Shape无关,因此无Shape属性,详细参数解释参见表3。
从图中可以看到,在Block Graph阶段,Tile Graph被切成若干子图,每一个子图对应一个Block Graph,因此相比Tile Graph,Block Graph的规模明显减少。
当前sample被切分成多个结构相同的子图(简称同构子图),因此Pass_36_CodegenPreproc目录下仅有一个文件名称包含After_036_CodegenPreproc_*_LEAF_*关键字的json文件。
查看Execute Graph#
打开After_037_CodegenPreproc_TENSOR_loop_0_Unroll1_PATH0_hiddenfunc0_8_ROOT.json文件,显示以下界面。

通过上方标题右侧可以看到计算图类型为Execute Graph。Execute Graph由以下几部分组成:
Incast/Outcast节点:数据源/数据结果节点,对应图中标号①,各参数解释参见表1。
调用节点:带有fx标识,表示对Block Graph进行一次调用,对应图中标号②,各参数解释参见表4。双击调用节点,可以查看对应的Block Graph子图信息,了解具体的执行过程。
参数
说明
调用节点名称
调用节点仅在Execute Graph中显示,节点卡片右下方带有fx标识。节点名称带有CALL前缀,作为可调度运行在AI Core上的Block Graph子图的入口节点。双击调用节点可以跳转到Block Graph子图。
Subgraph ID
所在的子图的ID。
InCast
输入Tensor的Magic ID列表。
OutCast
输出Tensor的Magic ID列表。
calleehash
调用函数的hash值。
其他操作#
在计算图页面支持拖拽查看、缩略图查看,以及节点的缩放、点击查看节点详情。