當前位置: 華文問答 > 數碼

為什麽說大模型訓練很難?

2021-11-11數碼

之前做過一部份預訓練的工作,訓的模型是7B,13B大小,分享一下個人的感受

首先是訓練方面,這兩個量級的模型訓練起來其實和小模型差不多,參數設定上有兩個地方需要註意:一個是學習率需要略小,在e-5這個量級就可以,其次是global_batch需要比較大,一般在2-4M tokens,這樣訓練起來會比較穩定

對於7B這個量級的模型,一般stage=2,tp=1,zero1=8,因為如果單卡能放下一份模型的參數和梯度就不需要用tp,不然會很慢,這樣相當於一張80G卡存一份完整模型參數和部份最佳化器轉態,模型參數占7 * 2 =14G,而最佳化器狀態則分布在單節點的8張GPU內,平均每張卡占7 * (4+4+4+2)/8 =13G,這個就相當於在單節點內做8路數據並列,在seq_len=2048的情況下,單張卡的micro_batch大概可以到8左右,如果不進行梯度累積,global_batch=2M的情況下至少需要128張卡( 8 * 2048 * 128),24h大概能訓30-40B tokens,1T tokens大概訓一個月左右(憑印象寫的,如果有錯誤歡迎指正),設定好後剩下的就交給時間了,每天上去看一下loss,如果沒有機器故障,通常是可以一把從頭訓到尾的,不需要中間再去調各種參數

而大到千億這個級別的模型,難度就上來了,會出現一些數值計算/收斂穩定性等各方面的問題,除此之外,機器數量一多起來後故障率就非常高了, 感興趣可以解了一下GLM 130B訓練的分享報告,或者Mate訓OPT的logbook ,如Meta這種大廠排程千卡的故障也是非常多的,這是沒法避免的

我個人感覺在模型訓練之外其實更重要的是數據,在同一scale下,數據質素直接決定了模型效能的上限。模型大家可能會開源,但數據,特別是有價值的數據一般是不會輕易開源的。英文語料數量很大,可以透過嚴格篩選來得到高質素的diversity語料,而且也已經有很多開源的現成可用的語料數據,比如c4,Pipe,RedPajam,refinedweb。中文早先開源的不多,現在大家也已經開始卷數據了,我了解的一些開源數據有:

  • WuDaoCorpus,200G中文
  • TigerBot,100G中英
  • SkyPile-150B,150B tokens
  • WanJuan ,文本1TGB,應該是目前開源最大的一個了
  • CCI ,104GB文本
  • 但總體規模上比英文還是小很多,而且中文語料的質素也一言難盡,廣告,AIGC內容 ,錯誤的內容,違反安全的內容等各種亂七八糟的數據也很多,所以數據這方面不是一個人兩個人就能做的,得需要一個專門的數據團隊來專項負責。

    最後一點是,訓大模型的試錯成本非常高,時間、機器、人力搭進去了,但誰也沒法保證訓出來的模型效果就一定好,因為數據質素比較難以客觀量化,所以煉丹前也很難判斷這批數據訓出來的模型效果到底如何,風險比較大,只能一邊訓一般觀察模型的狀態,如果沒有達到預期,只能透過持續添加更高質素的數據來調整。並且按照現在開源模型與日俱增的訓練數據量來看,後續開源的基礎模型估計都得2T tokens起步了,否則效果難以比肩(按照scaling law來看),開源出來也沒太大意義,因為大家不會去用。不過後面開源的模型還是有一定的數據優勢的,因為可以用更新的數據來訓,而benchmark相對來說是舊的,所以刷分可能相對更容易一些,分不高沒法做pr,但分高並不代表模型的水平。

    所以綜合來看,訓大模型的難不是單點技術上的難,而是系統性的難,需要數據,煉丹師,框架,硬件等幾方面人力間的緊密配合,並且圍繞著煉丹師的需求來開展工作。這也是為什麽創業公司往往更容易做出成果,因為大家目標比較專註一致,執行力就會比較強,而大公司由於各種原因就非常容易互相扯皮。