图编译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代码如下,该脚本的目标是实现简单的乘法。
-
开启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原生开启环境变量时创建的目录,默认在当前脚本路径下。分布式场景下,运行目录名会在末尾追加
-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接口。