三個旋鈕,一份預算
一場預訓練有三個大旋鈕:模型有多少參數、它在多少詞元上訓練、以及你願意花多少算力。它們並非各自獨立——算力大致等於參數 × 詞元——所以一旦你定下預算,選定其中兩個,第三個也就定了。規劃一場訓練的全部藝術,就在於把固定的預算花得明智。
我們先把預算定義清楚。預訓練算力(pretraining compute)以浮點運算次數(FLOPs)來衡量,而有一條著名的信封背面估算法則:訓練一個密集 transformer 大約要花 6 × N × D 次 FLOPs,其中 N 是參數量、D 是訓練詞元數。那個係數 6 把前向與反向傳播一起算了進去。這條小小的公式,左右著數億美元等級的決策。
compute (FLOPs) ~= 6 * N * D N = 7e9 params, D = 2e12 tokens compute ~= 6 * 7e9 * 2e12 = 8.4e22 FLOPs # on ~1000 GPUs at realistic efficiency, that's weeks of wall-clock time
6ND 法则:训练算力约等于每个参数、每个词元 6 次浮点运算。
縮放定律:更大,且可預測地更好
這一切之所以能規劃,靠的是神經縮放定律(neural scaling laws):跨越許多個數量級,模型的損失隨參數、資料、算力以平滑的冪次律(power law)下降。把損失對算力畫在對數—對數座標上,你會得到一條驚人筆直的線。正是這份可預測性,讓團隊能先訓練幾個小模型、擬合曲線,然後在花一分錢之前就預測一個巨型模型的損失。
对数-对数图:模型损失随规模增长沿一条幂律直线下降。
縮放定律也解釋了湧現能力(emergent abilities)——像多步驟算術這類在小模型上付之闕如、過了某個大小門檻後(有時是突然地)冒出來的技能。那份突然性是真實的、還是我們衡量方式造成的假象,仍有爭議;但工程上的結論很穩固:規模能買到能力,而曲線大致告訴你能買到多少。
Chinchilla 的教訓:餵模型更多詞元
早期的巨型模型是吃不飽的:龐大的參數量,卻只在太少的詞元上訓練。Chinchilla 的發現修正了這一點。在算力預算固定時,當參數與詞元一起依比例縮放時,損失最小。由此得出的招牌準則是:每個參數大約配 20 個訓練詞元。一個 70 億參數的模型,光是要達到算力最優,就需要約 1,400 億個詞元。
Chinchilla 的损失模型:不可约的下限,加上各自的参数项与数据项,在固定算力预算下于唯一最优的 (N, D) 组合处取得最小值。
這就是算力最優訓練(compute-optimal training)的概念:在你的 FLOP 預算下,存在唯一最佳的 (N, D) 組合,任一旋鈕超標都是浪費錢。但對真實產品而言,有一個關鍵的轉折——見提示框。
把詞元預算分配給各個來源
一旦你知道了訓練詞元預算(training-token budget)——比方說 2 兆個詞元——你就得決定如何把它分配給上一篇談到的各堆乾淨來源。這又回到了資料混合加權(data mixture weighting),只是這次帶上了具體數字。你為每個來源設定一個百分比,而這些百分比直接形塑模型的個性:更多程式碼造就更好的程式設計師,更多多語文字造就更好的翻譯者,更多數學造就更好的推理者。
data mixture (share of 2T total tokens): web (cleaned) 60% 1.20T code 18% 0.36T books & papers 12% 0.24T curated Q&A / wiki 7% 0.14T math 3% 0.06T
有些資料堆又小又珍貴(高品質數學、稀有語言)。你也許會把它們重複幾次——對「不要重複」原則的一個受控例外——但只能一點點,因為重複太多次會重新引入去重複本想修掉的背題問題。挑選混合配方本身就是一場實驗:在候選配方上訓練小型代理模型,留下在你在意的技能上得分最高的那個。
把計畫寫在紙上
團隊在啟動一場訓練前,實際上是這樣安排這些決策的順序的:
- 從你的 GPU 規模與截止期限定下算力預算——那是無法妥協的硬限制。
- 用少數幾場小型訓練擬合縮放定律曲線,預測大規模下的損失。
- 選定 N 與 D:從 Chinchilla 最優出發,若推論成本重要,再偏向更小的 N。
- 在候選配方上訓練小型代理模型,藉此設計資料混合配方。
- 預測成本與時間、取得核准,然後才投入整座叢集。
預算、資料、混合配方都拍板後,模型就知道了該學什麼、學多少。接下來兩篇指南要談學習實際上如何發生:推動權重的最佳化器與排程,以及讓整件事橫跨數千顆晶片運行的分散式機制。