快速入门#

任务与目标#

本节将通过一个PyPTO程序示例,介绍如何使用PyPTO Toolkit查看计算图结构,并通过泳道图观察相关性能数据。具体目标包括:

  • 生成并查看计算图,通过计算图结构了解计算逻辑和数据流动关系。

  • 生成并查看泳道图,通过泳道图了解任务执行顺序、耗时信息等信息,识别性能瓶颈。

编译与执行PyPTO程序#

下面以Softmax算子为例介绍,样例代码位于pypto开源仓:examples/02_intermediate/operators/softmax/softmax.py。

  1. 切换到样例所在目录,在已安装PyPTO的环境中运行如下命令。

    # 配置 CANN 环境变量
    # 安装完成后请配置环境变量,请用户根据set_env.sh的实际路径执行如下命令。
    # 上述环境变量配置只在当前窗口生效,用户可以按需将以上命令写入环境变量配置文件(如.bashrc文件)。
    
    # 默认路径安装,以root用户为例(非root用户,将/usr/local替换为${HOME})
    source /usr/local/Ascend/ascend-toolkit/set_env.sh
    
    # 设置设备 ID
    export TILE_FWK_DEVICE_ID=0
    
    #执行脚本
    python3 softmax.py
    
  2. 程序执行成功后,显示以下信息。

    Input shape: torch.Size([32, 32, 1, 256])
    Output shape: torch.Size([32, 32, 1, 256])
    Max difference:0.000000
    ✓ Softmax test passed
    

    同时,会在${work_path}/output/output_*/目录(*代表时间戳)下生成编译和执行的结果文件。

查看计算图#

PyPTO程序在编译过程中,会自动生成由Tensor和Operation组合而成的图结构,即计算图。该计算图经过PyPTO编译优化流程,完成从原始计算图到可执行图的编译过程,最终生成可在昇腾硬件环境中运行的可执行代码,以实现实际的计算任务。用户可借助PyPTO Toolkit可视化工具查看计算图中的关键信息。

  1. 右键单击${work_path}/output/output_*/program.json文件,在弹出的菜单中选择“PyPTO Toolkit: 打开文件”。

    program.json文件包含了Execute Graph和Block Graph的汇总信息,图中的关键信息为:左右两边的卡片为Tensor节点(代表输入/输出数据)、中间卡片为调用节点(带有fx标识,双击可以实现信息钻取)。

  2. 双击中间卡片逐层钻取到下图所示的Execute Graph。

    图中不同的色块(CALL:TENSOR_xx)分别代表一个调用节点,表示该计算图被划分成不同的Block Graph子图。

  3. 双击上图的调用节点,可以看到Block Graph子图信息,标识着任务的具体执行过程。

    放大后可以看到图中具体的Tensor和Operation节点信息和连接关系:

查看泳道图#

泳道图用于直观展示计算图的实际调度与执行过程,清晰呈现任务的执行顺序和耗时信息,帮助开发者分析算子性能瓶颈。下面将介绍如何采集泳道图数据,并通过PyPTO Toolkit查看泳道图。

  1. 启动性能数据采集功能。

    @pypto.frontend.jit(
        debug_options={"runtime_debug_mode": 1}
    )
    
  2. 重新执行算子程序。

    python3 softmax.py
    

    在${work_path}/output/output_*/目录(*代表时间戳)下生成泳道图数据文件,文件名为:merged_swimlane.json。

  3. 通过PyPTO Toolkit插件查看泳道图。

    右键单击merged_swimlane.json,在弹出的菜单中选择“PyPTO Toolkit: 打开文件”,如图1所示。

    图 1 泳道图界面

    上图任务面板区域以泳道形式展示各任务序列,每个AIV/AIC线程横向对应一条泳道。泳道中的每一个色块代表一个在其上执行的具体任务,其长度对应任务的耗时,能够直观地反映计算的负载和密集程度。用户可以通过观察相邻泳道之间的空闲间隔(如图中的黑色区域,或称气泡)以及耗时较长的泳道条目,来分析可能存在的性能瓶颈问题。