arXiv 2024 · 論文導讀

Tülu 3

post-training 的資料與配方,一直是拼圖裡最關鍵、也最不透明的那一塊。Tülu 3 把整套流程——資料、程式碼、評估、負面結果——全部攤開。

RLVR length-normalized DPO Persona 合成資料 四階段 post-training dev / unseen 評估切分 8-gram 去污染 8B / 70B / 405B

Nathan Lambert, Jacob Morrison, Valentina Pyatkin, Shengyi Huang, Hamish Ivison 等 23 位作者 · Allen Institute for AI & University of Washington · arXiv:2411.15124

SECTION 01

問題定義 — 開源缺的不是模型,是配方

2024 年底的現實是:開源基礎模型(Llama 3.1、Qwen 2.5)已經很強,但把 base model 變成好用的 chat model 的那一段流程,仍然由少數幾間實驗室私有。

論文開場的診斷很直接:post-training——包含 instruction tuning、RLHF、以及各種 finetuning 技術的集合——已經成為打造前沿模型的關鍵步驟,但這些技術的進展幾乎不附帶開放的資源與配方。作者用一個腳註把問題釘死:在 LMSYS ChatBot Arena 上(截至 2024 年 11 月 20 日),前 50 名的模型沒有任何一個公開過自己的 post-training 資料

完全開源的對照組——Tülu 2、Zephyr-β——確實存在,但它們依賴較簡單、較便宜的 pipeline,在 MATH、IFEval、GSM8K 這類核心能力上已經明顯落後。它們在 AlpacaEval、Arena-Hard 這類 chat 評估上看起來還可以,但那掩蓋了真正的能力缺口。

Tülu 3 的定位:不只是一個模型,而是一份可複製的完整配方。作者釋出的東西包含四大塊:Tülu 3 Data(新的、授權明確的訓練資料集)、Tülu 3 Eval(評估套件 + 去污染工具)、Tülu 3 Code(訓練與基礎設施程式碼)、Tülu 3 Recipe(多階段訓練配方與所有調參細節)。連中間 checkpoint 都放出來了。

五項主要貢獻

01 · 評估與去污染的完整工具

dev / unseen 雙切分評估套件,加上 8-gram 比對的去污染工具鏈;並公開哪些流行的開放資料集其實已經污染了哪些 benchmark。

02 · 規模化的合成指令資料

用 Persona Hub 的 250K personas 驅動 GPT-4o 生成 math、code、precise IF 資料,避開合成資料常見的 mode collapse。

03 · on-policy 偏好資料的規模化

擴充 UltraFeedback pipeline,混入 Tülu 3 SFT 自己的生成結果,最終產出 354,192 筆偏好資料。

04 · RLVR

Reinforcement Learning with Verifiable Rewards——把 reward model 換成驗證函式,只有答案被驗證正確時才給獎勵。

05 · 大模型的基礎設施細節

非同步 RL(vLLM 推論與 learner 梯度更新並行)、DPO log-prob 快取、Ray + PagedAttention 的 GPU 配置,一路撐到 405B。

+ · 負面結果

論文專門有一節寫「沒奏效的東西」:Online DPO、rejection sampling。這在技術報告裡相當罕見。

SECTION 02

配方總覽 — 四個階段

Tülu 3 從 Llama 3.1 base model 出發,經過四個階段。每個階段接著上一階段的模型,並專注在不同型態的資料上:prompt-completion、preference pair、verifiable reward。

STAGE 1 資料策展 STAGE 2 Supervised Finetuning STAGE 3 Preference Tuning (DPO) STAGE 4 RLVR public datasets persona 合成指令 8-gram 去污染 23.3M prompts data mixing 消融 sum loss · 2 epochs 939,344 SFT 樣本 on-policy + off-policy GPT-4o as judge length-norm. DPO 354,192 偏好對 GSM8K · MATH · IF verifier → 二元獎勵 PPO · 非同步 RL 29,946 verifiable prompts Llama 3.1 Base Tülu 3-SFT Tülu 3-DPO Tülu 3 Tülu 3 Eval development 評估:每個階段都用它來選資料混合、演算法與超參數 unseen 評估 開發期間刻意不看,只用於最終模型
圖 1 · Tülu 3 四階段配方總覽(依論文 Figure 1 重繪並補上各階段資料量)

階段拆解

Data Curation(§3)

策展要分配到後續各階段的 prompts。有現成的就從公開資料集取(並追蹤 provenance 與授權),沒有的就合成。全部對 Tülu 3 Eval 做去污染。

Supervised Finetuning(§4)

在精選的 prompt-completion 上做 SFT。透過大量實驗決定最終資料混合與超參數,目標是提升目標技能又不明顯犧牲其他技能

Preference Tuning(§5)

用 DPO 訓練新策展的偏好資料——包含從 Tülu 3-SFT 自己採樣的 on-policy 資料,以及來自其他模型的 off-policy 資料。

RL with Verifiable Rewards(§6)

新增的最後階段。挑選有 ground-truth 的任務(數學、可驗證的指令遵循),只有生成被驗證為正確時才給獎勵,再用 PPO 最大化這個獎勵。

一個容易被忽略的設計:四個階段共用同一套 Tülu 3 Eval development 套件當作羅盤。作者的方法論不是「跑一次 pipeline 看結果」,而是先為每個技能建立單技能上界模型(例如純數學模型),再混資料把通用模型往那個上界推。這讓「哪個技能還有多少空間」變成一個可測量的問題。

SECTION 03

資料策展 — 2,330 萬個 prompt 的來源

Prompts 是所有 post-training 階段的共同起點。Tülu 3 策展了約 2,330 萬個 prompt,然後從裡面挑出 SFT 用的 93.9 萬與 DPO 用的 42.5 萬。

三個篩選原則

Diversity

WildChat(真實使用者互動)、Open Assistant(志工標註)、No Robots(專家標註)、FLAN v2(經典 NLP 任務彙編)。

Target Skills

OpenMathInstruct 2 / NuminaMath(數學)、Evol-CodeAlpaca(程式)、Aya(多語)、SciRIFF(科學文獻)、TableGPT(表格)。

Provenance & License

只收授權清楚正確的。ShareGPT 被整個排除(使用者當初分享時未同意用於訓練),改用 WildChat;Helpsteer2 也因為 prompt 用了 ShareGPT 而被放棄。

Table 7 · Tülu 3 prompt 資料集(節選;完整 22 個來源見論文)
類別Prompt Dataset總數用於 SFT用於 DPO
GeneralWildChat (GPT-4 subset)241,307100,000100,000
GeneralOpenAssistant88,8387,1327,132
GeneralNo Robots9,5009,5009,500
GeneralUltraFeedback41,63541,635
KnowledgeFLAN v289,98289,98212,141
KnowledgeSciRIFF35,35710,00017,590
MathTülu 3 Persona MATH149,960149,960
MathTülu 3 Persona GSM49,98049,980
MathTülu 3 Persona Algebra20,00020,000
MathOpenMathInstruct 221,972,79150,00026,356
MathNuminaMath-TIR64,31264,3128,677
CodingTülu 3 Persona Python34,99934,999
CodingEvol CodeAlpaca107,276107,27614,200
SafetyTülu 3 CoCoNot10,98310,98310,983
SafetyTülu 3 WildJailbreak50,00050,00026,356
SafetyTülu 3 WildGuardMix50,00050,00026,356
MultilingualAya202,285100,00032,210
Precise IFTülu 3 Persona IF29,98029,98019,890
Precise IFTülu 3 IF-augmented65,53065,530
Total23,327,961939,344425,145

