給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配

給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配
FesianXu 20250304 at Wechat Search Team

前言

如果給定了計算預算 C C C,如何分配LLM的模型尺寸 N N N和訓練的數據量 D D D,才能使得模型的效果 L L L最好呢?筆者在此介紹一篇經典的文章討論這個問題。如有謬誤請見諒并聯系指出,本文遵守CC 4.0 BY-SA版權協議,轉載請聯系作者并注明出處,謝謝

  • 關鍵字:最佳計算預算分配
  • 發表信息:NIPS 2022

? \nabla ? 聯系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu

知乎專欄: 計算機視覺/計算機圖形理論與應用

微信公眾號:機器學習雜貨鋪3號店


我們知道在大語言模型(Large Language Model, LLM)中,存在所謂的尺度擴展規律(Scaling Laws) [2],如Fig 1所示,即是:

LLM的性能會隨著模型的參數量、模型的訓練量、模型的訓練數據量的增加而增加

fig1_llm_scaling_laws

Fig 1. 大模型中的尺度擴展規律,測試集損失隨著模型訓練量、訓練集數據量、模型參數量的增加而遞減(即是模型性能遞增)。

我們也知道模型的參數量、模型的訓練量和模型的訓練數據量都會影響到最終的計算預算(可以用FLOPs計算),因此LLM的性能可以說和計算預算直接掛鉤,這也是Fig 1 左圖所表示的。我們不禁會有個疑問,給定了模型的計算預算 C C C,我們應該怎么均衡模型參數量 N N N和預訓練的Token數量 D D D,才能使得模型的預訓練損失 L L L最小化呢?我們期待得到最優的模型參數 N o p t N_{opt} Nopt?和最優的預訓練Token數量 D o p t D_{opt} Dopt?,可以使得預訓練損失最小,正如公式(1)所示。

N o p t ( C ) , D o p t ( C ) = arg ? min ? N , D s . t . F L O P s ( N , D ) = C L ( N , D ) (1) N_{opt}(C), D_{opt}(C) = \underset{N, D \ \mathrm{s.t.} \ \mathrm{FLOPs}(N, D) = C}{\arg\min} L(N,D) \tag{1} Nopt?(C),Dopt?(C)=N,D?s.t.?FLOPs(N,D)=Cargmin?L(N,D)(1)

作者探索這個規律的方法論也很直接,作者步進遍歷了一遍不同的模型尺寸(從70M到16B參數量),也步進遍歷了一遍預訓練數據Token數量(從5B到400B),最終跑了超過400個組合的數據點,不得不說有算力真的可以為所欲為。從直觀上看越大尺寸的模型需要越多訓練的Token,當然我們需要研究具體的比例,作者采用了三種不同的方法去找這個比例關系。

固定模型尺寸下的性能分析

這種方法是分別固定住模型尺寸(從70M到10B多個模型尺寸都需要實驗),然后觀察訓練了不同數量的Tokens數量后,在每一個節點時哪一個模型尺寸能夠達到最小的訓練損失。如Fig 2 左圖 所示, 這里有些地方需要解釋。首先這里的橫坐標是浮點計算量FLOPs,在不同模型尺寸下,相同的FLOPs能訓練的Token數量是不同的,因此才會出現Fig 2左圖中同一個FLOPs中,大尺寸模型損失比小尺寸模型還大的情況。從Fig 2 左圖中,我們能發現在不同的FLOPs下,到達最小損失的模型尺寸是不一樣的(不太容易看出來,在左圖中是灰色點,它們形成了一個包絡線),不同的FLOPs在對應尺寸模型下能夠折算成訓練過的Token數量,因此能夠畫出Fig 2 中圖和右圖,橫坐標是FLOPs,縱坐標是達到最小損失(也就是左圖的灰色點)時的模型尺寸和過了的Tokens數。換句話說,Fig 2中圖和右圖就是給定計算預算 C C C下的最佳模型尺寸 N o p t N_{opt} Nopt?和訓練數據量 D o p t D_{opt} Dopt?,我們發現有 N o p t ∝ C a , D o p t ∝ C b N_{opt} \propto C^{a}, D_{opt} \propto C^{b} Nopt?Ca,Dopt?Cb,通過實驗可以算出 a = 0.50 , b = 0.50 a = 0.50, b = 0.50 a=0.50,b=0.50

fig2_fix_model_size_vary_tokens_num

