Open R1 項目進展第二期
我們啟動 Open R1 項目 已經兩周了,這個項目是為了把 DeepSeek R1 缺失的部分補齊,特別是訓練流程和合成數據。
這篇文章里,我們很高興跟大家分享一個大成果: OpenR1-Math-220k,這是我們打造的第一個大規模數學推理數據集!
除此之外,我們還聊聊社區里一些讓人興奮的進展,比如怎么整理出小而精的高質量數據集來微調模型,以及如何在訓練和推理時控制推理模型的“思考步數”。
一起來看看吧!
OpenR1-Math-220k 數據集
DeepSeek R1 的厲害之處在于,它能把高級推理能力“傳授”給小模型。DeepSeek 團隊生成了 60 萬條推理記錄,用來微調 Qwen 和 Llama 系列模型,結果證明,不用強化學習,直接從 R1 “蒸餾”出來的效果也很棒。比如,DeepSeek-R1-Distill-Qwen-7B 在 AIME 2024 上拿下了 55.5% 的成績,比更大的 QwQ-32B-Preview 還強。
不過,這些推理記錄沒公開,這就促使社區自食其力,重新創建了幾個類似的數據集。比如 OpenThoughts-114k、Bespoke-Stratos-17k、Dolphin-R1 和 LIMO。
?? 隆重介紹 OpenR1-Math-220k!這是一個用 512 臺 H100 機器本地跑出來的大規模數學推理數據集,每個問題還配了好幾個答案。我們跟 Numina 合作,基于他們超受歡迎的 NuminaMath-CoT 數據集,推出了全新升級版。
這個 OpenR1 數據集跟其他的有啥不一樣:
- 80 萬條推理記錄: 我們用 DeepSeek R1 為 40 萬道題各生成了兩個答案,篩完后剩下 22 萬道題,每道題都有靠譜的推理過程。
- 512 臺 H100 本地跑: 沒用 API,我們靠 vLLM 和 SGLang 在自家科學計算集群上搞定,每天能生成 18 萬條推理記錄。
- 基于 NuminaMath 1.5: 我們主攻數學推理,針對 NuminaMath 1.5 (NuminaMath-CoT 的升級版) 里的題目生成答案。
- 自動篩選: 用 Math Verify 只留下至少一個正確答案的題目,還請 Llama3.3-70B-Instruct 當“裁判”,撈回更多靠譜答案 (比如有些答案格式亂了,規則解析器認不出來)。
- 性能追平 DeepSeek-Distill-Qwen-7B: 我們在數據集上微調 Qwen-7B-Math-Instruct,效果不輸原版 DeepSeek-Distill-Qwen-7B。
我們希望這個可擴展、高質量的推理數據生成方法,不僅能用在數學上,還能拓展到代碼生成等領域。
數據怎么來的
為了搞出 OpenR1-220k,我們讓 DeepSeek R1 根據模型卡建議的參數去解 NuminaMath 1.5 里的 40 萬道題。還在每道題的提示前加了句:
“請一步步推理,最后把答案寫在 \boxed{} 里?!?/p>
每道題最多給 16k token ,因為我們發現 75% 的題 8k token 就能搞定,剩下的基本得用滿 16k。一開始用 vLLM 跑推理,每臺 H100 一小時能生成 15 個答案,腳本也在之前的更新和 OpenR1 倉庫 里分享了。后來我們試了 SGLang,速度翻倍,每張 H100 一小時能搞 25 個答案!靠著 512 張 H100,我們一天能生成 30 萬個答案,幾天就攢了 80 萬條推理記錄。
每道題我們生成了兩份答案,有些甚至四份,這樣篩選和訓練時更靈活。這種做法跟 DeepSeek R1 的拒絕采樣差不多,還能支持 DPO 這種偏好優化方法。
生成腳本在這兒: https://github.com/huggingface/open-r1/tree/main/slurm
沒篩過的數據集在這兒: https://huggingface.co/datasets/open-r1/OpenR1-Math-Raw
數據怎么篩的
為了確保只留下高質量、正確的推理過程,我們用 Math Verify 來把關。這是個專門評測 LLM 答案的數學表達式評估系統,我們把模型給的最終答案跟數據集里的標準答案對比。
結果發現,55% 的題至少有一個正確答案。但 NuminaMath 1.5 里有些標準答案是空的,或者格式沒法自動校驗,挺麻煩的。雖然我們升級了 Math-Verify,讓它能更好地處理這些怪格式 (后面會講改進),但還是找了個備用方案: 用 Llama-3.3-70B-Instruct 當“裁判”,從被拒的答案里救回一些靠譜的。先把不完整或標準答案空的樣本篩掉,只看格式 OK、答案框得清楚的,最后救回了 2.8 萬道題。
我們給 Llama3.3-70B-Instruct 的指令是:
你是數學答案的檢查員。給你一道題,你得對比標準答案和模型的最終答案,看看是不是一個意思,哪怕格式不一樣。
題目:
{problem}
標準答案:
{answer}
模型答案:
{generation}
只看模型給的最終數學答案,別管這些差別:
- 格式 (比如 \boxed{} 和普通文本)
- 多選題形式 (比如 “A” 和完整答案)
- 坐標對或答案的順序
- 等價的數學表達或符號差異
- 如果模型答案亂七八糟,就說“結果: 不確定”
先簡單說兩三句你的對比思路,然后給出結論,用這幾種格式:
- “結果: 一樣”
- “結果: 不一樣”
- “結果: 不確定”
結合規則校驗 (Math Verify) 和 LLM 判斷,我們既保證了數據質量,又沒犧牲規模。最終數據集有 22 萬道題,推理過程都經過驗證,是個訓練推理模型的好資源。每道題多份答案也方便社區篩選更好的結果,或者根據 NuminaMath 的數據來源和題型再做調整。