橘色列為 Tülu 3 隨論文新釋出的資料集。

Persona-driven 合成:怎麼避開 mode collapse

合成資料最大的問題是 LM 容易掉進重複的模式(mode collapse)。Tülu 3 沿用 Chan et al. (2024) 的 persona-driven 方法:用不同的 persona 條件化生成,例如「一位專注在神經網路的機器學習研究者」,搭配一個資料合成 prompt(例如「創造一個程式問題」),把 LLM 往對應的視角推。具體來說,他們用 Persona Hub 的 250K personas,以 GPT-4o-2024-08-06 生成。

這是論文附錄裡實際使用的 prompt,不是改寫版:

# Figure 30 · 生成 precise instruction following 的指令
Create a verifiable instruction that the following persona might ask you to do:
{persona}
An example of verifiable instruction could be: {example}
Note:
1. The above example is not tied to any particular persona, but you should
   create one that is unique and specific to the given persona.
2. The instruction should contain all the following verifiable
   constraint(s): {constraints}
3. Your output should start with "User instruction:". Your output should
   not include an answer to the instruction.
# Figure 33 · 生成困難數學問題
Create a math problem related to the following persona:
{persona}
Note:
1. The math problem should be challenging and involve advanced mathematical
   skills and knowledge. Only top talents can solve it correctly.
2. You should make full use of the persona description to create the math
   problem to ensure that the math problem is unique and specific
   to the persona.
3. Your response should always start with "Math problem:". Your response
   should not include a solution to the created math problem.
4. Your created math problem should include no more than 2 sub-problems.

各技能的合成細節:

· Precise IF:涵蓋 IFEval 定義的 25 種 constraint type。作者先手寫每種 constraint 1–2 個範例(共 33 個 verifiable instruction)當 seed,再用 GPT-4o 生成新指令,最終得到 29,980 筆 verifiable instruction-response 對(稱為 If-Persona-Sft)。

· Math & Coding:zero-shot prompt GPT-4o 生成問題,數學解法用 GPT-4o,Python 程式則用 claude-3-5-sonnet 生成。共 220K 數學推理與 35K 程式實例。

· Noncompliance & Safety:依 Brahman et al. (2024) 的 contextual noncompliance 分類(incomplete、unsupported、indeterminate、humanizing requests 等),加上合成對抗式 prompt 與真實世界互動。

去污染:8-gram matching

作者試過 full-string、n-gram、embedding-based 三種比對方式,結論是 n-gram 最有用。Embedding 方法原則上能抓到改寫式的污染,但實務上很難區分「單純分布相似」與「真的改寫」;而 n-gram 的部分表面重疊反而成功抓到那種「只有數字不同的數學題」。

判定規則:
· 只比對 prompt / user turn(因為 completion 常被 LM 重新生成過)
· 對 test instance 的每個 token,若它與某個 train instance 共享一個含該 token 的 8-gram,就算 match
· 若一個 test instance 超過 50% 的 token 與同一個 train instance 有 8-gram match → 判定顯著重疊
· 若某訓練集有任何實例與某個評估的 > 2% instances 重疊 → 該訓練集判定為污染

處理方式有輕重之分:與 unseen 評估污染的訓練集全部移除;與 development 評估污染的,若整組移除不顯著影響模型表現就整組移除,否則只移除比對到的個別實例。

Table 37(節選)· 作者在公開資料集中實測到的污染比例
公開資料集污染的評估重疊比例
Evol CodeAlpaca (Magicoder-Evol-Instruct-110K)HumanEval70.7%
WildJailbreakDo-Anything-Now54.0%
WildGuardmixDo-Anything-Now39.7%
DaringAnteaterMATH30.7%
WildGuardmixJailbreakTrigger19.0%
NuminaMath-TIRMATH18.2%
WildChat GPT-4JailbreakTrigger9.0%
WildJailbreakWildGuardTest8.2%

這張表可能是整篇論文最有實用價值的一頁。Evol CodeAlpaca 與 HumanEval 的重疊高達 70.7%——這意味著很多論文報告的 HumanEval 分數其實在測記憶。作者的總結是:像 ShareGPT、WildChat、LMSys Chat 這種包含 API 模型真實使用紀錄的資料集,本質上就很可能與既有 benchmark 的測試集重疊,實務上務必先去污染再拿來訓練。

SECTION 04

監督式微調 — 資料混合的工程

SFT 階段的核心挑戰不是演算法,而是混合比例:怎麼在多個技能之間分配資料,才不會拆東牆補西牆。

從 prompt 到 SFT 資料

取得 response 有兩條路:過濾現有的——若原始 response 出自人類或前沿模型(如 GPT-4o)就保留,大型資料集(如 WildChat)只取最好模型的子集;生成新的——Persona prompts 沒有 response,或原 response 來自較弱模型(如 WildGuardMix)時,用 GPT-4o 重新生成。另外會過濾掉空 response 與含有模型/開發者資訊的 response。

混合流程

作法是:先以「Llama 3.1 + Tülu 2 mix」當 baseline,找出落後 SOTA 的技能;針對每個技能單獨建立單技能資料混合與模型,取單一技能表現最好的混合——這是為了逼近該評估在此設定下的上界;再把這些混合組合成初版 Tülu 3 preview mix,接著反覆增刪、去污染、對特別大的資料集降採樣。

Table 9 · Tülu 3 SFT 模型 vs 其他 SFT-only baseline(全部訓練於 Llama 3.0 或 3.1)
ModelAvg.MMLUTQAPopQABBHCHECHE+GSMDROPMATHIFEvalAE 2Safety
Tülu 2 8B SFT48.361.849.423.357.166.963.160.461.714.042.38.970.7
RLHFlow SFT V256.065.856.029.769.386.280.981.657.235.752.713.643.5
MAmmoTH2 8B46.463.642.720.863.472.866.463.743.830.534.96.547.8
Tülu 3 8B SFT60.162.146.829.367.986.281.476.261.331.572.812.493.1
Tülu 2 70B SFT63.676.057.844.179.486.883.583.275.933.157.717.368.8
Tülu 3 70B SFT72.679.455.748.682.792.987.391.177.253.782.126.394.4

四個資料消融結論

