• Docs >
  • torch.utils.bottleneck
Shortcuts

torch.utils.bottleneck

torch.utils.bottleneck 是一个工具,可以用作调试程序中瓶颈的初始步骤。它总结了使用 Python 分析器和 PyTorch 的 autograd 分析器运行的脚本。

在命令行中运行它

python -m torch.utils.bottleneck /path/to/source/script.py [args]

其中 [args] 是传递给 script.py 的任意数量的参数,或者运行 python -m torch.utils.bottleneck -h 以获取更多使用说明。

警告

因为您的脚本将被分析,请确保它在有限的时间内退出。

警告

由于CUDA内核的异步特性,当针对CUDA代码运行时,cProfile输出和CPU模式autograd分析器可能不会显示正确的计时:报告的CPU时间报告了用于启动内核的时间,但不包括内核在GPU上执行的时间,除非操作进行了同步。进行同步的操作在常规CPU模式分析器下显得非常昂贵。在这些计时不正确的情况下,CUDA模式autograd分析器可能会有所帮助。

注意

要决定查看哪种(仅CPU模式或CUDA模式)自动求导分析器输出,您应该首先检查您的脚本是否受CPU限制(“CPU总时间远大于CUDA总时间”)。如果是CPU限制的,查看CPU模式自动求导分析器的结果将会有所帮助。另一方面,如果您的脚本大部分时间都在GPU上执行,那么从CUDA模式自动求导分析器的输出中寻找负责的CUDA操作符是有意义的。

当然,实际情况要复杂得多,根据您评估的模型部分,您的脚本可能不在那两个极端之一。如果分析器的输出没有帮助,您可以尝试查看 torch.autograd.profiler.emit_nvtx() 的结果与 nvprof。然而,请注意 NVTX 的开销非常高,通常会给出严重偏斜的时间线。同样,Intel® VTune™ Profiler 通过 torch.autograd.profiler.emit_itt() 进一步帮助分析英特尔平台上的性能。

警告

如果你正在分析CUDA代码,bottleneck运行的第一个分析器(cProfile)将包括CUDA启动时间(CUDA缓冲区分配成本)在其时间报告中。如果你的瓶颈导致代码比CUDA启动时间慢得多,这应该不会有影响。

对于更复杂的分析器使用(例如在多GPU情况下),请参阅https://docs.python.org/3/library/profile.htmltorch.autograd.profiler.profile()以获取更多信息。

优云智算