pytorch多進程加速及代碼優(yōu)化方法
目標:優(yōu)化代碼,利用多進程,進行近實時預處理、網(wǎng)絡預測及后處理:
本人嘗試了pytorch的multiprocessing,進行多進程同步處理以上任務。
from torch.multiprocessing import Pool,Manager
為了進行各進程間的通信,使用Queue,作為數(shù)據(jù)傳輸載體。
manager = Manager() input_queue = manager.Queue() output_queue = manager.Queue() show_queue = manager.Queue()
即將預處理進程處理后的圖像放進 input_queue,而網(wǎng)絡預測進程實時獲取 input_queue隊列中的數(shù)據(jù),一旦放入,就從中取出,輸入網(wǎng)絡:
while 1: input = input_queue.get()
同理,將網(wǎng)絡輸出放入output_queue,再由后處理進程實時獲取并進行后處理,處理后,放入show_queue
從而實現(xiàn)了多進程同步進行預處理、網(wǎng)絡預測及后處理,加速了網(wǎng)絡實時預測的表現(xiàn)。
問題及解決方案:
1. pytorch cuda報錯,re-initialization報錯問題:
習慣了在一開始將模型先加載進來放入gpu中,所以模型在主線程就完成了初始化,但是調用網(wǎng)絡是在網(wǎng)絡預測子進程進行的,就會導致跨進程重復初始化失敗。
解決方案:
直接在子進程開始時初始化,其他進程可以設置個延時,等網(wǎng)絡初始化好后再開始運行。
同理,數(shù)據(jù)輸入網(wǎng)絡也是同樣的在子進程進行。
2. python3多進程編程,子進程不報錯問題:
一開始總是代碼運行起來什么都不出現(xiàn),就開始各種debug,但因為python3中子進程不報錯,出錯了就卡在那里,就每次自己找bug很麻煩,所以就急需子進程的報錯信息。
解決方案:
用try except組合,來打印子進程中某段程序錯誤,如下:
try: out = forward(input_img,model,1) except Exception as error: print(error)
3.進程完全不運行時,考慮是否是輸入設置的問題,即當單變量輸入時,后面要加都好,如:
pool.apply_async(load_frame,args=(input_queue,))
如果是pool.apply_async(load_frame,args=(input_queue))則該進程不會啟動運行。
4. 一開始想優(yōu)化cv2.resize,想用gpu下的tensor的resize_代替,但發(fā)現(xiàn)這種方式和numpy.resize一脈相承啊,根本不是我們想要的resize,如果是變大的話,這種resize會直接按順序填,然后剩下的就填0,實在是太草率了。。。
解決方案:還沒有很好的替代方案,只找了一下,cuda::resize,但是好像貌似沒有python接口,要是混合編程好像有點小題大做,得不償失了。如果各位有較好的方案,歡迎指點迷津。
以上這篇pytorch多進程加速及代碼優(yōu)化方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
淺述python中argsort()函數(shù)的實例用法
本篇文章主要介紹了淺述python中argsort()函數(shù)的實例用法,詳細的介紹了argsort()函數(shù)的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Python機器學習pytorch交叉熵損失函數(shù)的深刻理解
這篇文章主要為大家介紹了Python機器學習中對交叉熵損失函數(shù)的深刻理解,文中作出了詳細易懂的講解,有需要的朋友可以借鑒參考下希望能夠有所幫助2021-10-10使用pytorch搭建AlexNet操作(微調預訓練模型及手動搭建)
今天小編就為大家分享一篇使用pytorch搭建AlexNet操作(微調預訓練模型及手動搭建),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python3連接SQLServer、Oracle、MySql的方法
這篇文章較詳細的給大家介紹了Python3連接SQLServer、Oracle、MySql的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-06-06詳解Python最長公共子串和最長公共子序列的實現(xiàn)
這篇文章主要介紹了詳解Python最長公共子串和最長公共子序列的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07