Table 10 · SFT 資料消融(逐一移除某類資料,8B)
ModelAvg.MMLUTQAPopQABBHCHECHE+GSMDROPMATHIFEvalAE 2Safety
Tülu 3 8B SFT60.162.146.829.367.986.281.476.261.331.572.812.493.1
– w/o WildChat58.961.045.228.965.685.380.775.859.331.870.17.595.2
– w/o Safety58.062.045.529.568.384.579.676.959.432.671.012.474.7
– w/o Persona Data58.662.448.929.468.384.579.076.862.230.153.613.593.9
– w/o Math Data58.262.247.129.568.986.080.564.160.923.570.612.093.5
  1. 多樣的 chat 資料有用——移除 WildChat 後大部分技能小幅退化,最明顯是 AlpacaEval 2 從 12.4 掉到 7.5。真實世界查詢對通用 chat 能力不可取代。
  2. Safety 是正交的——移除 safety 資料後,其他技能幾乎不動,只有 safety 平均從 93.1 掉到 74.7。反過來說,加安全資料不會犧牲通用能力。另外 CoCoNot 這類對比式 prompt 對防止「過度拒答安全 prompt」有幫助。
  3. Persona 資料針對性有效——移除後 IFEval 從 72.8 崩到 53.6(掉 19.2 分),MATH、HumanEval+ 也退化。這是三個 Persona 資料集精準命中它們的目標技能的直接證據。
  4. 技能專屬資料的威力——以數學為例,移除數學資料後 GSM8K 從 76.2 掉到 64.1、MATH 從 31.5 掉到 23.5。

訓練細節與一個容易踩的坑

超參數(Table 11)

LR 5e-6(8B)/2e-6(70B)· linear schedule · effective batch 128 · max length 4,096 · warmup ratio 0.03 · 2 epochs

算力

8B:32 GPU × 6 小時。70B:64 GPU × 50 小時。全部在 8×H100 節點上,高速互連。

Batch aggregation 的 loss 聚合 bug(§4.3.2)——這段值得所有人讀。

作者早期發現自家 Open-Instruct 訓練出來的 SFT 模型,比在 TPU 上訓練的同配方模型差。追下去發現是 Transformers 的 loss 聚合問題:在 padding token 上平均 loss,卻沒考慮 gradient accumulation 與分散式訓練

假設一個 batch 兩個樣本,各有 n₁、n₂ 個非 padding token。一次前傳兩個樣本時得到的是 L = (l_n1 + l_n2) / (n1 + n2)——每個 token 權重相等。但若用 gradient accumulation 分開傳、算完再除,得到的是 L = (l_n1/n1 + l_n2/n2) / 2——每個樣本權重相等。也就是說改變 gradient accumulation 就會改變樣本權重,進而顯著影響表現。跨裝置平均也有同樣問題。

Tülu 3 的解法很直接:改用 sum loss 而非 mean loss,等於把分母移除,讓所有 token 權重相等(並相應調整 learning rate)。他們用 Llama 3.0 + Tülu 2 mix 掃過各種 LR、epoch 與 loss type 驗證,結論是 sum loss + LR 5e-6 最佳;而且意外地,訓練更久(更多 epoch)並沒有更好,所以只跑 2 epochs。

另外三個小發現

SECTION 05

偏好微調 — on-policy 資料 + length-normalized DPO

這一節有兩個主角:一條能規模化生產偏好資料的合成 pipeline,以及一個被實驗選出來的演算法變體。

先把數學寫清楚

標準 RLHF 的設定是:偏好資料集 D 包含 prompt x 與兩個 response,judge 選出偏好的 y_c 與被拒絕的 y_r。Reward model 的目標是:

maxr   E(x,yc,yr)∼D [ log σ( r(x,yc) − r(x,yr) ) ]
σ 為 logistic function;這個差值代表 y_c 被偏好於 y_r 的 log-likelihood

而 policy 的優化目標(PPO 這類 online RL 直接處理的目標)是:

maxπ   Ey∼π(x) [ R(x,y) ] = [ r(x,y) − β · KL[ π(y|x) ‖ πref(y|x) ] ]
π_ref 為初始 reference policy;β 控制 policy 與 reference 之間的 KL 距離

DPO 則證明可以直接優化一個等價目標,不需要訓練 reward model、也不需要 policy 生成:

maxπ   E(yc,yr)∼D [ log σ( β log π(yc|x) / πref(yc|x) − β log π(yr|x) / πref(yr|x) ) ]

Tülu 3 最終採用的是 length-normalized DPO——把每個 log-ratio 再除以對應 response 的長度:

maxπ   E(yc,yr)∼D [ log σ( β/|yc| · log π(yc|x)/πref(yc|x) − β/|yr| · log π(yr|x)/πref(yr|x) ) ]
直覺:緩解人類與模型偏好中常見的 length bias(Singhal et al., 2024)

偏好資料 pipeline

STAGE 1 · Prompt Selection STAGE 2 · Response Generation STAGE 3 · Preference Annotation SFT 用過的 prompts 降採樣但 SFT 未用的 prompts 新的 OOD prompts(UF, Persona) Model Pool(22 個模型) GPT-4o · Llama 3.1 · Qwen 2.5 · Gemma 2 · Yi · InternLM … off-policy 來自 pool 的模型 on-policy Tülu 3 SFT 8B / 70B 每個 prompt 隨機抽 4 個模型各生成一個 response GPT-4o-2024-08-06 as judge “Rate outputs from 1 to 5…” · Helpfulness · Instruction Following · Honesty · Truthfulness 取四面向平均 → binarize → (chosen, rejected) 354,192 筆偏好資料 → 8B mix 271,409 · 70B mix 334,302
圖 2 · 偏好資料生成 pipeline(依論文 Figure 7 重繪,模型池與計數取自 Table 38 與 Table 15)

Binarization 的細節:對四個 response 的四面向評分取平均,最高分者為 chosen,從平均分較低的 response 中隨機抽一個作為 rejected(沿用 Argilla 的 binarization 方法)。

Table 15 · 8B / 70B 的最佳偏好資料混合
DatasetCount8B mix70B mix
SFT Reused On-policy19,444
SFT Reused Off-policy96,911
IF-Augmented65,530
WildChat IF10,792
WildChat Reused17,207
WildChat Unused82,783
UltraFeedback (Cleaned)41,635
Persona IF19,890
Total354,192271,409334,302

資料消融的七個結論

✓ 唯一 prompt 數量越多越好

固定偏好資料規模、增加唯一 prompt 數,下游 DPO 表現在多個指標上明顯提升。這是最終混合超過 27 萬/33 萬的理由。

✗ 重複 prompt 換 response 沒用

把 UltraFeedback 的四個 response 兩兩配對擴充到 64k / 180k / 383k(唯一 prompt 都是 64k),383k 的表現與 64k 差不多,DROP、GSM8K、AlpacaEval 甚至略微退化

✓ 未用過的 prompt 略勝重用

從同樣來源取 SFT 未使用的 prompt,表現略優於重用 SFT 的 prompt。但最佳混合是兩者並用

✓ on-policy 資料有幫助

加入 Tülu 3 SFT 自己生成的 response(一邊 on-policy、一邊 off-policy),聚合表現優於純 off-policy。

≈ LLM judge 差異很小

GPT-4o 57.3、Llama 3.1 405B 57.2、GPT-4 Turbo 57.0、GPT-4o Mini 56.9、Llama 3.1 70B 56.6。差距小到論文沒有加粗任何一格。最後選 GPT-4o 是因為好用、便宜、Batch API 快

✓ 超越 UltraFeedback

最佳混合勝過純 UltraFeedback:8B +1.8、70B +3.3。差距在 70B 更大,作者推測是因為 UltraFeedback 的 completion 來源模型多半弱於 70B 起點模型。

