Pytorch

torch.utils.bottleneck是一個可以用作調試程序瓶頸的初始步驟的工具。它彙總了Python分析器和PyTorchautograd分析器腳本的運行情況。

用命令行運行它

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模式分析器下,進行同步的Ops似乎非常昂貴。在這些情況下,時序不正確,CUDA模式autograd分析器可能會有所幫助。


注意 要決定要查看哪個(純CPU模式或CUDA模式)autograd分析器輸出,應首先檢查腳本是否受CPU限制(“CPU總時間遠遠超過CUDA總時間”)。如果它受到CPU限制,查看CPU模式autograd分析器的結果將有所幫助。另一方面,如果腳本大部分時間都在GPU上執行,那麼開始在CUDA模式autograd分析器的輸出中查找負責任的CUDA操作符是有意義的。 當然,實際情況要複雜得多,根據你正在評估的模型部分,你的腳本可能不會處於這兩個極端之一。如果探查器輸出沒有幫助,你可以嘗試尋找的結果torch.autograd.profiler.emit_nvtx()用nvprof。但是,請注意NVTX的開銷非常高,並且經常會產生嚴重偏斜的時間表。


警告 如果您正在分析CUDA代碼,那麼bottleneck運行的第一個分析器(cProfile)將在其時間報告中包含CUDA啓動時間(CUDA緩衝區分配成本)。如果您的瓶頸導致代碼比CUDA啓動時間慢得多,這應該沒有關係。

有關分析器的更復雜用途(如多GPU情況下),請參閱https://docs.python.org/3/library/profile.html 或使用torch.autograd.profiler.profile()獲取更多信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章