高馬爾
一個信息發佈的網站

DeepSeek同款GRPO訓練大提速!魔搭開源全流程方案,支持多模态訓練、訓練加速和評測全鏈路

今天小編(甄正浩)要和大家分享的是DeepSeek同款GRPO訓練大提速!魔搭開源全流程方案,支持多模态訓練、訓練加速和評測全鏈路,歡迎閲讀~

GRPO 訓練又有新的工具鏈可以用,這次來自于 ModelScope 魔搭社區。

随着 DeepSeek-R1 的成功出圈,其使用的 GRPO 算法受到了業界的廣泛關注。GRPO 訓練是來自于 PPO 算法的一種改進,旨在利用采樣原理對 value model 進行簡化,以增大訓練的穩定性和可維護性。

目前圍繞 R1 模型的技術方案,社區也已經有一些開源實現,比如來自 Hugging Face 的 Open-R1,以及其他一些 RL 框架,包括 veRL,OpenRLHF 等等。然而,在 GRPO 訓練方面,大部分方案仍然面臨着諸多挑戰,包括訓練速度較低、集群配置復雜,以及對多模态擴展能力差、訓練後不好評測等等。

為了支持開源社區在 GRPO 這個方向上的探索,ModelScope 魔搭社區圍繞 MS-SWIFT 訓練框架以及 EvalScope 評估框架,推出了相對完整高效的 GRPO 全鏈路解決方案,和社區分享。

GRPO 訓練提速

GRPO 訓練的耗時主要來自于采樣、訓練等幾個方面。其中,采樣本身是 PPO 算法的重要組成部分。尤其是 GRPO 在 PPO 的基礎上,使用采樣代替 value model 的方案,這使得在 GRPO 訓練中,采樣的耗時的占比,更是大大的增加了。而且 GRPO 中單 query 的采樣數(即 group size),一般比較大(DeepSeekMath 論文中為 64 個),高采樣頻率對于推理引擎的挑戰是巨大的。優化采樣效率是提升 GRPO 整體訓練速度的核心所在。

基于這些特點,魔搭社區的 SWIFT 框架進行了有針對性的優化:

多實例數據并行采樣

對于 GRPO 算法,單實例采樣往往無法滿足需求。團隊觀察發現,7B 模型在訓練期間,單 iter 的采樣時間占比約為 70%,這意味着應該允許訓練資源根據實際情況,針對性的傾斜分配給采樣計算

尤其在采樣量以及 batch_size 較大時,采樣耗時對訓練速度影響會更為顯著。因此,在 SWIFT 中對 vLLM 和 LMDeploy 進行了一定的 patch(同時也與相關框架負責同學進行了讨論,将會将相關實現在 vLLM/LMDeploy 上原生支持),支持在任意比例的訓練卡上拉起采樣實例。例如對于 8 卡訓練中,配置 4 張卡負責模型訓練,4 張卡負責采樣;或者 6 張卡負責訓練,2 張卡負責采樣。

下圖展示了在同樣的 8 卡訓練設定下,分别使用 1 卡 /2 卡部署推理引擎進行采樣,剩餘卡負責訓練,vLLM/LMDeploy 的采樣耗時和訓練耗時如下 :

可以看到,基于 LMDeploy 分配 2 卡進行采樣時,訓練時長約為 1 卡采樣的 87%。而 vLLM2 卡采樣時,時長為 1 卡采樣的 78%。在這兩個例子中,通過更合理多卡數分配,對采樣資源進行一定傾斜,都達到了有效降低訓練所需時長都目的。

異步采樣

GRPO 訓練中,采樣和模型訓練需要交替進行,即訓練時采樣卡閒置,采樣時訓練卡閒置。對于這個問題,不同的框架給出了不同的解決方案。

例如 veRL 允許将采樣和訓練部署在同一 GPU 上,在不同階段讓不同的權重 offload 到 CPU 中;或者針對 LLM 的不同 Layer、不同 Tensor 進行異構式切分,在加載權重時不必 all_gather(而是部分 weights 進行 gather 并同步),使訓練模型和采樣模型的效率達到最高。然而在中小模型的體量上,這樣的切分未必是最優的。

因為随着模型尺寸和 batch_size 增大,采樣、訓練的耗時占比會有本質差别。對此 SWIFT 采用了不一樣的技術路線,即異步采樣 ( replay buffer ) ,其原理是在訓練時同時進行采樣,采樣結果用于下一 iter 的模型訓練。由于采樣使用的是 old policy model,因此訓練過程需要額外增加對于 logits 差異的 CLIP。由于 old policy model 和 policy model 僅相差一個 iter,因此其訓練穩定性幾乎沒有下降。二者唯一需要等待(或者 stop the world)的過程是權重加載。