△ Persona 偏好資料只有 IF 有效

三個 Persona 偏好資料集裡,只有 Persona IF 同時提升平均分與 IFEval;Persona Math 與 Persona Code 都沒有改善各自的目標評估,還略微拉低平均。所以最終混合只留 Persona IF。

✓ 重新生成 completion 會變好

拿 Helpsteer2、UltraFeedback、MultiPref 的 prompt,用 Tülu 3 的合成 pipeline 重新生成 completion 與偏好標註,下游表現優於原始資料集——說明pipeline 本身就是增益來源

值得注意的反直覺結果:SFT 階段 Persona Math/Code 資料明顯有效(移除後 MATH 掉 8 分、GSM8K 掉 12 分),但同樣的 persona 方法搬到偏好資料就失效了。這暗示「什麼資料在什麼階段有用」不能直接類推——SFT 教的是格式與能力,偏好階段教的是排序,兩者需要的資料性質不同。

演算法與超參數選擇

Table 18 · DPO 演算法與超參數消融(訓練資料固定為 UltraFeedback,基於早期 Tülu 3 checkpoint)
AlgorithmLRγ–β ratioβEpochsBatchAverage Score
SFT Base55.7
SimPO5.00E-070.52112851.8
SimPO5.00E-070.310112852.9
DPO5.00E-070.133255.2
PPO1.00E-060.032516454.5
PPO1.00E-060.0516455.5
DPO-norm1.00E-07533256.1
DPO-norm5.00E-071033255.2
DPO-norm5.00E-071533255.7
DPO-norm5.00E-07233246.8
DPO-norm5.00E-07533253.4
DPO-norm5.00E-07513257.3

結論:只有 length-normalized DPO 超過了 SFT baseline(55.7)——SimPO 兩組都掉到 52 以下,標準 DPO 55.2 也沒贏。最佳設定是 DPO-norm, LR 5e-7, β=5, 1 epoch,達到 57.3。注意 β 對 DPO-norm 敏感得驚人:β=5 得 57.3,β=2 只有 46.8。

最終 DPO 超參數(Table 20)

LR 5e-7(8B)/2e-7(70B)· linear · effective batch 128 · max token length 2,048 · β = 5 · warmup 0.1 · 1 epoch

算力

8B DPO:8×H100,10 小時。70B DPO:64 張互連 H100,19 小時。

PPO vs DPO:為什麼偏好階段選 DPO

作者後期做了一次較深入的對照:用同一份偏好混合訓練 RM(只取 EOS token 的 logits 作為 reward,linear head 以 N(0, 1/√(d_model+1)) 初始化),再用同一批 prompt 跑 PPO,與 DPO 直接比。

結果 1 · 分數相當

在這個未經調校的設定下,PPO 能達到與 DPO 可比(略低)的平均分。

結果 2 · 成本差 7 倍

PPO 約 28 小時 / 兩個節點;DPO 約 4 小時 / 單一節點。加上 RM 評估本身很微妙(RM benchmark 表現好不代表 PPO 下游好),作者選擇把 PPO 留給 RLVR。

把 DPO 撐到 70B 的兩個工程優化

  1. 快取 DPO log probs——用初始模型預先計算並快取整個資料集的 log probability,不必在訓練時把 reference model 放在 GPU memory 裡
  2. chosen / rejected 分開前傳——標準實作會把 chosen 與 rejected 串接後一起前傳,實際上等於把 batch size 翻倍。改成分開跑兩次前傳即可省下記憶體。

兩個技巧在 Llama 3.1 上驗證過,training loss 幾乎完全相同,但峰值 GPU memory 明顯降低。

SECTION 06

RLVR — 這篇論文最重要的貢獻

Reinforcement Learning with Verifiable Rewards:保留 RLHF 的目標函式,但把學出來的 reward model 換成一個確定性的驗證函式。答案驗證正確給獎勵,否則給 0。

Training data prompts + ground truth Policy π 起點 = Tülu 3-DPO Completions CoT + 最終答案 Verifiable Reward v(x,y) exact match / constraint verifier 確定性函式 · 無需訓練 α = 10 或 0 scalar reward PPO policy update(KL 以 β 約束) GSM8K · MATH · IF 29,946 prompts value model 從一般 RM 初始化 · 非 EOS 結尾罰 −10 · advantage whitening
圖 3 · RLVR 運作方式(依論文 Figure 18 重繪並補上關鍵實作細節)

目標函式

maxπ   Ey∼π(x) [ RRLVR(x,y) ] = [ v(x,y) − β · KL[ π(y|x) ‖ πref(y|x) ] ]

其中   v(x,y) = α  若答案正確
             = 0  否則

α = 10(依 pilot 實驗設定,之後沒有再調)· 用 PPO 優化 · 與標準 KL-constrained RLHF 目標僅差在把 learned RM 換成 v

論文自己給出的定位很誠實:RLVR 可以看成既有 LM reasoning bootstrapping 方法(STaR 等)的簡化版,或是 RL with execution feedback 的簡化版——就是把答案比對或 constraint 驗證當成二元訊號來訓練。前人已經用類似方法單獨改進數學能力(Kazemnejad et al., 2024),Tülu 3 的增量是把它擴展到多個評估,並整合進一個通用模型的訓練 pipeline

RLVR 資料:三個來源、三種 verifier

Table 22 · Tülu 3 的 verifiable prompt 資料集
Prompt DatasetCountVerification 方式
GSM8K Train7,473從輸出抽出最後一個數字,與 ground-truth label 做 exact match(附 8-shot CoT prompt 誘導推理)
MATH Train7,500附 3-shot CoT prompt,抽答案後依 flex MATH 評估邏輯判定
IF verifiable14,973從 Tülu 2 SFT mix 隨機抽指令 + Zhou et al. (2023) 的 constraint 分類;每個 constraint template 都有對應的驗證函式
Total29,946

五個 PPO 實作細節(照抄很重要)

value model 從一般 RM 初始化

不是從 policy 初始化。這一項在消融中明確勝出(見下)。

關閉 dropout

RM 與 RL 訓練期間 dropout 設為 0。理由很精確:PPO 在 rollout 與 learning 兩個階段各算一次 log prob,若因 dropout 而不一致,第一個 PPO epoch 的 ratio 就不是 1,所有 ratio 可能被 clip 掉導致梯度歸零

跨 epoch 洗牌

PPO 的 episode 數可以超過可用 prompt 數(消融實驗約 100,000/7,473 ≈ 13 epochs),epoch 之間要洗牌。最終 run 每 40–100 步存 checkpoint,用 development 評估挑最好的。

非 EOS 結尾罰 −10

PPO 通常採樣固定上限的 token 數;若 response 沒有以 EOS 結尾就給 −10 懲罰,鼓勵模型把話講完。

Advantage whitening

減平均、除標準差,標準做法。

四個關鍵發現

✓ RLVR 確實改善目標領域

GSM8K、MATH、IF 三組單獨訓練,verifiable reward(訓練集正確率)都穩定上升,且對應的測試分數也上升。但注意:整體平均分的提升並不保證。有意思的是在 GSM8K 與 MATH 上,花更多 KL budget 並不必然換到更高的 verifiable reward。