Fig 2. 訓練曲線包絡。左側展示了我們所有不同的運行情況。我們啟動了一系列模型尺寸,從70M到10B,每個模型針對四個不同的余弦循環周期長度。從這些曲線中,我們提取了每 FLOP 最小損失的包絡線,我們利用這些點來估計給定計算預算下的最佳模型尺寸(中間)和最佳訓練 token 數量(右側)。綠色顯示了基于訓練 Gopher(5.76 × 1023 FLOP)所用 FLOP 數量的最佳模型尺寸和訓練 token 數量的預測。

固定計算預算下的性能分析

第一種方法的計算量FLOPs沒有固定,在此方法中我們固定計算量 C C C(也就是所謂的IsoFLOP),分析等量計算下的最佳模型參數量 N o p t N_{opt} Nopt?。同時,在知道了每個實驗固定的計算量,和在此之下的最佳模型參數量后,也就可以反推訓練Token數量。實驗如Fig 3 左圖所示,可以發現在不同的固定計算量下(從 6 × 1 0 18 6 \times 10^{18} 6×1018 3 × 1 0 21 3 \times 10^{21} 3×1021 FLOPs),遍歷不同尺寸的模型能夠發現在某些尺寸處會存在明顯的低谷,這個低谷就是在固定計算預算情況下的最佳模型參數量,由此也能繪制出Fig 3 中圖和右圖,繪制邏輯如第一種方法所述。不難發現同樣有 N o p t ∝ C a , D o p t ∝ C b N_{opt} \propto C^{a}, D_{opt} \propto C^{b} Nopt?Ca,Dopt?Cb這個規律,算出 a = 0.49 , b = 0.51 a=0.49, b=0.51 a=0.49,b=0.51

fig3_isoFLOP_profiles

Fig 3. 等量浮點運算曲線(IsoFLOP Curves):針對不同模型規模,通過調整訓練令牌(token)數量,使得最終總浮點運算量(FLOPs)保持恒定,并設置余弦周期長度以匹配目標FLOPs量。研究發現,損失函數會出現一個明顯低谷(如左圖),這表明在給定FLOPs計算預算下,存在一個最優的待訓練模型。基于這些低谷位置,我們推算出更大模型的最優參數規模與令牌數量(中圖和右圖)。圖中綠色部分展示了在Gopher模型計算預算下,最優模型的參數與令牌數量估計值。

對參數化損失函數進行擬合

在第1和2中方法中已經積累了很多最小損失 L L L下的 F L O P s ( N o p t , D o p t ) = C FLOPs(N_{opt}, D_{opt}) = C FLOPs(Nopt?,Dopt?)=C的數據點了,我們不妨把損失拆解為三大部分如公式(2)所示,其中第一項 E E E為不可約損失,也就是自然文本的熵,是不可繼續減少的最基礎的損失項。第二項為(不完美的)參數量為 N N N的Transformer模型訓練過程中產生的損失(因為參數量 N N N總是有限,也就是不完美的,因此總是在理想損失 E E E的基礎上有超額損失),第三項則是(不完美的)訓練數據量 D D D下(因為訓練數據量 D D D不可能是無限的)的產生的超額損失。
L ^ ( N , D ) ? E + A N α + B D β (2) \hat{L}(N, D) \triangleq E + \frac{A}{N^\alpha} + \frac{B}{D^\beta} \tag{2} L^(N,D)?E+NαA?+DβB?(2)

作者采用L-BFGS算法去最小化所謂的Huber loss(因為數據點只有400多個,這個loss作者說對離群點比較穩健)去進行估計 ( A , B , E , α , β ) (A,B,E,\alpha,\beta) (A,B,E,α,β),筆者也沒細究,讀者有興趣的可以翻閱 [3] 和 [4]。最終估計出來的參數為:
E = 1.69 , A = 406.4 , B = 410.7 , α = 0.34 , β = 0.28 (3) E=1.69, A=406.4, B=410.7, \alpha=0.34, \beta=0.28 \tag{3} E=1.69,A=406.4,B=410.7,α=0.34,β=0.28(3)
在LLM Scaling Law的論文 [2] 中提出了一個估算: F L O P s ( N , D ) ≈ 6 N D FLOPs(N, D) \approx 6ND FLOPs(N,D)6ND,借此可以將公式(2)進行變形,得到公式(4)