同樣訓練設定下的實驗測試表明,在單卡部署 LMDeploy 的情況下,異步采樣的訓練時間約為同步采樣的 2/3。

模型 placement

SWIFT 除了支持上述訓練和 rollout 使用兩個資源組進行異步訓采流程之外,也支持二者共用同一資源組。即,在 actor 模型訓練時,vLLM 将開啓 sleep 模式以減少顯存占用。

這兩種模式的架構圖如下:

并且,SWIFT 也支持 vLLM 的 tensor_parallel ( MP ) 模式。

LMDeploy 推理框架支持

LMDeploy 是來自于上海浦江實驗室的優秀推理加速框架。該框架不僅支持了純文本和多模态模型的推理加速,并且自研了基于 FasterTransformer 實現的 Turbomind 推理加速引擎。在推理速度上,LMDeploy 相較 vLLM 在一眾模型上速度有顯著的提升。對 Qwen2.5-7B-Instruct 模型進行實驗測試,具體配置如下:使用 AI-MO/NuminaMath-TIR 數據集,批量大小設定為 7,每條 query 采樣 24 條結果,訓練 50 個 steps。以下是 vLLM 框架和 LMDeploy 框架在相同條件下的推理時長對比。

可以看到使用 LMDeploy 作為采樣的推理引擎,在整體的訓練速度上從 44 分 /50steps 加速到 37 分 /50steps,加速比大約為 16%。

注:最後 50steps 的訓練耗時包括了保存模型權重,測試集評測

SWIFT 框架在 TRL 框架以及 vLLM 采樣的基礎上,額外引入了 LMDeploy 采樣的支持。得益于其推理速度和權重加載速度,可以做到整體采樣耗時只有基礎實現的 70%。

多輪更新

多輪更新的核心思想是:讓一次采樣得到的數據可以被多次使用。通過這種方式,可以減少采樣的頻率,從而讓采樣和訓練的資源分配更加均衡。

通過設定參數 num_iterations, 可設定每輪采樣數據的迭代更新輪數,增大該參數值可以多次利用采樣數據,緩解采樣過程對訓練的速度影響,從而提高訓練速度。在該值設定不太大(例如小于等于 4)的情況下,基本不會對模型訓練效果有不良影響。這裏的更新輪次對應論文中的 mu 值。

多輪更新是 TRL 庫提供的機制,發現該機制和團隊提供的其他機制結合起來有更好的加速效果。

基于 1 卡部署 LMDeploy 的設定下,對比 num_iterations 從 1-4 的訓練時間,下面給出了完整的實驗結果:

可以看到,在設定多輪更新輪次為 4 時(mu=4),整體訓練耗時約為單輪更新的一半。

綜合測試

針對八卡環境的 SWIFT、veRL 和 trl 框架的訓練效率進行了對比。在實驗設定中整合了前文提到的多種訓練加速技術,并選用 LMDeploy 作為推理引擎。

具體配置上,采用雙卡進行推理采樣,結合異步采樣策略,并将多輪更新輪次設定為 4 輪。同時,為了更好模拟真實訓練場景,将 batch_size 調整為 48(每輪 6 個 query,梯度累計步數為 8),group size 設定為 24,基于 Qwen2.5-7B-Instruct 模型和 AI-MO/NuminaMath-TIR 數據集 ( 1 ) ,對多框架的 GRPO 訓練速度進行了對比評測。

SWIFT:

veRL:

trl ( mu=4 ) :

trl ( mu=1 )

實驗結果表明,SWIFT 框架的訓練耗時約為 120 秒 / 步,而 veRL 框架訓練耗時約為 280 秒 / 步,TRL 框架在采用多步更新下約為 144 秒 / 步,而不采用多步更新則約為 320 秒 / 步。通過整合多種訓練加速技術,SWIFT 框架在 GRPO 的中小集群訓練效率上實現了顯著提升。下圖展示了 SWIFT 框架下的訓練獎勵走勢,可以看出模型成功實現了獎勵值的提升。

多模态 GRPO 訓練

多模态 GRPO 訓練目前已經有一些開源解決方案,例如 R1-V,open-r1-multimodal 等,都是基于 Open-R1 進行了簡單的擴展。

