目录

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有助于在Intel平台上进一步分析性能,使用torch.autograd.profiler.emit_itt()

警告

如果你正在分析CUDA代码,第一个运行的分析器bottleneck(cProfile)将在其时间报告中包括CUDA启动时间(CUDA缓冲区分配成本)。如果您的瓶颈导致代码运行速度远慢于CUDA启动时间,则这一点不应造成影响。

对于在多GPU情况等更复杂的profiler用法, 请参见 https://docs.python.org/3/library/profile.htmltorch.autograd.profiler.profile() 以获取更多信息。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源