PyTorch 的 TORCH_LOGS 环境变量用于控制编译流程中各个阶段的日志输出。通过设置不同的模块名称,可以打印出对应阶段的详细信息,帮助调试或理解 torch.compile 的内部过程。


1. 使用方法

  • 设置环境变量:export TORCH_LOGS="+module1,+module2"TORCH_LOGS="module1,module2"
  • 使用 + 表示添加到默认日志(默认只有错误),- 表示排除某个模块
  • 使用 all 打开所有日志
  • 使用 help 查看所有可用模块(例如 TORCH_LOGS=help python script.py

2. 常用模块及对应阶段

前端捕获(TorchDynamo)

模块名 打印内容
dynamo 图捕获的整体信息,如进入/退出编译、guard 失败、图断裂等
guards 记录并打印生成的 guards(形状/类型假设)
bytecode 显示 Dynamo 处理前后的 Python 字节码
graph 打印捕获到的 FX 图(可读形式)
graph_code 打印 FX 图的 Python 代码表示
output_code 打印最终生成的内核源码(包括 Triton/C++)
recompiles 打印触发重新编译的原因

自动微分与分解(AOTAutograd)

模块名 打印内容
aot_autograd AOTAutograd 的总体信息,如前向/反向图生成
aot_graphs 打印 AOTAutograd 生成的前向和反向图
aot_joint_graph 打印前向+反向联合图(优化前)
aot_forward_graph 仅打印前向图
aot_backward_graph 仅打印反向图
decompositions 打印算子分解过程

后端编译(Inductor)

模块名 打印内容
inductor Inductor 的总体调度信息,如融合决策、内存规划
schedule 打印调度器生成的节点及融合情况
fusion 详细显示算子融合的过程
kernel_code 打印每个生成的内核源码(C++ 或 Triton)
triton Triton 内核相关的编译信息
cpp C++ 代码生成相关信息
autotuning 自动调优过程
memory 内存规划与 buffer 复用信息

执行与运行时

模块名 打印内容
dispatch 算子分发信息
runtime 内核运行时的日志
perf_hints 性能提示(如出现拷贝、未融合等)

3. 示例

1
2
3
4
5
6
7
8
9
10
11
# 查看所有日志(会非常详细)
TORCH_LOGS=all python my_script.py

# 只打印 Inductor 的融合和内核代码
TORCH_LOGS="+fusion,+kernel_code" python my_script.py

# 打印 Dynamo 的图捕获和重编译原因
TORCH_LOGS="+dynamo,+recompiles" python my_script.py

# 查看可用模块列表
TORCH_LOGS=help python my_script.py

4. 高级用法:日志输出到文件

结合 TORCH_LOGS 和标准输出重定向,可以将日志保存到文件:

1
TORCH_LOGS="+inductor,+kernel_code" python script.py 2>&1 | tee compile.log

这些日志模块覆盖了从 Python 代码捕获到最终内核执行的完整流程,是理解 torch.compile 行为、调试性能问题或二次开发的重要工具。