Pytorch精準記錄函數(shù)運行時間的方法
0. 引言
參考Pytorch官方文檔對CUDA的描述,GPU的運算是異步執(zhí)行的。一般來說,異步計算的效果對于調(diào)用者來說是不可見的,因為
- 每個設(shè)備按照排隊的順序執(zhí)行操作
- Pytorch對于CPU和GPU的同步,GPU間的同步是自動執(zhí)行的,不需要顯示寫在代碼中
異步計算的后果是,沒有同步的時間測量是不準確的。
1. 解決方案
參考引言中提到的幫助文檔,Pytorch官方給出的解決方案是使用torch.cuda.Event記錄時間,具體代碼如下:
# import torch start_event = torch.cuda.Event(enable_timing=True) end_event = torch.cuda.Event(enable_timing=True) start_event.record() # Run your code snippet here end_event.record() torch.cuda.synchronize() # Wait for the events to be recorded! elapsed_time_ms = start_event.elapsed_time(end_event) # elapsed time (ms)
將你的代碼插入start_event.record()
和end_event.record()
中間以測量時間(單位毫秒)。
有能力的讀者也可以包裝為裝飾器或者with語句使用:
先書寫一個自定義with類(ContextManager)
class CudaTimer: def __init__(self): self.start_event = torch.cuda.Event(enable_timing=True) self.end_event = torch.cuda.Event(enable_timing=True) def __enter__(self): self.start_event.record() return self def __exit__(self, exc_type, exc_value, traceback): self.end_event.record() torch.cuda.synchronize() self.elapsed_time = self.start_event.elapsed_time(self.end_event) / 1000 # ms -> s
再安裝如下with語句返回:
with CudaTimer() as timer: # run your code here dt = timer.elapsed_time # s
這樣保證了多個文件調(diào)用時語句的簡單性。特別提醒:獲取timer.elapsed_time
操作不要寫在with
語句內(nèi)部。在with語句未結(jié)束時,是無法獲取timer的成員變量的。
2. 補充
對于CPU和GPU混合操作的函數(shù),使用torch.cuda.event
可能會使統(tǒng)計時間比實際時間短,此時可以使用time.time()
代替,標準的with對象書寫如下:
# import time class Timer: def __enter__(self): self.start_time = time.time() return self def __exit__(self, exc_type, exc_value, traceback): torch.cuda.synchronize() self.elapsed_time = time.time() - self.start_time
然后只需要將上文的with CudaTimer() as timer
替換為with Timer() as timer
即可。
到此這篇關(guān)于Pytorch精準記錄函數(shù)運行時間的方法的文章就介紹到這了,更多相關(guān)Pytorch記錄函數(shù)運行時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決(發(fā)生在win10更新至win11后)
Pygame是常用的游戲開發(fā)庫之一,然而在使用Pygame的過程中,卻出現(xiàn)了播放背景音樂卡頓的問題,表現(xiàn)為咯咯咯的噪音,所以本文記錄了Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決,需要的朋友可以參考下2024-02-02Python遠程開發(fā)環(huán)境部署與調(diào)試過程圖解
這篇文章主要介紹了Python遠程開發(fā)環(huán)境部署與調(diào)試過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12完美解決keras 讀取多個hdf5文件進行訓(xùn)練的問題
這篇文章主要介紹了完美解決keras 讀取多個hdf5文件進行訓(xùn)練的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07python 使用xlsxwriter循環(huán)向excel中插入數(shù)據(jù)和圖片的操作
這篇文章主要介紹了python 使用xlsxwriter循環(huán)向excel中插入數(shù)據(jù)和圖片的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01python飛機大戰(zhàn)pygame游戲背景設(shè)計詳解
這篇文章主要介紹了python飛機大戰(zhàn)pygame游戲背景設(shè)計,結(jié)合實例形式詳細分析了Python使用pygame模塊設(shè)計游戲背景相關(guān)原理、流程與實現(xiàn)技巧,需要的朋友可以參考下2019-12-12