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

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 模式)autograd 分析器輸出,您應該首先檢查您的指令碼是否受 CPU 限制(“CPU 總時間遠大於 CUDA 總時間”)。如果是受 CPU 限制,檢視 CPU 模式 autograd 分析器的結果會有所幫助。另一方面,如果您的指令碼大部分時間都在 GPU 上執行,那麼檢視 CUDA 模式 autograd 分析器的輸出以查詢負責的 CUDA 運算子才有意義。

當然,現實情況要複雜得多,您的指令碼可能不屬於這兩種極端情況,具體取決於您正在評估的模型部分。如果分析器輸出沒有幫助,您可以嘗試檢視 torch.autograd.profiler.emit_nvtx() 配合 nvprof 的結果。但是,請注意 NVTX 開銷非常高,通常會給出嚴重扭曲的時間線。類似地,Intel® VTune™ Profiler 配合 torch.autograd.profiler.emit_itt() 有助於進一步分析 Intel 平臺上的效能。

警告

如果您正在分析 CUDA 程式碼,bottleneck 執行的第一個分析器(cProfile)將把 CUDA 啟動時間(CUDA 緩衝區分配成本)包含在其時間報告中。如果您的瓶頸導致的執行時間比 CUDA 啟動時間慢得多,那麼這應該無關緊要。

對於更復雜的分析器使用(例如在多 GPU 情況下),請參閱 https://docs.python.club.tw/3/library/profile.htmltorch.autograd.profiler.profile() 以獲取更多資訊。

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源