感覺這個問題是年經貼(´-ω-`)
題主提到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、搜尋