數據集分兩塊:
default(9.4 萬道題): SFT 微調后效果最好。extended(13.1 萬道題): 加了 NuminaMath 1.5 的其他來源,比如cn_k12,推理記錄更多。但在這部分微調后效果不如default,可能是cn_k12的題太簡單了。
對于多正確答案的題,我們還試了用獎勵模型 (RM) 挑最好的。每道題如果 R1 給了好幾個正確答案,我們去掉思考過程 ( <think>…</think> ),把問題和答案丟給 Qwen/Qwen2.5-Math-RM-72B 打分,用 vLLM 跑。按分數排了個序,挑了第一名的答案放進訓練集??上嶒灠l現,這么挑跟隨便選一個正確的沒啥差別。以后可以試試評分時帶上推理過程,別只看最終答案。
跟 DeepSeek-Distill-Qwen-7B 比比性能
我們用 5e-5 的學習率,在 default 數據集上微調了 Qwen2.5-Math-Instruct 三輪。為了把上下文長度從 4k 拉到 32k,我們把 RoPE 頻率調到 300k。訓練用的是線性學習率,前面 10% 是預熱。下面是用 lighteval 比較 OpenR1-Qwen-7B、DeepSeek-Distill-Qwen-7B 和 OpenThinker-7B 的表現:
| 模型 | MATH-500 | AIME24 | AIME25 |
|---|---|---|---|
| DeepSeek-Distill-Qwen-7B | 91.6 | 43.3 | 40 |
| OpenR1-Qwen-7B | 90.6 | 36.7 | 40 |
| OpenThinker-7B | 89.6 | 30.0 | 33.3 |
這版數據集只是個起點,社區還能再優化,比如用 DeepSeek R1 的拒絕采樣法提高質量。
Math-Verify 升級了啥
我們在檢查 Math-Verify 的結果時發現了一些問題,就做了大修。強烈建議大家升到最新版 (0.5.2),體驗這些改進:
pip install math-verify==0.5.2
主要升級有:
-
改進了純文本答案的解析和驗證 (比如 \(\text{E}\) 和 \(E\) 算一樣)。
-
改進了答案列表的解析 (比如 \(1\) 和 \(2\) 和 \(3\) 跟 \(1,2,3\) 等價)。
-
修了個 bug,單個 LaTeX 里多個框的答案也能認了 (比如 \(\boxed{1},\boxed{2}\) 等于 {1,2})。
-
加了有序元組。因為判斷列表是元組還是集合非常困難,我們靠標準答案來定:
- (1,2,3) ≠ {3,2,1}; 1,2,3 == {3,2,1}; {3,2,1} == {1,2,3}。
-
支持標準答案的關系表達 (比如小于) 和預測的區間 (比如 \(1 < x < 2\) 等價于 \((1,2)\))。
社區熱點
這周社區從各種角度玩轉了 GRPO,還有研究表明,只要 1000 個優質樣本,就能讓現有開源模型引發推理。
GRPO 的一些實踐
- nrehiew 證明 把 GRPO 用在 Qwen2.5-0.5B 基礎模型上,在 GSM8k 測試中拿下 51% 的準確率,比 Qwen2.5-0.5B-Instruct 高了 10 個點。這成績太亮眼,引發了大家對預訓練中指令數據作用的 熱議。不過,把 GRPO 用到其他基礎模型 (比如 Llama 3) 上還沒啥大突破。Sea AI Lab (SAIL) 的研究 發現,基礎模型稍微提示一下就能自我反思,DeepSeek-R1 論文里的“開悟”可能更多是模型本身牛,而不是 RL 優化的功勞。
- Unsloth 施展 優化魔法,讓 15B 參數的模型只用 15GB 顯存就能跑 GRPO ??。這下 Google Colab 免費也能玩了!
- Axolotl 的 Wing Lian 發現 DoRA 比 LoRA 和全微調收斂快。
- Alexander Doria 搞出了 給詩歌設計的獎勵函數,這很酷,因為 GRPO 第一次公開跳出“可驗證”領域。
測試表現
這周 2025 AIME I 第一部分放出來了,有 15 道難題,是給高中生備戰國際數學奧賽用的。過去一年,AIME 2024 是測 LLM 數學能力的主力,大家很期待 LLM 在新題上的表現:
- ETH Zurich 的研究人員測了一堆模型,發現 性能波動 遠小于預期,只有 10-20 個百分點。
- 但 Dimitris Papailiopoulos 發現 AIME 2025 有幾道題網上早就有了!這可能不小心泄了題,凸顯了 給 LLM 出新題有多難。
LLM 必須用自然語言推理嗎?