N o p t ( C ) = G ( C 6 ) a , D o p t ( C ) = G ? 1 ( C 6 ) b , 其中 G = ( α A β B ) 1 α + β , a = β α + β , b = α α + β (4) \begin{aligned} N_{\mathrm{opt}}(C) &= G \left( \frac{C}{6} \right)^a, \\ % 公式1,\mathrm{opt}正體下標 D_{\mathrm{opt}}(C) &= G^{-1} \left( \frac{C}{6} \right)^b, \\ % 公式2,G的逆 \text{其中}\quad % 用\text添加中文注釋,\quad增加間距 G &= \left( \frac{\alpha A}{\beta B} \right)^{\frac{1}{\alpha + \beta}}, \\ % G的定義(注意分數指數) a &= \frac{\beta}{\alpha + \beta}, \\ % a的定義(β在分子) b &= \frac{\alpha}{\alpha + \beta} % b的定義(α在分子) \end{aligned} \tag{4} Nopt?(C)Dopt?(C)其中Gab?=G(6C?)a,=G?1(6C?)b,=(βBαA?)α+β1?,=α+ββ?,=α+βα??(4)

作者算得 a = 0.46 , b = 0.54 a=0.46, b=0.54 a=0.46,b=0.54,具體過程請自行參考原文。

給定計算量下的最優設計

Fig 4是將以上三種預測方法繪制成計算量——最佳模型尺寸估計曲線圖,其中那貼上了一些之前工作的估計 [2] 和一些模型的對比,如Gopher(280B參數量)、GPT-3(175B參數量)和Megatron-NLG (530B)參數量。從圖中能發現:

  1. 方法1和方法2估計出來的曲線基本上貼合,方法3估計出的模型尺寸在計算預算小的時候和前兩者基本貼合,但在大計算預算下會偏小些,不過也不會差距特別大。
  2. 主流的大模型,如Gopher、GPT3等在對應的計算預算下,模型尺寸明顯偏大,基本上是貼著 [2] 的曲線走的。

為了證明本文提出的估計方法更佳準確,作者在方法1和2中對齊Gopher的計算預算(大概是 5.76 × 1 0 23 5.76\times10^{23} 5.76×1023 FLOPs),找到了最佳模型尺寸,約是70B,作者將這個訓練出來的模型稱之為Chinchilla,需要將這個模型的性能和Gopher進行公平對比。注意到在方法1和2中,從Fig 2和Fig 3的右圖中可以找出給定預算下的最佳訓練Token數量,對于Chinchilla來說是1.4-1.5T左右,因此 D o p t / N o p t ≈ 20 D_{opt}/N_{opt} \approx 20 Dopt?/Nopt?20

fig4_optimal_size_tokens_prediction

Fig 4. 預測結果疊加對比:我們將三種不同方法的預測結果與Kaplan等人 [2] 的推算進行疊加對比。研究發現,所有方法均表明,當前大型模型的參數規模應顯著縮小,并因此需要比現有實踐更長的訓練時間。

作者在相當多語言下游任務的基準上進行了測試,都發現Chinchilla對比Gopher存在普遍優勢,在一些任務中甚至超過了Megatron-NLG 530B模型。這些實驗過于冗長,筆者就不展示細節了。

筆者讀后感

這篇論文的意義在于告訴我們,在給定了計算預算下,是存在一個最優的模型尺寸和訓練數據量的,他們存在一個比例( D o p t ≈ 20 N o p t D_{opt} \approx 20 N_{opt} Dopt?20Nopt?),越大的模型就需要越多數據進行訓練,才能發揮出模型最優的性能。這篇論文的發表時間比較早,是2022年,現在已經有很多工作證實了在推理中進行復雜策略可以有效提高模型性能 [5,6],并且這些推理策略同樣也存在Scaling Law。這意味著計算預算不僅可以花在預訓練上,而且可以花在推理時的Scaling,這也是這篇文章沒有考慮到的點。當然,在 [6] 中作者也承認,推理時的Scaling并非是萬能的,而是:

推理時計算與預訓練計算并非一對一“可互換”。對于模型能力范圍內的簡單和中等難度問題,或者在推理(實時性)要求較低的情況下,測試時計算可以輕松彌補額外的預訓練。然而,對于超出基礎模型能力范圍的具有挑戰性的問題,或者在推理(實時性)要求較高的情況下,預訓練可能更有效于提升性能。

也就是說預訓練的地位并不是通過推理時的Scaling就可以替代的,預訓練中分配一定量的計算預算對于全方面提高LLM的性能是必須的。結合了模型訓練、模型推理的更為綜合的最優配比,應該是值得去研究的。

Reference