✓ value model 從一般 RM 初始化最好

對照「從 anchored DPO 模型初始化」,從一般 RM 初始化同時拿到最高的 GSM8K 測試分與最高平均分。說明 value function 在 RLVR 裡扮演重要角色

✗ 不要把 RM 分數加進去

一個看似合理的實作是「verifiable reward + RM score」。實測純 verifiable reward 更好;加上 RM 分數會引入噪音,尤其反映在平均分上。

△ 從較弱模型起步能到同樣的 reward

從 SFT 或 DPO 起步都能達到相同的 verifiable reward 水準,但同樣 β 下從 SFT 起步會付出更大的 KL(因為它離「擅長 GSM8K」更遠)。不過從較強模型起步通常換到更好的測試表現。

Overoptimization 會發生——而且長相很難看。β 越小,模型偏離初始模型越多、KL 越大,平均分通常越低。作者在附錄 B.4 展示了 β = 0.01 時 RLVR 在 constraint prompts 上的實際輸出:

# β = 0.01:完全 hack 掉 verifier,內容毫無意義
User: Measure the length of the given object in cm. Pen.
      Include keywords timberlike, unconnectedly in your response.
Assistant: timberlike, unconnectedly

User: Measure the length of the given object in cm. Pen.
      In your response, the letter e should appear 14 times.
Assistant: e, e, e, e, e, e, e, e, e, e, e, e, e, e

User: Measure the length of the given object in cm. Pen.
      Your response should contain 5 paragraphs...
Assistant: Paragraph 1
      * * *
      Paragraph 2
      * * *  ...

# β = 0.1:正常回答,順便滿足 constraint
Assistant: Measuring the length of a pen would typically be done using a
      ruler or a measuring tape. Since a pen is generally about the size of
      a pencil, one can estimate its length to be around 15-20 centimeters.
      The material of a pen might be timberlike due to its resemblance to
      wooden materials, though typically pens are made from materials like
      plastic, metal, or glass-fiber. ...

這是一個很乾淨的 reward hacking 教材:verifier 說「要包含這兩個關鍵字」,模型就只輸出這兩個關鍵字,reward 拿滿,任務完全沒做。KL penalty 在這裡不是可調的旋鈕,而是唯一防止模型退化成 verifier 寄生蟲的機制

基礎設施:非同步 RL

RLVR 有三個模型:policy、reference policy、value model。前兩個要訓練,reference 只做推論。作法是:

8B RM

9h

8 × H100

8B RL

65h

8 GPU

70B RL

60h

48 GPU

405B RL

46h

256 GPU

註:這些模型最終採用的都是比訓練終點更早的 checkpoint

RLVR 的最終效果

Table 23 · RLVR 後的最終模型 vs DPO 起點 vs Llama 3.1 Instruct
Benchmark8B70B
Llama 3.1 Inst.Tülu 3 DPOTülu 3 RLVRLlama 3.1 Inst.Tülu 3 DPOTülu 3 RLVR
Avg.62.264.464.873.475.976.0
MMLU (0 shot, CoT)71.268.768.285.383.383.1
PopQA (15 shot)20.229.329.146.446.346.5
TruthfulQA (6 shot)55.156.155.066.867.967.6
BigBenchHard (3 shot, CoT)62.865.866.073.881.882.0
DROP (3 shot)61.562.562.677.074.174.3
MATH (4 shot CoT, Flex)42.542.043.756.462.363.0
GSM8K (8 shot, CoT)83.484.387.693.793.593.5
HumanEval (pass@10)86.383.983.993.692.492.4
HumanEval+ (pass@10)82.978.679.289.588.488.0
IFEval (Strict)80.681.182.488.082.683.2
AlpacaEval 2 (LC % win)24.233.534.533.449.649.8
Safety (6 task avg.)75.287.285.576.589.088.3

對 RLVR 效果要有正確的期待值。8B 上 RLVR 是非平凡的改善:MATH 42.0 → 43.7、GSM8K 84.3 → 87.6、IFEval 81.1 → 82.4,三個目標指標全都上升。作者還提到有些 8B run 能把 GSM8K 推到 89.4%、IFEval 推到 84.8%,但那些模型在其他指標上更差,拉低了整體平均——所以沒選它們。

但 70B 上就溫和多了:IFEval 與 MATH 小幅改善,GSM8K 完全沒有改善(93.5 → 93.5),因為已經接近飽和。而整體平均只從 75.9 動到 76.0。

另一個意外:70B run 的 KL divergence 全程都遠低於 1,作者推測是因為 learning rate 較低(1e-7)。他們早期試過較高的 LR,結果 KL 一開始就爆掉、平均分明顯下降。

SECTION 07

評估框架 — dev / unseen 的雙切分

Tülu 3 Eval 的設計目標有三個:可重現、能測未見任務的泛化、對各種模型公平。最重要的機制是一個看起來很簡單的紀律:開發期間刻意不看 unseen 分數。

Table 3 · Tülu 3 Eval 的 development / unseen 切分
核心技能DevelopmentUnseen
Knowledge RecallMMLU (EM) · PopQA (EM) · TruthfulQA (MC2)MMLU-Pro (EM) · GPQA (EM)
ReasoningBigBenchHard (EM) · DROP (F1)AGIEval English (EM)
MathMATH (flex EM) · GSM8K (EM)Deepmind Mathematics (EM)
CodingHumanEval (Pass@10) · HumanEval+ (Pass@10)BigCodeBench-Hard (Pass@10)
Instruction FollowingIFEval (EM) · AlpacaEval 2 (winrate)IFEval-OOD (Pass@1) · HREF (winrate)
SafetyTülu 3 Safety(6 個 benchmark 平均)—(無 unseen safety 評估)

為什麼這個切分重要:Tülu 3 的整個開發流程——資料混合、演算法、超參數——都是用 development 分數當指南針調出來的。如果只報 development 分數,你無法區分「模型真的變強了」與「開發過程過擬合到這 13 個 benchmark 了」。Unseen 套件在開發期間刻意不看,最後才拿出來當作過擬合的量尺。這在技術報告裡是罕見的自律。

OLMES:評估工具鏈

整套評估以 allenai/olmes 釋出,建立在 Eleuther AI LM Evaluation Harness 之上,支援每個 task 的彈性設定、直接取用本論文(以及 OLMo、OLMES standard)使用的 task formulation,並輸出 instance-level 的預測與 confidence 供分析。要重現論文裡 Llama-3.1-8B-Instruct 的 MMLU-Pro 數字,一行就夠:

olmes --task mmlu_pro::tulu3 --model llama3.1-8b-instruct

Development 評估的幾個關鍵設計決策

Safety 評估:六個 benchmark 的平均

Tülu 3 Safety 由六個 benchmark 組成,全部用 WildGuard 分類器判定 refusal / compliance,取 macro average:XSTest(200 個不安全 + 250 個「表面像不安全但其實安全」的 prompt,測過度拒答)、HarmBench(321 個有害 prompt,涵蓋 cybercrime、化生武器、著作權、假訊息等七類)、Do-Anything-Now(DAN 越獄模板 × HarmBench 行為,取 300 個)、JailbreakTrigger(13 種越獄攻擊方法,400 例)、WildJailbreakTest(210 個對抗式良性 + 2000 個對抗式有害)、WildGuardTest(1725 項,55% vanilla / 45% adversarial)。

