當前位置: 華文星空 > 知識

深度學習訓練模型時,GPU視訊記憶體不夠怎麽辦?

2021-05-28知識

感覺這個問題是年經貼(´-ω-`)

題主提到transformer,那我也針對transformer給點小視訊記憶體設定下的訓練trick吧,好久沒去魔改其他模型的結構了qaq

ps:對視覺Transformer了解不深,本文僅從NLP領域的經典Transformer入手來分享一些tricks

從節省(訓練)視訊記憶體方法的有效性/性價比上排個序的話:

1. 砍輸入的max len

2. 砍hidden size

3. 砍num layers

4. recompute

5. sharding

6. 小batch size+梯度累積

如果要考慮從預訓練模型熱啟的話,可以去掉2,其他排序不變

為啥最推薦前倆呢,因為不用寫程式碼哇...改改參數,訓練視訊記憶體占用平方級降低,註意是平方級!因此砍一半max seq len和砍一半hidden size比砍一半層數來的有效很多。

只不過砍一半hidden size就不好load預訓練模型了,所以優先砍max len吧……

如果非要糾結模型能處理的最大輸入長度,可以前90%的訓練steps砍輸入長度,後10%砍bs艱難finetune下position embedding。這也是預訓練常用trick(雖然親測也會損失一些模型的長文本處理performance)

4和5就是訓練大型模型的標配技術了,主流深度學習框架基本都內建了API,呼叫還是相對方便的,而且不會損失太多訓練速度

6就是兜底的辦法了,需要寫一些程式碼外加訓練慢....

當然了,以上trick可以疊加混合使用,拿好不謝(^-^)

此外,還有一些不方便公開的內部黑科技就不寫出來啦,感興趣的小夥伴歡迎私信發我簡歷,組內還有實習head count噢!

座標:北京,百度科技園

方向:NLP、搜尋