PyTorch torch.utils.bottleneck

2020-09-15 11:36 更新

原文: PyTorch torch.utils.bottleneck

<cite>torch.utils.bottleneck</cite> 是可以用作調(diào)試程序瓶頸的第一步的工具。 它使用 Python 分析器和 PyTorch 的 autograd 分析器總結(jié)了腳本的運行。

使用以下命令在命令行上運行

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

其中[args]是 <cite>script.py</cite> 的任意數(shù)量的參數(shù),或者運行python -m torch.utils.bottleneck -h以獲取更多使用說明。

警告

因為您的腳本將被分析,所以請確保它在有限的時間內(nèi)退出。

Warning

由于 CUDA 內(nèi)核的異步特性,當(dāng)針對 CUDA 代碼運行時,cProfile 輸出和 CPU 模式自動分級探查器可能無法顯示正確的計時:報告的 CPU 時間報告了用于啟動內(nèi)核的時間量,但不包括時間 除非操作進行了同步,否則內(nèi)核將花費在 GPU 上執(zhí)行。 在常規(guī)的 CPU 模式分析器下,進行同步的操作似乎非常昂貴。 在這些時間不正確的情況下,CUDA 模式自動求導(dǎo)分析器可能會有所幫助。

注意

要確定要查看哪個(僅 CPU 模式或 CUDA 模式)autograd Profiler 輸出,您應(yīng)該首先檢查腳本是否受 CPU 限制(“ CPU 總時間遠大于 CUDA 總時間”)。 如果它是 CPU 綁定的,則查看 CPU 模式的 autograd profiler 的結(jié)果將有所幫助。 另一方面,如果您的腳本將其大部分時間都花在 GPU 上執(zhí)行,則有必要在 CUDA 模式 autograd profiler 的輸出中開始尋找負責(zé)任的 CUDA 運算符。

當(dāng)然,實際情況要復(fù)雜得多,根據(jù)您要評估的模型部分,您的腳本可能不會處于這兩種極端情況之一。 如果分析器輸出無濟于事,則可以嘗試使用nvprof查看 torch.autograd.profiler.emit_nvtx() 的結(jié)果。 但是,請考慮到 NVTX 開銷非常高,并且通常會出現(xiàn)嚴重偏差的時間表。

Warning

如果您正在分析 CUDA 代碼,則運行bottleneck的第一個分析器(cProfile)將在其時間報告中包括 CUDA 啟動時間(CUDA 緩沖區(qū)分配成本)。 瓶頸是否導(dǎo)致代碼比 CUDA 啟動時間慢得多,這無關(guān)緊要。

有關(guān)探查器的更復(fù)雜用法(例如在多 GPU 情況下),請參閱 https://docs.python.org/3/library/profile.htmltorch.autograd.profiler.profile() 了解更多信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號