[1]. Hoffmann, Jordan, Sebastian Borgeaud, Arthur Mensch, Elena Buchatskaya, Trevor Cai, Eliza Rutherford, Diego de Las Casas et al. “Training compute-optimal large language models.” arXiv preprint arXiv:2203.15556 (2022).

[2]. Kaplan, Jared, Sam McCandlish, Tom Henighan, Tom B. Brown, Benjamin Chess, Rewon Child, Scott Gray, Alec Radford, Jeffrey Wu, and Dario Amodei. “Scaling laws for neural language models.” arXiv preprint arXiv:2001.08361 (2020).

[3]. J. Nocedal. Updating Quasi-Newton Matrices with Limited Storage. Mathematics of Computation, 35(151):773–782, 1980. ISSN 0025-5718. doi: 10.2307/2006193. URL https://www.jstor.org/stable/2006193 aka L-BFGS

[4]. P. J. Huber. Robust Estimation of a Location Parameter. The Annals of Mathematical Statistics, 35 (1):73–101, Mar. 1964. ISSN 0003-4851, 2168-8990. doi: 10.1214/aoms/1177703732. URL
https://projecteuclid.org/journals/annals-of-mathematical-statistics/volume-35/issue-1/Robust-Estimation-of-a-Location-Parameter/10.1214/aoms/1177703732.full. aka Huber loss

[5]. https://fesianxu.github.io/2025/03/02/test-time-scaling-laws-20250302/, 《大模型推理時的尺度擴展定律》

[6]. Snell, Charlie, Jaehoon Lee, Kelvin Xu, and Aviral Kumar. “Scaling llm test-time compute optimally can be more effective than scaling model parameters.” arXiv preprint arXiv:2408.03314 (2024).

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72525.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

青訓營:簡易分布式爬蟲

一、項目介紹 該項目是一個簡易分布式爬蟲系統,以分布式思想為基礎,通過多節點協作的方式,將大規模的網頁抓取任務分解,從而高效、快速地獲取網絡數據 。 項目地址:https://github.com/yanchengsi/distributed_crawle…

任務9:交換機基礎及配置

CSDN 原創主頁:不羈https://blog.csdn.net/2303_76492156?typeblog 一、交換機基礎 交換機的概念:交換機是一種網絡設備,用于連接多臺計算機或網絡設備,實現數據包在局域網內的快速交換。交換機基于MAC地址來轉發數據包&#x…

YOLOv8改進------------SPFF-LSKA

YOLOv8改進------------SPFF-LSKA 1、LSAK.py代碼2、添加YAML文件yolov8_SPPF_LSKA.yaml3、添加SPPF_LSKA代碼4、ultralytics/nn/modules/__init__.py注冊模塊5、ultralytics/nn/tasks.py注冊模塊6、導入yaml文件訓練 1、LSAK.py代碼 論文 代碼 LSKA.py添加到ultralytics/nn/…

[Lc(2)滑動窗口_1] 長度最小的數組 | 無重復字符的最長子串 | 最大連續1的個數 III | 將 x 減到 0 的最小操作數

目錄 1. 長度最小的字數組 題解 代碼 ?2.無重復字符的最長子串 題解 代碼 3.最大連續1的個數 III 題解 代碼 4.將 x 減到 0 的最小操作數 題解 代碼 1. 長度最小的字數組 題目鏈接:209.長度最小的字數組 題目分析: 給定一個含有 n 個 正整數 的數組…

安卓binder驅動內核日志調試打印開放及原理(第一節)

背景: 經常有學員朋友在做系統開發時候,有時候遇到binder相關的一些問題,這個時候可能就需要比較多的binder相關日志,但是正常情況下這些binder通訊的的內核日志都是沒有的打印的,因為經常binder通訊太過于頻繁&#…

docker 安裝達夢數據庫(離線)

docker安裝達夢數據庫,官網上已經下載不了docker版本的了,下面可通過百度網盤下載 通過網盤分享的文件:dm8_20240715_x86_rh6_rq_single.tar.zip 鏈接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取碼: szj9 上傳到服務…

MWC 2025 | 紫光展銳聯合移遠通信推出全面支持R16特性的5G模組RG620UA-EU

2025年世界移動通信大會(MWC 2025)期間,紫光展銳聯合移遠通信,正式發布了全面支持5G R16特性的模組RG620UA-EU,以強大的靈活性和便捷性賦能產業。 展銳芯加持,關鍵性能優異 RG620UA-EU模組基于紫光展銳V62…

達夢適配記錄-檢查服務器