SWIFT 框架目前已經支持多模态模型(圖文、視頻、音頻)的 GRPO 訓練,只要在數據集中給定’ images ’ / ‘ videos ’ / ‘ audios ’資料欄,GRPO 會将多模态内容輸入多模态模型中進行強化訓練。SWIFT 目前在微調中支持的多模态模型近兩百個,這些模型均天然支持 GRPO 訓練。參考 R1-V 的任務設定,在多模态計數任務上進行了訓練,訓練數據集為 CLEVR-70k-Counting ( 2 ) 。訓練選取的獎勵函數一共有兩個,一個是 Deepseek-R1 中提到的格式獎勵函數,用于評估模型輸出格式的準确性;另一是自定義的準确性獎勵函數,用于計算模型輸出的計數是否與真值一致,目前兩個獎勵函數都已經定義在 SWIFT 框架中,通過— reward_funcs external_r1v_acc format 參數指定。

選取 Qwen2.5-VL-3B-Instruct 作為基礎模型進行訓練,選取 instruct 而不是 base 模型的主要原因是可以更快地獲取 format reward。整體實驗在 8 卡 GPU 上完成。當前 SWIFT GRPO 訓練已支持多卡部署模型以加速 rollout,因此設定 num_infer_workers 為 2,進程數為 6:即 2 卡 vLLM 部署采樣,6 卡模型訓練。設定模型的最大輸出為 1024,學習率設定為 1e-6,其他參數設定詳見最佳實踐 ( 3 ) 。

實驗結果如下圖所示:

模型訓練了 500 個 epoch 已經基本收斂,準确性獎勵 ( 圖中為 ClevrCountORM ) 和格式獎勵(圖中為 Format)在不斷增加,證明模型學習到了如何完成這一任務,最終任務成功率從初始的 0.4 攀升到 1 左右;在大概 300step 左右,reward_std 已經将到 0.1 左右,證明模型已經基本收斂;completion length 最終穩定在 60-80,模型學習到的任務推理範式是逐個列舉圖中的物體。

訓練後的模型輸出樣例如下:

user:How many items are there in the image?assistant:<think> Counting the number of items in the image:n1. Green matte spheren2. Large metallic yellow spheren3. Small metallic brown cubennThere are three distinct objects in total.n</think>n<answer>3</answer>

Reasoning 模型評測

EvalScope 框架是魔搭社區上開源的大模型評測工具 ( 4 ) ,提供了完整的大模型全面評測框架。

不僅提供 O1/R1 等推理類模型的推理性能的評測能力,還支持評測結果的可視化,如下圖所示。

同時,團隊将 MATH-500、GPQA-Diamond 和 AIME-2024 三個數據集整合為一個數據集合,放置于 modelscope/R1-Distill-Math-Test 數據集 ( 5 ) 中,用户可以直接使用該數據集的 ID 進行評測操作,具體使用流程參考:模型推理能力評測最佳實踐 ( 6 ) 。

除此之外,針對 Reasoning 模型在推理過程中存在 Underthinking(思考不足,指模型在推理時頻繁思路跳轉,無法專注于正确的思路,導致錯誤答案)和 Overthinking(過度思考,指模型簡單問題上生成過長思維鏈,浪費計算資源)的問題。

該框架實現了模型思考效率評測能力,可以評估如 DeepSeek-R1-Distill-Qwen-7B ( 7 ) 等推理模型的思考效率,如下圖所示,從 token 效率、思考長度、子思維鏈數量和準确率四個方面進行衡量,可以用來評測并優化模型在短輸出中獲取正确答案的能力,具體使用流程參考教程:模型思考效率評測最佳實踐 ( 8 ) 。

效果

從簡單的數學任務 Countdown Game 出發,對 SWIFT 框架的 GRPO 有效性進行驗證,并給出了完整的實驗流程 ( 9 ) 。

Coundown Game 的任務目标是根據給定的幾個數字和加減乘除四種運算,得到目标數字,給出運算公式,因此在模型的輸入中給定了任務描述、已有數字和目标數字。訓練選取的獎勵函數一共有兩個,一個是标準的格式獎勵函數 , 用于評估模型輸出格式的準确性;另一是自定義的準确性獎勵函數,用于評估模型輸出運算公式是否能得到目标值,目前兩個獎勵函數都已經定義在 SWIFT 框架中,通過— reward_funcs external_countdown format 參數指定。

選取 Qwen2.5-3B-Instruct 模型進行全參數 GRPO 訓練,具體參數設定詳見實驗流程。發現 GRPO 的訓練過程是比較不穩定的,一個比較大的學習率和 beta(KL 散度的權重)雖然會是模型更快收斂,但往往出現梯度過大而訓練崩潰的情況。最終選取學習率為 7e-5,beta 為 0.001。

實驗結果如下圖所示:

一共訓練了 2000 個 step,各項曲線證明了 SWIFT GRPO 的有效性,從實驗結果中也能看到模型的收斂過程。

準确性獎勵(CoundownORM)和格式獎勵(Format)的穩步上升證明模型逐步學習到了如何更好地完成這一任務,同時 reward_std 最終處在 0.2-0.3 左右也證明了模型仍有繼續上升的空間。