一篇新 論文 挺有意思,用循環語言模型在潛在空間隱式推理,能擴展測試時的計算。這跟 Meta 的 Coconut 項目 在潛在空間訓語言模型有點像,但現在用在了推理上。好處是效率高,不用生成一堆“思考”token 也能出好成績。
小而精的推理數據成趨勢?
DeepSeek R1 用 60 萬條推理記錄搞蒸餾,但最近研究發現,不用海量訓練,少量精心挑的樣本也能讓模型學會復雜推理。
比如 s1K 數據集,只有 1000 道數學題,推理過程從 Gemini Flash 蒸餾而來,挑題時看重難度、多樣性和質量。作者用它微調 Qwen2.5-32B-Instruct,在競賽數學測試中比 OpenAI 的 o1-preview 高了 27%。
另一個 LIMO 數據集更狠,只用 817 個樣本就在 AIME 和 MATH 上表現搶眼。作者猜,如果模型預訓練時已經學了很多領域知識,可能幾百個好例子就夠讓它推理開竅。
控制思維鏈長度: 預算強制和獎勵設計
s1K 微調的 Qwen2.5-32B-Instruct 這么牛,一個關鍵是 預算強制。這招能在測試時調整推理時間,要么加個“Wait”讓它多想,要么加個結束標記讓它停。作者發現,模型有測試時擴展性: 多給點思考時間,數學測試的準確率就漲。

類似地,《揭秘 LLM 長鏈推理》 (Yeo 等人) 也研究了思維鏈 (CoT) 長度對效果的影響。他們搞了個 余弦獎勵 (Cosine Reward),正確答案鼓勵短 CoT,錯的推長 CoT,穩住了 RL 訓練,尤其在上下文長度有限、回答容易爆炸時。還有個 重復懲罰,模型要是為刷獎勵在難題上重復廢話,就罰它,逼它好好解題。
下一步干啥?

GRPO 在 TRL 里跑得挺順,我們正在大干一場實驗,看看哪些超參數和獎勵函數最管用。想知道進展,可以去 社區頁 瞧瞧,下次更新會寫詳細報告!
想加入我們?去 GitHub 的 open-r1 倉庫 或關注 Hugging Face 的 open-r1 組織 吧。
英文原文: https://hf.co/blog/open-r1/update-2
原文作者: Loubna Ben Allal, Lewis Tunstall, Anton Lozhkov, Elie Bakouch, Guilherme Penedo, Hynek Kydlicek, Gabriel Martín Blázquez
譯者: yaoqih

浙公網安備 33010602011771號