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