如何查看运行的CUDA内核/代码?PyTorch场景下的方案问询
查看PyTorch运行时生成的CUDA内核代码方案
一、Windows环境下的可行方法
1. 通过NSight Compute捕获内核细节
- 打开NSight Compute,创建新的性能分析会话,选择运行你的PyTorch脚本或附加到已启动的Python进程。
- 当模型执行forward函数时,NSight Compute会捕获所有运行的CUDA内核。在Kernel Details面板中,你可以查看内核名称、参数,还能通过Source标签查看生成的PTX代码;对于PyTorch JIT动态生成的融合内核,部分场景下可以看到对应的CUDA C++源码。
- 注意:PyTorch的ATen基础内核多为预编译版本,源码信息有限,但动态生成的优化内核(如融合操作)能提供更详细的代码内容。
2. PyTorch内置调试选项
- 设置环境变量
TORCH_SHOW_CPP_STACKTRACES=1,可以辅助追踪内核调用链路,但无法直接输出CUDA源码。 - 开启JIT profiling模式:执行以下代码后,用
torch.jit.trace或torch.jit.script生成模型,通过module.graph_for(inputs)查看优化后的计算图,可推断哪些操作被融合,但不会直接生成CUDA代码:torch._C._jit_set_profiling_executor(True) torch._C._jit_set_profiling_mode(True)
二、Linux环境下的torch.compile/FX方案
若能切换到Linux环境,这是获取生成CUDA代码最直接的方式:
- 使用
torch.compile编译模型,例如:model = torch.compile(model, mode="max-autotune") - 设置环境变量
TORCH_LOGS="compiler",可以查看编译过程中内核选中、融合的详细日志。 - 设置
TORCH_COMPILE_DEBUG=1,编译完成后,当前目录会生成tmp/torchinductor_<用户名>文件夹,其中包含所有生成的.cu文件,对应每个优化后的CUDA内核。 - 借助FX Graph分析:用
torch.fx.symbolic_trace追踪模型得到FX计算图,可手动分析节点融合情况,再结合inductor生成的.cu文件对应到具体的CUDA实现。
内容的提问来源于stack exchange,提问作者Andrei Gheorghe
相关产品推荐
相关产品推荐