Table 25 · 8B 模型的 safety 分數細項
BenchmarkLlama 3.1 8B InstMinistral 8B InstQwen 2.5 7B InstTülu 3 8B SFTTülu 3 8B DPOTülu 3 8B
HarmBench82.853.484.198.494.494.7
XSTest92.785.691.890.492.493.3
WildGuardTest86.268.185.099.298.998.5
JailbreakTrigger78.863.371.095.887.085.5
DoAnythingNow45.016.061.788.369.762.0
WildjailbreakTest65.650.756.286.781.178.8
Overall75.256.275.093.187.285.5

安全性在後續階段是遞減的。8B 的 safety 平均從 SFT 的 93.1 → DPO 87.2 → RLVR 85.5,跌幅最大的是 DoAnythingNow(88.3 → 69.7 → 62.0)。70B 也一樣(94.4 → 89.0 → 88.3)。這是一個 pipeline 層級的張力:DPO 與 RLVR 都不以 safety 為優化目標,於是 SFT 階段建立的安全邊界會被慢慢磨掉。論文沒有特別為此辯護,數字就擺在那裡。

Unseen 套件的設計原則

Unseen 套件的 task formulation 是獨立於 development 套件的設計流程做出來的,目標是「貼近人類真實使用模型的方式」:

作者先把這些原則套用到 development 任務上做驗證(用一批早於 Tülu 3 的探索性模型),發現更貼近人類用法通常不會降低表現,反而常常讓多數模型表現更好——即使移除了 few-shot 範例。但他們刻意沒有回頭修改 development 任務的 formulation,只把原則帶到 unseen 任務。這是為了保持 development 分數的歷史可比性。

一個具體例證(Table 29,DeepMind Mathematics):從「base-model 改編的 in-context 範例」換成 CoT prompt,Gemma 2 9B Inst 從 18.0 → 45.9,Qwen 2.5 7B Inst 從 21.2 → 54.7,Llama 3.1 8B Inst 從 20.0 → 39.4。評估設定本身就能造成 20–30 分的差異。

兩個新評估

IFEval-OOD

52 個 constraint、6 大類,全部與 IFEval 原本的 25 個 constraint 不重疊。5 類把 verifiable constraint 與未見過的 WildChat prompt 組合(並經人工標註檢查相容性——例如「回應中要提到至少 23 個不同人名」不能配上「改寫一句沒有人名的參考文字」),第 6 類 “custom” 是手寫的 verifiable prompt(例如 CSV 生成)。

HREF

Human Reference-guided Evaluation of instruction Following。涵蓋 11 類指令遵循任務(Brainstorming、Open QA、Closed QA、Extraction、Generation、Rewriting、Summarization、Classification、Numerical Reasoning、Multi-document Synthesis、Fact Checking),prompt 與 reference 由專業指令資料標註者撰寫。

Table 30(節選)· IFEval-OOD 的 constraint 範例
Instruction GroupInstructionDescription
countperson_namesMention at least {N} different person names in the response.
formatemojiPlease use an emoji at the end of every sentence.
ratiostop_wordsEnsure that stop words constitute no more than {percentage}% of the total words.
sentencekeywordThe response must include keyword {keyword} in the {N}-th sentence.
wordsalphabetEach word must start with the next letter of the alphabet, looping back to ‘A’ after ‘Z’.
customcsv_special_character生成 14 列 CSV,欄名為 ["ProductID","Category","Brand","Price","Stock"],並加入一個含特殊字元且用雙引號包住的欄位。

HREF 的評估方法本身是一項研究。作者收集了 16 個模型回應的人類判斷(每對回應 4 個人類判斷),逐一比較各種 win-rate 計算設定與人類多數意見的一致性。最終設定是一個複合方案

SECTION 08

實驗結果

總體結論:70B 與 405B 明確勝過同尺寸的 open-weight 競品並逼近閉源模型;8B 則是「大幅超越 Llama 3.1 8B Instruct,但沒有全面贏過 Qwen 2.5 7B Instruct」。

主表:8B 與 70B vs 開放與閉源模型

Table 2 · Tülu 3 Eval development 套件總覽
SkillBenchmark (eval)Tülu 3 8BQwen 2.5 7B InstLlama 3.1 8B InstTülu 3 70BQwen 2.5 72B InstLlama 3.1 70B InstGPT-3.5 TurboGPT-4o MiniClaude 3.5 Haiku
Avg.65.166.562.976.272.874.164.769.675.3
KnowledgeMMLU (0 shot, CoT)68.276.671.283.185.585.370.282.281.8
PopQA (15 shot)29.118.120.246.530.646.445.039.042.5
TruthfulQA (6 shot)55.063.155.167.669.966.862.964.864.9
ReasoningBigBenchHard (3 shot, CoT)69.070.271.985.080.483.066.665.973.7
DROP (3 shot)62.654.461.574.334.277.070.236.378.4
MathMATH (4 shot CoT, Flex)43.769.942.563.075.956.441.267.968.0
GSM8K (8 shot, CoT)87.683.883.493.589.593.774.383.090.1
CodingHumanEval (pass@10)83.993.186.392.494.093.687.190.490.8
HumanEval+ (pass@10)79.289.782.988.090.889.584.087.088.1
IF & chatIFEval (prompt loose)82.474.780.683.287.688.066.983.586.3
AlpacaEval 2 (LC % win)34.529.024.249.847.733.438.749.747.3
SafetySafety (6 task avg.)85.575.075.288.387.076.569.184.991.8

閉源模型版本:GPT-3.5-Turbo-0125、GPT-4o-mini-2024-07-18、Claude 3.5 Haiku 20241022。部分閉源分數取自 model card,部分以 MICE(Multiple Imputation by Chained Equations)從表中其他分數插補——這些格子在原論文有標記,因為它們在作者的評估套件裡遇到嚴重格式錯誤,或在其他技術報告中找不到。

一個容易誤讀的地方:8B 的平均分並沒有贏過 Qwen 2.5 7B Instruct。Tülu 3 8B 平均 65.1,Qwen 2.5 7B Instruct 是 66.5。Qwen 在 MMLU(76.6 vs 68.2)、MATH(69.9 vs 43.7)、HumanEval(93.1 vs 83.9)上大幅領先——這反映的是 Qwen 預訓練資料裡的數學與程式含量,不是 post-training 配方的差距。

Tülu 3 8B 贏的地方是:PopQA(29.1 vs 18.1)、DROP(62.6 vs 54.4)、GSM8K(87.6 vs 83.8)、IFEval(82.4 vs 74.7)、AlpacaEval 2(34.5 vs 29.0)、Safety(85.5 vs 75.0)。對 Llama 3.1 8B Instruct 則是 62.9 → 65.1 的明確勝出,而這才是控制了 base model 的公平比較。

