图编译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及之后的版本,才会有该文件生成,否则不会生成。 |
使用约束
- 使用该功能时,需通过配置torch.compile的backend="npugraph_ex"进行编译,不支持自定义后端。
- 本功能支持的产品型号参见使用说明。
使用方法
在执行脚本前,先在终端设置环境变量:
export TORCH_COMPILE_DEBUG=1
python main.py
假设待执行的脚本main.py代码如下,该脚本的目标是实现简单的乘法。
-
开启Dynamo日志。
-
设置图编译模式。
-
构造一个随机输入,设置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原生开启环境变量时创建的目录,默认在当前脚本路径下。
torch_compile_debug/run_<时间>-pid_<进程号> ├── torchair │ ├── 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日志