• 文档 >
  • torch.utils.bottleneck
快捷方式

torch.utils.bottleneck

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

在命令行中使用以下命令运行它

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 profiler 可能无法显示正确的时序:报告的 CPU 时间报告用于启动内核的时间量,但不包括内核在 GPU 上执行所花费的时间,除非操作执行同步。在常规 CPU 模式 profiler 下,执行同步操作似乎非常耗时。在时序不正确的情况下,CUDA 模式 autograd profiler 可能会有所帮助。

注意

要决定查看哪个(仅 CPU 模式或 CUDA 模式)autograd profiler 输出,您应该首先检查您的脚本是否受 CPU 限制(“CPU 总时间远大于 CUDA 总时间”)。如果它受 CPU 限制,查看 CPU 模式 autograd profiler 的结果将有所帮助。如果另一方面,您的脚本大部分时间都在 GPU 上执行,那么在 CUDA 模式 autograd profiler 的输出中查找负责的 CUDA 运算符是有意义的。

当然,现实情况要复杂得多,您的脚本可能不处于这两种极端情况之一,这取决于您正在评估的模型部分。如果 profiler 输出没有帮助,您可以尝试查看带有 nvproftorch.autograd.profiler.emit_nvtx() 的结果。但是,请考虑到 NVTX 开销非常高,并且通常会给出严重倾斜的时间线。同样,Intel® VTune™ Profiler 有助于使用 torch.autograd.profiler.emit_itt() 进一步分析 Intel 平台上的性能。

警告

如果您正在分析 CUDA 代码,bottleneck 运行的第一个 profiler (cProfile) 将在其时间报告中包含 CUDA 启动时间(CUDA 缓冲区分配成本)。如果您的瓶颈导致的代码比 CUDA 启动时间慢得多,这应该无关紧要。

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

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

查找开发资源并获得问题解答

查看资源