挑戰單卡單日訓練BERT,ViT作者推薦

Pine 發自 凹非寺

量子位 | 公眾號 QbitAI

單個GPU,只花一天時間,能把BERT訓練成什麼樣?

現在,終於有研究人員做這件事了,在有限的計算條件之下看看語言模型的真實效能如何。

挑戰單卡單日訓練BERT,ViT作者推薦

要知道在以往,大多數專業人員的關注點都在極端計算的條件下的語言模型效能。

但這樣的語言訓練模型環境,對很多研究人員和從業人員是不可能存在的。

因此這個單天單個GPU的挑戰,就有網友稱是一個最希望看到的基準。

挑戰單卡單日訓練BERT,ViT作者推薦

連ViT作者,谷歌大腦研究員Lucas Beyer都發文推薦,稱這是一個令人耳目一新的轉變。

挑戰單卡單日訓練BERT,ViT作者推薦

具體的過程和結果如何,一起來看看~

挑戰過程

這次研究的目標也很明確,就是反其道行之:縮小語言訓練模型的算力,

在有限的計算量的情況下如何達到BERT的效能水平

既然要縮小計算量,那第一步肯定是對模型作出一些限定。

這也還是之前提到的,限定時間和GPU個數:單天單個GPU。

關於GPU,研究人員分別選取了3個進行測試,即rtx2080ti、rtxa4000和rtxa6000,每個單元有4個CPU核和32GB記憶體。

挑戰單卡單日訓練BERT,ViT作者推薦

在限定計算量之後,就要

對模型的其他引數進行一些調整,以進一步對BERT的實際適用性進行評估

這些調整包括

初始資料設定、模型架構、訓練以及資料集

的改進。

並且在調整的過程中,整體基調都是圍繞“實際使用”進行的,避免跳轉到專業的設定,為此,研究人員將所有內容都保持在PyTorch框架的實現級別上。

挑戰單卡單日訓練BERT,ViT作者推薦

先來說說

初始資料設定

,這部分可以簡單概括為以下幾點:

將標記化的資料打包成長度為128的隨機序列,不相關的片段用

分割;

刪除< cls > 標記,因為在訓練前訓練中加入它並沒有對效能產生多大影響;

將序列長度為64到96微小批次累積到大批次再處理。

然後是對

架構

的修改,下圖顯示了不同模型在隨著token數量的增加MLM任務損失的變化。

結果很顯然,一個模型損失的衰減很大程度地取決於模型的大小,而不是模型的型別。

挑戰單卡單日訓練BERT,ViT作者推薦

並且,因為每個token的效能與模型大小之間的關係緊密耦合,若想透過改變Transformer模型的大小和型別來獲得巨大效能增益是不太可能的。

不過對於同大小的所有模型,每個梯度效率是幾乎保持不變的,因此可以在保證模型大小不變的情況下,選擇能夠透過快速搜尋加速計算的架構。

具體的最佳化和其他調整如下:

減少注意力頭的數量來降低梯度成本:禁用所有QKV偏差;

禁用所有線性層偏差,透過加速梯度計算,不會對模型大小產生明顯影響;

實現比例正弦位置嵌入,相較於學習或非比例正弦嵌入有增量收益;

LN的預標準化比後LN更有益;

去除非線性頭部並無影響。

接下來便要對

訓練

進行設定,具體也就不再贅述,直接來看相關調整:

最佳化器依舊是Adam;

設定Learning Rate計劃和批次大小;

丟掉Dropout環節。

(因為Dropout會導致每秒更新的淨減少)

而在

資料集

方面,研究團隊採用了兩種基於資料的途徑來更好地縮小規模,分別是

以各種方式過濾、處理或排序現有的資料

交換資料來源

,具體可以看下錶。

挑戰單卡單日訓練BERT,ViT作者推薦

效能接近最初的BERT

在調整完各種引數後,這個單卡一天的BERT效能到底如何?直接看看最終的資料!

在下游效能評估時是透過GLUE來進行的,下表能夠看到在3個不同顯示卡上的得分,非常接近最初的BERT。

挑戰單卡單日訓練BERT,ViT作者推薦

而當模型訓練計算量為16倍時,即

(2天,在8個GPU)

,依舊是一樣的資料和設定,最終得到的結果比最初的BERT提高了很多,達到了RoBERTa的效能水平。

挑戰單卡單日訓練BERT,ViT作者推薦

如果想了解更多,可以點選下面連結檢視論文原文~

論文原文:

https://arxiv。org/abs/2212。14034

參考連結:

https://twitter。com/giffmana/status/1608568387583737856

— 完 —

量子位 QbitAI · 頭條號簽約

頂部