從 completion_length 的變化上能明确地看到模型思考方式的轉變。從初始的 500 左右降到 200,然後又增長到 300-400 tokens,能明确看到各個階段模型的思考方式。初始時,模型會直接從結果出發,反推需要的數字;然後,模型逐漸精簡了反推過程,顯著縮減了輸出場地;最後,模型發現完成任務最好的方式是列舉已有數字和運算的組合,并逐步運算,輸出範式基本收斂。最終的輸出樣例如下:

user:"Using the numbers [ 71, 92, 80 ] , create an equation that equals 59. You can use basic arithmetic operations ( +, -, *, / ) and each number can only be used once. Show your work in <think> </think> tags. And return the final equation and answer in <answer> </answer> tags, for example <answer> ( 1 + 2 ) / 3 = 1 </answer>."

assistant:"<think>nWe need to form an expression using the numbers 71, 92, and 80 which results in 59. Let's try some combinations:n ( 92 - 80 ) + 71 = 83 + 71 = 154 ( too high ) n ( 92 - 71 ) + 80 = 21 + 80 = 101 ( too high ) n ( 92 - 80 ) + 71 = 12 + 71 = 83 ( too high ) n ( 92 - 71 ) + 80 = 21 + 80 = 101 ( too high ) n ( 92 + 80 ) - 71 = 172 - 71 = 101 ( too high ) n ( 92 + 71 ) - 80 = 163 - 80 = 83 ( too high ) n ( 80 + 71 ) - 92 = 151 - 92 = 59nnSo our solution is: ( 80 + 71 ) - 92 = 59</think>nn<answer> ( 80 + 71 ) - 92 = 59</answer>"

寫在最後

SWIFT 正在添加 vLLM 的 MP 模式以适配更大體量模型的訓練,并希望在已有的優秀框架的技術沉澱上以差異化技術的方式為開發者提供簡單快速的中、小集群 RL 訓練方案,給開發者提供新的技術選型。目前 SWIFT 已經支持的訓練領網域有數學、ReACT 結構的 Agent、多模态 VQA 等,代碼領網域的支持也在陸續更新中。對于 Megatron 結構的模型 SWIFT 在支持中,不僅僅是 GRPO 訓練,SFT 和 PreTrain 也将得到相應支持。

評測領網域,EvalScope 後續會針對 Reasoning models 進一步探索模型的 " 思考效率 " 問題;另外,從目前的趨勢看,多模态 Reasoning 的範式也逐漸引起重視,團隊也會在該領網域積極探索最新的評測基準、指标和方法。

[ 1 ] AI-MO/NuminaMath-TIR 數據集:https://www.modelscope.cn/models/AI-ModelScope/NuminaMath-7B-TIR

[ 2 ] CLEVR-70k-Counting:https://www.modelscope.cn/datasets/okwinds/clevr_cogen_a_train

[ 3 ] 多模态 GRPO 最佳實踐:https://github.com/modelscope/ms-swift/blob/main/docs/source/BestPractices/GRPO%E5%A4%9A%E6%A8%A1%E6%80%81%E8%AE%AD%E7%BB%83.md

[ 4 ] 大模型評估框架 EvalScope:https://github.com/modelscope/evalscope

[ 5 ] modelscope/R1-Distill-Math-Test 數據集:https://modelscope.cn/datasets/modelscope/R1-Distill-Math-Test

[ 6 ] EvalScope 模型推理能力評測最佳實踐:https://evalscope.readthedocs.io/zh-cn/latest/best_practice/deepseek_r1_distill.html

[ 7 ] DeepSeek-R1-Distill-Qwen-7B :https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

[ 8 ] 模型思考效率評測最佳實踐:https://evalscope.readthedocs.io/zh-cn/latest/best_practice/think_eval.html

[ 9 ] GRPO 完整實驗流程:https://github.com/modelscope/ms-swift/blob/main/docs/source/BestPractices/GRPO%E5%AE%8C%E6%95%B4%E6%B5%81%E7%A8%8B.md  

—    —

學術投稿請于工作日發郵件到:

[email protected]

标題注明【投稿】,告訴我們:

你是誰,從哪來,投稿内容‍

附上論文 / 項目主頁鏈接,以及聯系方式哦

我們會(盡量)及時回復你

一鍵關注 點亮星标

科技前沿進展每日見

一鍵三連「點贊」「轉發」「小心心」

歡迎在評論區留下你的想法!

關于DeepSeek同款GRPO訓練大提速!魔搭開源全流程方案,支持多模态訓練、訓練加速和評測全鏈路就分享完了,您有什麼想法可以聯系小編(甄正浩)。