Pine 發自 凹非寺
量子位 | 公眾號 QbitAI
單個GPU,只花一天時間,能把BERT訓練成什麼樣?
現在,終於有研究人員做這件事了,在有限的計算條件之下看看語言模型的真實效能如何。
要知道在以往,大多數專業人員的關注點都在極端計算的條件下的語言模型效能。
但這樣的語言訓練模型環境,對很多研究人員和從業人員是不可能存在的。
因此這個單天單個GPU的挑戰,就有網友稱是一個最希望看到的基準。
連ViT作者,谷歌大腦研究員Lucas Beyer都發文推薦,稱這是一個令人耳目一新的轉變。
具體的過程和結果如何,一起來看看~
挑戰過程
這次研究的目標也很明確,就是反其道行之:縮小語言訓練模型的算力,
在有限的計算量的情況下如何達到BERT的效能水平
。
既然要縮小計算量,那第一步肯定是對模型作出一些限定。
這也還是之前提到的,限定時間和GPU個數:單天單個GPU。
關於GPU,研究人員分別選取了3個進行測試,即rtx2080ti、rtxa4000和rtxa6000,每個單元有4個CPU核和32GB記憶體。
在限定計算量之後,就要
對模型的其他引數進行一些調整,以進一步對BERT的實際適用性進行評估
。
這些調整包括
初始資料設定、模型架構、訓練以及資料集
的改進。
並且在調整的過程中,整體基調都是圍繞“實際使用”進行的,避免跳轉到專業的設定,為此,研究人員將所有內容都保持在PyTorch框架的實現級別上。
先來說說
初始資料設定
,這部分可以簡單概括為以下幾點:
將標記化的資料打包成長度為128的隨機序列,不相關的片段用
分割;
刪除< cls > 標記,因為在訓練前訓練中加入它並沒有對效能產生多大影響;
將序列長度為64到96微小批次累積到大批次再處理。
然後是對
架構
的修改,下圖顯示了不同模型在隨著token數量的增加MLM任務損失的變化。
結果很顯然,一個模型損失的衰減很大程度地取決於模型的大小,而不是模型的型別。
並且,因為每個token的效能與模型大小之間的關係緊密耦合,若想透過改變Transformer模型的大小和型別來獲得巨大效能增益是不太可能的。
不過對於同大小的所有模型,每個梯度效率是幾乎保持不變的,因此可以在保證模型大小不變的情況下,選擇能夠透過快速搜尋加速計算的架構。
具體的最佳化和其他調整如下:
減少注意力頭的數量來降低梯度成本:禁用所有QKV偏差;
禁用所有線性層偏差,透過加速梯度計算,不會對模型大小產生明顯影響;
實現比例正弦位置嵌入,相較於學習或非比例正弦嵌入有增量收益;
LN的預標準化比後LN更有益;
去除非線性頭部並無影響。
接下來便要對
訓練
進行設定,具體也就不再贅述,直接來看相關調整:
最佳化器依舊是Adam;
設定Learning Rate計劃和批次大小;
丟掉Dropout環節。
(因為Dropout會導致每秒更新的淨減少)
而在
資料集
方面,研究團隊採用了兩種基於資料的途徑來更好地縮小規模,分別是
以各種方式過濾、處理或排序現有的資料
和
交換資料來源
,具體可以看下錶。
效能接近最初的BERT
在調整完各種引數後,這個單卡一天的BERT效能到底如何?直接看看最終的資料!
在下游效能評估時是透過GLUE來進行的,下表能夠看到在3個不同顯示卡上的得分,非常接近最初的BERT。
而當模型訓練計算量為16倍時,即
(2天,在8個GPU)
,依舊是一樣的資料和設定,最終得到的結果比最初的BERT提高了很多,達到了RoBERTa的效能水平。
如果想了解更多,可以點選下面連結檢視論文原文~
論文原文:
https://arxiv。org/abs/2212。14034
參考連結:
https://twitter。com/giffmana/status/1608568387583737856
— 完 —
量子位 QbitAI · 頭條號簽約