pytorch如何設定batch size和num workers,避免超視訊記憶體, 並提高實驗速度?

時間 2021-05-30 02:00:18

1樓:黃掛

batch size一般是往大了調,調到視訊記憶體不能再放下報cuda oom的報錯為止。

然後num worker是dataset的程序數,要理解pytorch的訓練過程是乙個生產消費模型,一端是cpu處理資料,放到乙個queue裡,一端是gpu計算資料。一般而言,overhead都應該是gpu,因此num worker的數量只要調到足夠在gpu算完這個batch前處理好下乙個batch 讓gpu不用空閒等著,整體效率就是最高的了。

2樓:

bs 越大越好,盡量頂到視訊記憶體的邊,不過一般都是 2^N 的數值,可能性能會好點。試驗乙個epoch看看爆不爆視訊記憶體,因為 validate 的時候有可能會漲一下視訊記憶體。

但是 bs 增大後,learning rate 要跟著調整,而且訓練難度是增大的,同樣的 epoch,精度一般會稍微低一點。

Num workers:只要你的 GPU 沒有用滿,說明 GPU 要等資料準備。可以試著增加程序數目,同時觀察是否是硬碟 IO 瓶頸,如果是多機訓練,還要注意網路瓶頸。

不過,最大也不能超過核心數,一般還要減一點,因為主程序,多卡多程序訓練,都會占用核心。

等資料一般在訓練小模型的時候出現,res50複雜度以上的,基本遇不到。

真想快:加錢,上硬體。

3樓:Zylo117

自問自答的答案並不準確。

num worker並不一定會增加視訊記憶體使用,除非開pin memory,這個預設是關閉的。開了就在GPU上面預留一片固定的記憶體區域,以加速傳輸。

開這個pin memory不覺得能快多少,反倒是犧牲了batch size簡直血虧。

新手如何入門pytorch?

君玉工作室 入門pytorch分六個步驟 1.配置好開發環境。這邊直接參考官網的教程就可。2.理解張量的概念,以及相應的運算,在pytorch中實現。3.用pytorch搭建感知機 神經網路 卷積神經網路以及LSTM等常見的簡單的網路,進行前向傳播推理,能夠執行即可,其中理解全連線,池化,卷積模組,...

Pytorch 如何用variable如何讓某個方程的權值可學習

愛寫碼的貓貓 nn.Parameter,Tensor和Variable是pytorch中三種基本的資料結構。Tensor np.array的GPU版本 Variable 對Tensor的封裝,加入了grad屬性,可以用backward求梯度,但是預設是不需要求梯度的。Parameter 對Varia...

如何高效地學習pytorch?

朱強 0.數學基礎,前向傳播,後向傳播,鏈式求導,降公升取樣,優化,學習率,動量,等基礎。pytorch 五部分 資料,迭代器,優化,損失函式,網路,把這五個模組用一些簡單的案例多實踐一下。資料報含 用網路資料,自己製作資料,dataloader,dataset 優化函式,啟用函式,paramete...