service DmServicedmdb status 查看是否開啟,沒有配置systemctl,查看《DM8_Linux 服務腳本使用手冊》2.1.2.2 1 .拷貝服務模板文件( DmService )到目錄( /opt/dmdbms/bin ),并將新文…

Pipeline模式詳解:提升程序處理效率的設計模式

文章目錄 Pipeline模式詳解:提升程序處理效率的設計模式引言Pipeline的基本概念Pipeline的工作原理Pipeline的優勢Pipeline的應用場景1. 數據處理2. DevOps中的CI/CD3. 機器學習4. 圖像處理 常見的Pipeline實現方式1. 函數式編程中的Pipeline2. 基于消息隊列的Pipel…

STM32單片機芯片與內部115 DSP-FIR IIR低通 高通 帶通 帶阻 中值 自適應 濾波器 逐個數據實時 樣條插值擬合

目錄 一、FIR 低通、高通、帶通、帶阻 1、FIR濾波器特點 2、濾波器結構 3、濾波器系數 4、濾波實現 5、FIR 濾波后的群延遲 二、IIR 低通、高通、帶通、帶阻 1、IIR濾波器特點 2、濾波器結構 3、濾波器系數 4、濾波實現 5、IIR濾波后的群延遲 三、中值濾波 1、中值…

C語言_圖書管理系統_借閱系統管理

?? 歡迎大家來到小傘的大講堂?? 🎈🎈養成好習慣,先贊后看哦~🎈🎈 所屬專欄:數據結構與算法 小傘的主頁:xiaosan_blog 本文所需對順序表的理解: 注:由于順序表實現圖書…

表達式基礎

文章目錄 1、表達式組成1、運算符 2、表達式的分類1、算數運算符1、自增運算符和自減運算2、取余運算(%)3、除法運算(/)4、案例 2、關系運算符3、邏輯運算符4、條件運算符(三目運算符)1、案例 5、賦值運算()1、賦值類型轉換2、復合賦值運算 6、逗號運算7、取地址運算(&)8、…

除了合并接口,還有哪些優化 Flask API 的方法?

除了合并接口,還有許多其他方法可以優化 Flask API,以下從性能優化、代碼結構優化、安全性優化、錯誤處理優化等方面詳細介紹: 性能優化 1. 使用緩存 內存緩存:可以使用 Flask-Caching 擴展來實現內存緩存,減少對數…

Web服務器配置

配置虛擬主機 通過虛擬主機,可以實現用自定義的域名來訪問,并且可以為不同的域名指定不同的站點目錄。 配置IP地址和域名的映射關系 申請真實的域名需要一定的費用,為了方便開發,可以通過修改hosts文件來實現將任意域名解析到本…

爬蟲逆向實戰小記——解決webpack實記

注意!!!!某XX網站實例僅作為學習案例,禁止其他個人以及團體做謀利用途!!! aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW5…

藍橋杯 之 前綴和與查分

文章目錄 題目求和棋盤挖礦 前綴和有利于快速求解 區間的和、異或值 、乘積等情況差分是前綴和的反操作 前綴和 一維前綴和: # 原始的數組num,下標從1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的區…

Windows10下本地搭建Manim環境

文章目錄 1. 簡介2. Python環境3. uv工具4. Latex軟件5. 安裝Manim數學庫6. 中文支持參考 1. 簡介 manim是個一科普動畫的庫, 本文用到的是社區版本。 2. Python環境 這個不用多說,可以參考其他的文章。記得把pip也安上。 3. uv工具 上面的pip是老…

#UVM# 關于field automation機制中的 pack_bytes 和unpack_bytes 函數剖析

一 pack_bytes 函數 在 UVM 中,pack_bytes 函數用于將類中的所有字段打包成一個字節流(byte stream)。這是 UVM 提供的字段自動化(field automation)機制的一部分,用于簡化數據打包和傳輸。 extern function int pack_bytes(ref byte unsigned bytestream[], input uv…

YOLOv8 自定義目標檢測

一、引言 YOLOv8 不僅支持預訓練模型的推理,還允許用戶將其應用于自定義對象檢測。本文將詳細介紹如何使用 YOLOv8 訓練一個新的模型,并在自定義數據集上進行對象檢測。 二、數據集準備 1. 數據集格式 YOLOv8 支持多種數據集格式,包括 CO…

關于tresos Studio(EB)的MCAL配置之GPT

概念 GPT,全稱General Purpose Timer,就是個通用定時器,取的名字奇怪了點。定時器是一定要的,要么提供給BSW去使用,要么提供給OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否啟用 GptEnableDisable…