JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

多大、多少:詞元、算力與混合

在 GPU 時數預算固定的前提下,模型該多大、又該讀多少詞元?縮放定律把這個問題化成了算術。

三個旋鈕,一份預算

一場預訓練有三個大旋鈕:模型有多少參數、它在多少詞元上訓練、以及你願意花多少算力。它們並非各自獨立——算力大致等於參數 × 詞元——所以一旦你定下預算,選定其中兩個,第三個也就定了。規劃一場訓練的全部藝術,就在於把固定的預算花得明智。

我們先把預算定義清楚。預訓練算力(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 法則:用一行算出預訓練成本。N = 參數,D = 詞元。
C \approx 6ND

6ND 法则:训练算力约等于每个参数、每个词元 6 次浮点运算。

縮放定律:更大,且可預測地更好

這一切之所以能規劃,靠的是神經縮放定律(neural scaling laws):跨越許多個數量級,模型的損失隨參數、資料、算力以平滑的冪次律(power law)下降。把損失對算力畫在對數—對數座標上,你會得到一條驚人筆直的線。正是這份可預測性,讓團隊能先訓練幾個小模型、擬合曲線,然後在花一分錢之前就預測一個巨型模型的損失。

损失随参数、数据和算力呈平滑的幂律下降——正是这条曲线让扩展变得可预测。

对数-对数图:模型损失随规模增长沿一条幂律直线下降。

縮放定律也解釋了湧現能力(emergent abilities)——像多步驟算術這類在小模型上付之闕如、過了某個大小門檻後(有時是突然地)冒出來的技能。那份突然性是真實的、還是我們衡量方式造成的假象,仍有爭議;但工程上的結論很穩固:規模能買到能力,而曲線大致告訴你能買到多少。

Chinchilla 的教訓:餵模型更多詞元

早期的巨型模型是吃不飽的:龐大的參數量,卻只在太少的詞元上訓練。Chinchilla 的發現修正了這一點。在算力預算固定時,當參數與詞元一起依比例縮放時,損失最小。由此得出的招牌準則是:每個參數大約配 20 個訓練詞元。一個 70 億參數的模型,光是要達到算力最優,就需要約 1,400 億個詞元。

L(N, D) = E + \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}}

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
一個示意用的混合配方。這裡百分比的微小變動,會明顯改變成品模型。

有些資料堆又小又珍貴(高品質數學、稀有語言)。你也許會把它們重複幾次——對「不要重複」原則的一個受控例外——但只能一點點,因為重複太多次會重新引入去重複本想修掉的背題問題。挑選混合配方本身就是一場實驗:在候選配方上訓練小型代理模型,留下在你在意的技能上得分最高的那個。

把計畫寫在紙上

團隊在啟動一場訓練前,實際上是這樣安排這些決策的順序的:

  1. 從你的 GPU 規模與截止期限定下算力預算——那是無法妥協的硬限制。
  2. 用少數幾場小型訓練擬合縮放定律曲線,預測大規模下的損失。
  3. 選定 N 與 D:從 Chinchilla 最優出發,若推論成本重要,再偏向更小的 N。
  4. 在候選配方上訓練小型代理模型,藉此設計資料混合配方。
  5. 預測成本與時間、取得核准,然後才投入整座叢集。

預算、資料、混合配方都拍板後,模型就知道了該學什麼、學多少。接下來兩篇指南要談學習實際上如何發生:推動權重的最佳化器與排程,以及讓整件事橫跨數千顆晶片運行的分散式機制。