一面大帆怎麼縫得平,語言模型就怎麼長大
海邊工坊風一吹,半成品的帆布啪一聲甩開。單靠一個人怎樣都攤不平,帆布一直自己折回來。大家乾脆把帆分成幾片,用沙上的釘子壓住,各縫各的,縫到接縫才停下來對齊、拉緊。
訓練很大的語言模型也會卡在同一種尷尬。單張顯示卡不只要放模型本身,還要放它學習時用來記帳的一堆中間數字。以前常見的退路很彆扭,不是把模型做小,就是硬拆到很多機器上,結果大家一直在等彼此、還要拉一堆複雜的連線。
新的做法像把帆布的「每一片」切得更細,不是只分整塊。帆布每一片對應到模型裡一個重複的小段落;每條針線對應到一大段計算;接縫對齊那一下,就是機器把各自算到一半的結果湊起來。重點很直白,切線選得好,大工程就能交給很多幫手做,只要少數幾次固定碰頭。
模型那個重複段落裡,有兩個最吃力的地方:一個是很寬的「加料段」,一個是讓它能注意句子不同位置的「注意力段」。做法是先讓每台機器把自己那一片從頭做到尾,像先把自己的帆片縫完,再去接縫處對一次。加料段先分開算、各自做完壓扁的那一步,再把下一步排成最後只要加總一次;注意力段就把不同的注意力小組分給不同機器,最後再合回來。
為了少跑接縫,有些小事乾脆每台都做一份,像每個縫帆的人都自己帶皮尺、都畫同樣的對齊記號。模型裡像隨機丟掉一點點、把捷徑加回去、把數字拉到比較穩的範圍,這些就不拆分,直接重複做。連最後挑字那一步也改排法,不用把超大一張分數表搬來搬去,只合出需要的那個誤差值,像只檢查整面帆的拉力,不用把整面帆塞到一個人腿上。
人變多的時候,沙灘沒有亂成一團,帆反而能越做越大。用這種切法,可以讓好幾百張顯示卡同時忙著,模型也能從十億等級長到更大,接縫等待的時間沒暴增。帆越大越怕起皺,這裡也有人把「先拉到穩、再走捷徑」的順序調一調,讓更大的模型不會越練越晃,像先量好再收最後那一下,帆面就比較平。