图编译Debug信息保存功能

功能简介

为方便问题定位过程中的信息收集,npugraph_ex通过复用PyTorch原生DEBUG环境变量TORCH_COMPILE_DEBUG,当其设置为1时,将自动开启所有必要的日志打印与文件Dump。

图 1 图编译示意图

开启本功能后,图编译过程中能自动收集的关键调试信息如上图所示 ,详细说明参见下表。

表 1 信息收集表

信息类型 说明
日志信息 PyTorch原生Dynamo日志
npugraph_ex 日志
Debug信息 AOT前的GraphModule
AOT后的GraphModule
每个公共Pass处理后的FX图(txt文件)
aclgraph优化中不同Pass处理后的FX图(txt文件)
aclgraph编译后的FX图结构信息(output_code.py文件)
aclgraph在Capture阶段捕获的模型运行实例信息(*.json文件)
注意:仅当配套的CANN版本是8.5.0及之后的版本,才会有该文件生成,否则不会生成。

使用约束

  • 使用compile_fx开启该功能时,不会收集AOT前的GraphModule文件dynamo_out_graph.txt
  • 分布式场景下,需在脚本开头import npugraph_ex,确保debug目录能正确创建。
  • 本功能支持的产品型号参见使用说明

使用方法

在执行脚本前,先在终端设置环境变量:

export TORCH_COMPILE_DEBUG=1
python main.py

假设待执行的脚本main.py代码如下,该脚本的目标是实现简单的乘法。

  1. 开启Dynamo日志。

  2. 设置图编译模式。

  3. 构造一个随机输入,设置dynamic=False及requires_grad=False,执行了一次推理。

    import logging
    import torch
    import torch_npu
    
    # 开启Dynamo日志
    torch._logging.set_logs(dynamo=logging.DEBUG, aot=logging.DEBUG, output_code=True, graph_code=True)
    class Model(torch.nn.Module):
        def forward(self, x):
            return 2 * x
    
    model = Model().npu()
    model = torch.compile(model, backend="npugraph_ex", dynamic=False, fullgraph=True)
    x = torch.randn(20, 20, requires_grad=False).npu()
    out = model(x)
    

    运行示例脚本,编译过程中必要的Debug信息产物目录结构如下,仅供参考,具体取决于实际开启的Pass数量。“torch_compile_debug”为PyTorch原生开启环境变量时创建的目录,默认在当前脚本路径下。分布式场景下,运行目录名会在末尾追加-rank_<rank_id>(例如torch_compile_debug/run_<时间>-pid_<进程号>-rank_<rank_id>)。

    torch_compile_debug
    ├── run_<时间>-pid_<进程号>
    │   ├── npugraph_ex
    │   │   ├── debug.log                                                 # npugraph_ex日志
    │   │   ├── model__0                                                  # model__0为模型ID
    │   │   │   ├── forward                                               # 前向推理
    │   │   │   │   ├── output_code.py                                    # 编译后的图结构文件
    │   │   │   │   ├── 000_aot_forward_graph.txt                         # AOT后的GraphModule
    │   │   │   │   ├── 001_aot_forward_graph_after_${pass1_name}.txt     # 公共图优化过程中每个Pass的输出FX图
    │   │   │   │   ├── 002_aot_forward_graph_after_${pass2_name}.txt
    │   │   │   │   ├── 003_aot_forward_graph_after_${pass5_name}.txt     # aclgraph优化中不同pass处理后的FX图
    │   │   │   │   ├── 004_aot_forward_graph_after_${pass6_name}.txt
    │   │   │   │   ├── ......                                            # 其他Pass优化
    │   │   │   ├── dynamo_out_graph.txt                                  # AOT前的GraphModule
    │   │   │   ├── graph_1_id_${aclgraph_id}_rank_${rank_id}_pid_${pid}_ts_${timestamp}.json      # 捕获的模型运行实例信息
    │   └── torchdynamo
    │       └── debug.log                                                 # Torch原生Dynamo日志
    └── ...                                                               # Torch原生其他产物
    
    

    说明

    模型运行实例信息通过Runtime提供的接口获取,使用方法和说明详见CANN社区《Runtime运行时API》中“模型运行实例管理”章节的aclmdlRIDebugJsonPrint接口。