中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pytorch多進程如何優化

發布時間:2021-08-18 14:39:25 來源:億速云 閱讀:157 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關pytorch多進程如何優化,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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

嘗試了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多進程如何優化”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榕江县| 桃园市| 浦北县| 广宗县| 望都县| 通海县| 贵阳市| 庆阳市| 富宁县| 耒阳市| 五华县| 舒兰市| 开平市| 唐山市| 治县。| 多伦县| 化州市| 三江| 澄江县| 兰西县| 哈巴河县| 衡阳县| 安泽县| 建宁县| 连州市| 靖州| 临漳县| 托克托县| 全椒县| 宣恩县| 越西县| 通海县| 阳谷县| 泸溪县| 射阳县| 扎兰屯市| 苏州市| 丰镇市| 疏附县| 泾阳县| 澄迈县|