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

Chinchilla:聰明地分配運算預算

在運算量固定的前提下,模型該多大、又該看多少資料?這個答案推翻了一整代「過大卻訓練不足」的模型。

預算固定了——然後呢?

想像有人交給你一筆固定的預訓練運算——比方說,你的叢集這個月能負擔的浮點運算次數。你可以把它花在一個更大、但看更少資料的模型上,或是一個更小、但看更多資料的模型上。這個取捨上的每一個選擇,用的總運算量都一樣,因為在很好的近似下,運算量大約等於「六乘以參數量乘以詞元數」。

C  ≈  6 · N · D

C = compute (FLOPs)
N = parameters
D = training tokens
預算約束。固定 C,則 N 與 D 會沿著一條曲線彼此互換。
C \approx 6\,N\,D

預算約束:訓練所需的浮點運算量約為參數量 N 與訓練詞元數 D 乘積的六倍,因此在 C 固定時兩者相互制衡。

在這個取捨上找到甜蜜點——也就是「在給定預算下達到最低損失」的大小對資料的分配比例——正是 運算預算分配 的問題;而在那個甜蜜點上訓練出來的模型,就稱為 運算最優(compute-optimal)。

劇情反轉:多數大模型其實訓練不足

第一份具影響力的規模研究(Kaplan 等人,2020 年)的結論是:如果你拿到更多運算,應該把大部分花在參數上,資料只需適度增加。整個領域接受了這個建議,造出了一波「龐大卻只看了相對少量文字」的模型。

2022 年,DeepMind 的一個團隊更謹慎地重新檢視這個問題,得到了相反的平衡點。他們的結果——如今稱為 Chinchilla 最優 擴展——指出參數資料應該大致同步成長。為了證明這點,他們訓練了一個 700 億參數、名為 Chinchilla 的模型,餵它看的詞元遠多於當時的風氣,結果它打敗了一個用相同運算量、卻有 2800 億參數的模型(Gopher)。那個更大的模型,只是被餓著了資料。

親手走一遍分配

以下是一個團隊「從零替運算最優模型定大小」時所跑的循環。

  1. 決定預算 C(以 FLOPs 計)——你能花或願意花的上限。
  2. 在數種 (N, D) 分配下訓練一梯隊小模型,每個各用一小片運算,並記下各自的最終損失。
  3. 對這些點擬合一個曲面;曲面的谷底會告訴你,對任何更大的 C,最優的 N 與 D 各是多少。
  4. 在你真正的預算上讀出 N 與 D,然後有信心地啟動那一次大型訓練。
L(N, D) = E + \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}}

擬合到一系列訓練點的 Chinchilla 損失曲面:不可約項 E 加上隨參數量 N 與詞元數 D 減小的兩項;其谷底給出算力最佳的 N 與 D。

什麼時候你該刻意忽略最優解

Chinchilla 把達到目標損失的訓練成本降到最低。但一個真正上線的模型會被執行上百萬次,所以它的推論成本也很重要——而更小的模型,永遠都更便宜跑。這就是為什麼實驗室越來越常採用 過度訓練小模型:刻意餵一個「比最優還小」的模型,看遠多於 Chinchilla 建議的詞元。你在訓練時多付一些,換來一個小巧、上線便宜的模型。那些用數兆詞元訓練的熱門開放權重模型,做的正是這件事。