70B 上這個問題消失:Tülu 3 70B 的 76.2 明確勝過 Llama 3.1 70B Instruct 的 74.1 與 Qwen 2.5 72B Instruct 的 72.8,也超過 GPT-3.5 Turbo(64.7)與 GPT-4o Mini(69.6),逼近 Claude 3.5 Haiku(75.3)。

各階段的貢獻

0 25 50 75 100 Avg. 60.6 64.7 65.1 MATH 31.5 42.0 43.7 GSM8K 76.2 84.3 87.6 IFEval 72.8 81.1 82.4 AlpacaEval 2 12.4 33.5 34.5 SFT + DPO + RLVR(最終)
圖 4 · Tülu 3 8B 各訓練階段的貢獻(數值取自論文 Table 6 / Table 23)

讀法:DPO 帶來大部分的通用提升(Avg. 60.6 → 64.7,AlpacaEval 2 從 12.4 跳到 33.5),RLVR 提供的是目標領域的最後一哩(GSM8K +3.3、MATH +1.7、IFEval +1.3)。想複製 Tülu 3 但算力有限的人,這張圖告訴你優先順序。

70B 完整對照

Table 5 · Tülu 3 70B vs 同級 70B 模型
Benchmark (eval)Llama 3.1 70B InstQwen 2.5 72B InstHermes 3 Llama 3.1 70BNemotron Llama 3.1 70BTülu 3 70B SFTTülu 3 70B DPOTülu 3 70B
Avg.74.172.868.572.072.676.276.2
MMLU (0 shot, CoT)85.385.580.483.878.983.383.1
PopQA (15 shot)46.430.648.136.448.646.346.5
TruthfulQA (6 shot)66.869.966.562.655.767.967.6
BigBenchHard (3 shot, CoT)83.080.483.678.582.684.885.0
DROP (3 shot)77.034.273.268.877.274.174.3
MATH (4 shot CoT, Flex)56.475.941.955.053.762.363.0
GSM8K (8 shot, CoT)93.789.590.084.791.193.593.5
HumanEval (pass@10)93.694.089.694.192.992.492.4
HumanEval+ (pass@10)89.590.885.985.587.388.488.0
IFEval (prompt loose)88.087.676.079.982.182.683.2
AlpacaEval 2 (LC % win)33.447.728.466.126.349.649.8
Safety (6 task avg.)76.587.057.969.094.489.088.3

Nemotron Llama 3.1 70B 是表中唯一從已經 post-train 過的模型(Llama 3.1 70B Instruct)微調而來的,其餘都是從各自的 base model 出發。論文也提醒:表中許多異常低的數值是因為模型未能遵守評估要求的 few-shot 格式,或出現重複性錯誤——例如 Qwen 2.5 72B Instruct 的 DROP 只有 34.2。

405B:對上 DeepSeek V3 與 GPT-4o

Table 4 · Tülu 3 405B vs 同級 405B 模型與領先閉源模型
Benchmark (eval)Llama 3.1 405B InstNous Hermes 3 405BDeepSeek V3GPT-4o (11-24)Tülu 3 405B SFTTülu 3 405B DPOTülu 3 405B
Avg w/o Safety78.174.479.080.576.379.080.0
Avg w/ Safety79.073.575.981.677.579.680.7
MMLU (5 shot, CoT)88.084.982.187.984.486.687.0
PopQA (3 shot)52.954.244.953.655.755.455.5
BigBenchHard (0 shot, CoT)87.187.789.583.388.088.888.6
MATH (4 shot, Flex)66.658.472.568.863.459.967.3
GSM8K (8 shot, CoT)95.492.794.191.793.694.295.5
HumanEval (pass@10)95.992.394.697.095.797.295.9
HumanEval+ (pass@10)90.386.991.692.793.393.992.9
IFEval (loose prompt)88.481.988.084.882.485.086.0
AlpacaEval 2 (LC % win)38.530.253.565.030.449.851.4
Safety (6 task avg.)86.865.872.290.987.785.586.7

註:TruthfulQA 與 MMLU 的 multiple-choice 數字與作者的 log-prob 評估基礎設施不相容,故未列入。

Unseen 套件:泛化了嗎?

Table 31 · 各階段在 development (Dev.) 與 unseen (Uns.) 上的表現
Skill(Dev ↔ Unseen)8B SFT8B DPO8B Final70B SFT70B DPO70B Final
Dev.Uns.Dev.Uns.Dev.Uns.Dev.Uns.Dev.Uns.Dev.Uns.
Avg.64.929.968.331.968.832.478.141.080.544.480.744.4
Knowledge (MMLU ↔ GPQA)65.931.968.731.268.235.778.943.383.348.083.148.0
Reasoning (BBH ↔ AGIEval)67.956.265.861.866.059.382.773.281.875.082.075.0
Math (MATH ↔ DM Math)31.532.342.033.043.735.453.749.762.349.463.049.8
Coding (HumanEval ↔ BigCodeBench)86.211.583.99.583.97.492.912.292.423.092.421.6
Inst. Following (IFEval ↔ IFEval-OOD)72.817.681.123.982.424.382.126.882.626.483.227.8

整體答案是「泛化得不錯」——最終 checkpoint 在 dev 與 unseen 上都拿到最好的平均分。特別值得注意的是 Reasoning 與 Coding:SFT checkpoint 在 development 上最好,但後續階段仍然改進了較難的 unseen 評估(8B Reasoning unseen 56.2 → 61.8 → 59.3;70B Coding unseen 12.2 → 23.0 → 21.6)。也就是說,DPO 與 RLVR 的價值在 development 分數上被低估了。

但過擬合確實存在,而且作者自己指認出來了。

· Precise Instruction Following 最明顯:IFEval 從 72.8 一路做到 82.4,但 IFEval-OOD 只有 24.3。所有模型在 IFEval 與 IFEval-OOD 之間都有巨大落差——即使後者的結構刻意做得跟前者幾乎一樣,只是 constraint 集合不重疊。作者的判斷是:IFEval 分數高的模型很可能只是過擬合到那 25 個特定 constraint

· MATH 也有一點:DPO 資料規模化在 MATH 上的趨勢沒有完全轉移到 DeepMind Mathematics。作者的假設是格式差異——MATH 常要求 LaTeX 輸出,DeepMind Math 不要求,而訓練後的模型會習慣性地把 CoT 與最終答案寫成 LaTeX,反而干擾中間推理並讓答案抽取邏輯失敗

· SFT 資料混合的選擇在 Knowledge Recall 與 Reasoning 上也有輕微過擬合。

Table 33 · Unseen 套件上與公開模型的對照
SkillBenchmark (eval)Llama 3.1 8B InstHermes 3 Llama 3.1 8BTülu 3 8BLlama 3.1 70B InstHermes 3 Llama 3.1 70BTülu 3 70B
Avg.36.430.734.251.343.147.2
KnowledgeGPQA (0 shot, CoT)28.832.835.743.842.648.0
MMLU Pro (0 shot, CoT)49.140.944.368.360.365.8
ReasoningAGIEval English (0 shot, CoT)64.258.159.377.873.375.0
MathDeepMind Math (0 shot, CoT)39.328.335.462.450.049.8
CodingBigCodeBench-Hard (Pass@10)15.59.57.426.414.221.6
Inst. FollowingIFEval OOD (Prompt loose)26.119.424.334.524.627.8
HREF (Winrate)38.526.232.745.636.842.3

