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
TORCH_LOGS="+fusion,+kernel_code" python my_script.py
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 行为、调试性能问题或二次开发的重要工具。