国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

pytorch多進程加速及代碼優化方法

2024-07-09 22:41:00
字體:
來源:轉載
供稿:網友

目標:優化代碼,利用多進程,進行近實時預處理、網絡預測及后處理:

本人嘗試了pytorch的multiprocessing,進行多進程同步處理以上任務。

from torch.multiprocessing import Pool,Manager

為了進行各進程間的通信,使用Queue,作為數據傳輸載體。

  manager = Manager()  input_queue = manager.Queue()  output_queue = manager.Queue()  show_queue = manager.Queue()

即將預處理進程處理后的圖像放進 input_queue,而網絡預測進程實時獲取 input_queue隊列中的數據,一旦放入,就從中取出,輸入網絡:

while 1:  input = input_queue.get()

同理,將網絡輸出放入output_queue,再由后處理進程實時獲取并進行后處理,處理后,放入show_queue

從而實現了多進程同步進行預處理、網絡預測及后處理,加速了網絡實時預測的表現。

問題及解決方案:

1. pytorch cuda報錯,re-initialization報錯問題:

習慣了在一開始將模型先加載進來放入gpu中,所以模型在主線程就完成了初始化,但是調用網絡是在網絡預測子進程進行的,就會導致跨進程重復初始化失敗。

解決方案:

直接在子進程開始時初始化,其他進程可以設置個延時,等網絡初始化好后再開始運行。

同理,數據輸入網絡也是同樣的在子進程進行。

2. python3多進程編程,子進程不報錯問題:

一開始總是代碼運行起來什么都不出現,就開始各種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. 一開始想優化cv2.resize,想用gpu下的tensor的resize_代替,但發現這種方式和numpy.resize一脈相承啊,根本不是我們想要的resize,如果是變大的話,這種resize會直接按順序填,然后剩下的就填0,實在是太草率了。。。

解決方案:還沒有很好的替代方案,只找了一下,cuda::resize,但是好像貌似沒有python接口,要是混合編程好像有點小題大做,得不償失了。如果各位有較好的方案,歡迎指點迷津。

以上這篇pytorch多進程加速及代碼優化方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網之家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 印江| 横山县| 宾川县| 中牟县| 张家港市| 抚顺县| 青冈县| 禄丰县| 神农架林区| 大新县| 长顺县| 印江| 封丘县| 澄迈县| 徐州市| 宁晋县| 合阳县| 西充县| 开江县| 赤壁市| 临城县| 会宁县| 柘城县| 台东市| 依安县| 革吉县| 静乐县| 江川县| 墨脱县| 陵川县| 平湖市| 临江市| 大厂| 威远县| 黑龙江省| 平乡县| 宽城| 酒泉市| 通许县| 淄博市| 蓝山县|