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