• 文档 >
  • torch.utils.bottleneck
快捷键

torch.utils.bottleneck

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

在命令行上运行它

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

where [args] are any number of arguments to script.py, or run python -m torch.utils.bottleneck -h for more usage instructions.

警告

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

警告

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

注意

要决定查看哪种(CPU-only 模式或 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 代码,第一个运行的剖析器(cProfile)将包括 CUDA 启动时间(CUDA 缓冲区分配成本)在其时间报告中。如果你的瓶颈导致代码比 CUDA 启动时间慢得多,这不应该有问题。

对于更复杂的剖析器使用(如多 GPU 情况),请参阅 https://docs.python.org/3/library/profile.html 或 torch.autograd.profiler.profile() 获取更多信息。


© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,主题由 Read the Docs 提供。

文档

PyTorch 开发者文档全面访问

查看文档

教程

获取初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源