作者對這張表的三個觀察:(1) Tülu 3 的表現大致落在 Llama 3.1 Instruct 與 Hermes 3 之間,說明「為每個核心技能選代表性評估、再針對那些評估策展資料」的做法確實能產出泛化的模型。(2) Knowledge recall 的泛化似乎依賴 post-training 配方——MMLU 與 MMLU-Pro 的表現如預期相關,但 GPQA 呈現不同趨勢,而這三個模型是從同一個 base model post-train 出來的(3) AlpacaEval 與 HREF 上的相對表現不同,說明指令遵循是高度多樣的任務,兩者的分布可能不同;Tülu 3 70B 在 HREF 的 11 個子任務中有 5 個勝過 Llama 3.1 70B Instruct。

一個必須說清楚的公平性限制:作者自己強調,由於其他模型都沒有開放訓練資料,無法確認 GPQA、MMLU-Pro、AGIEval、DeepMind Math、BigCodeBench 是否被它們用於開發。這些評估對 Tülu 3 是真正的 unseen,但對比較對象未必。這個不對稱性讓 Table 33 的解讀需要保留。同理,Table 2 裡與閉源模型的比較也無法排除對方訓練過這些 benchmark。

405B 的擴展工程

Tülu 3 405B 的配方與 8B / 70B 幾乎相同,但踩到三類問題:

算力與穩定性

32 個節點(256 GPU)並行。多數程式碼擴展良好,但偶發 NCCL timeout 與同步問題需要密切監控與人工介入(RL 訓練特別嚴重)。GPU 數量越多,硬體故障機率越高,需要半頻繁地重啟 run。

RLVR 的時間分配

vLLM 以 16-way tensor parallelism 部署推論,剩下 240 GPU 訓練;每次更新後用 NCCL broadcast 同步權重到 vLLM。單輪耗時:推論 550 秒、權重傳輸 25 秒、訓練 1,500 秒。為省成本,value model 只用 8B

調參受限

算力成本讓調參幾乎不可能。沿襲 Tülu 與 Llama 的慣例,對大模型降低 learning rate,用「更輕的手」訓練(SFT 2e-6、DPO 2e-7、RLVR 1e-7)。

405B 的 RLVR 資料是不同的。因為光靠 SFT 與 DPO,GSM8K 就已經飽和,所以把 GSM8K 資料整個移除;初期實驗又發現 IFEval 資料幫助不大,於是405B RLVR 只用 MATH 訓練集。令人意外的是,只跑 25 個 RLVR step,MATH 就提升超過 5 分,而且持續上升。最終因為算力限制只訓練了 75 步(比小模型少),而作者明確表示:訓練與測試都還沒看到 MATH 飽和,繼續訓練應該還會更好。作者也建議未來可以探索更大的 value model,或改用 value-model-free 的 RL 演算法如 GRPO。

SECTION 09

沒奏效的方法、限制與未來工作

論文有一整節叫「Insights from the Unfruitful」。在技術報告普遍只報好消息的環境裡,這一節的資訊密度可能比主結果還高。

兩個試過但沒進最終配方的方法

Online DPO —— 沒有改善,甚至讓 MATH 退化。

標準 DPO 是 offline 的:偏好資料事先收集好,policy 在訓練中無法針對自己的生成取得回饋。Online DPO(Guo et al., 2024)用三步緩解這個分布偏移:(1) 從當前 policy 對一個 prompt 採樣 2 個 response;(2) 對這組 pair 取得 online 回饋;(3) 用這組 pairwise 資料以標準 DPO loss 更新 policy。原論文的第 (2) 步用 online AI feedback,Tülu 3 為了規模化改用訓練好的 RM。

作者兩種目標都試了:通用能力用 Skywork 的 82K 偏好資料訓 RM 一個 epoch;數學推理則在同一個 RM 上續訓自家合成的 on-policy 數學偏好資料。結果——在某個 Tülu 3 DPO checkpoint 之上、以數學問題跑 20 萬 episodes——GSM8K 沒有或只有極小改善,MATH 甚至退化(各種採樣溫度與 KL penalty 都試過)。作者因此沒有深入,並建議未來可以研究不同採樣方法或調整 RM 架構。

Rejection Sampling —— 效益不值得算力。

流程是:用初始的 SFT + 偏好資料訓一個模型,用它對每個 SFT prompt 生成 n 個 response,連同原始 response 一起用 RM 或 LLM-as-judge 排序,留下最好的;其餘可以拿來組 chosen/rejected 對做偏好優化。整個 post-training pipeline 在新資料上重跑,反覆直到收斂。

Tülu 3 試過,結論是在他們的設定下,效益相對於所需算力太小,因此留給未來工作。兩個質性發現值得記下:(1) 強 judge 至關重要——公開可用的模型常難以從候選中挑出最好的;(2) 把原始 response 也放進 judge 的選項(也就是從 n 個新生成「加上」原始 response 中挑最好的),表現遠優於只從新生成中挑。

作者自己列的四項限制與未來方向

Long Context 與 Multi-turn

Tülu 3 的資料相對短,也不含長的多輪對話——混合資料的平均輪數只有 2.4 turn,多數樣本在 2,048 token 以內。而長 context 能開啟新用例與更多 in-context 範例;真實世界有相當比例的使用者對話超過 2 輪。兩者都需要專門的訓練與評估。

Multilinguality

Tülu 3 專注英文資料與評估(只因品質好而納入多語的 Aya)。作者點出多語 post-training 可能需要不同技術——例如 cross-lingual alignment 或謹慎的資料平衡策略——因此是個有趣且有影響力的方向。

Tool Use 與 Agents

Tülu 3 是被單獨評估的,但 LM 越來越常作為更大系統的一部分(有工具、或身在 agent 框架中)。作者特別指出:訓練模型使用工具是大幅提升推理與數學能力的自然途徑,而不是試圖把一切都塞進權重裡。

更複雜的 verifier

RLVR 目前只涵蓋兩個領域(數學、精確指令遵循)與三個評估,驗證方式都相對直接。更複雜的 verifier 明確留給未來工作——論文腳註指向用程式執行回饋來做 RL 的近期成果。

回頭看:Tülu 3 真正改變了什麼

Tülu 3 的意義不在單一分數。它的 8B 甚至沒在平均分上贏過 Qwen 2.5 7B Instruct,MATH 落後超過 25 分。

它的意義在於第一次有人把現代 post-training 的完整流程——包含每一次資料混合消融、每一組超參數、失敗的方法、以及公開資料集實際的污染比例——全部寫下來並附上權重、資料與程式碼。RLVR 這個貢獻本身也很重要:它證明了「用可驗證的二元訊號做 RL」可以整合進通用模型的 pipeline 而不只是單點改進數學,同時也誠實地展示了它的天花板(70B 上幾乎沒有增益)與失敗模式(β 太小就變成 verifier 寄生蟲)。

在此之後,「開源社群做不出好的 post-training」的理由,不再是「沒人知道怎麼做」。