打開網(wǎng)易新聞 查看精彩圖片

DeepSeek開啟全新的后訓(xùn)練范式,帶來AI模型技術(shù)平權(quán)時代,行業(yè)紛紛構(gòu)建自己的高質(zhì)量高性能的行業(yè)RL模型。然而,訓(xùn)練高性能的大尺寸模型通常需要龐大的計算資源和海量數(shù)據(jù),這對研究社區(qū)的可復(fù)現(xiàn)性和進一步探索提出了挑戰(zhàn)。為了降低研究門檻并促進開源生態(tài)的發(fā)展,昇騰MindSpeed RL強化學(xué)習(xí)開源套件支持大尺寸模型的強化學(xué)習(xí)高效訓(xùn)練,提供用戶方便易用的復(fù)現(xiàn)指導(dǎo),目前已完成在Qwen25-7B/32B基座模型為例復(fù)現(xiàn)R1-Zero的實踐,模型數(shù)學(xué)能力大大提升。

打開網(wǎng)易新聞 查看精彩圖片

R1-Zero復(fù)現(xiàn)面臨的挑戰(zhàn)

目前,針對大規(guī)模集群強化學(xué)習(xí)RL復(fù)現(xiàn)R1-Zero,在效率、易用性和訓(xùn)練效果上存在諸多挑戰(zhàn)。業(yè)界開源RL框架在大尺寸模型RL訓(xùn)練中有權(quán)重更新時延高、硬件利用率低、并行策略轉(zhuǎn)換OOM等問題,業(yè)界開源RL倉的readme太簡單無法支撐用戶快速上手,同時,RL訓(xùn)練過程依賴人工經(jīng)驗,較好的規(guī)則獎勵定義、訓(xùn)練超參調(diào)整尤為重要。

基于MindSpeed RL套件

復(fù)現(xiàn)R1-Zero

數(shù)學(xué)能力大幅提升

MindSpeed RL提供了從環(huán)境安裝、程序運行、訓(xùn)練效果的詳細指導(dǎo),并提供典型配置文件和腳本供用戶一鍵啟動,同時采用訓(xùn)推共卡、異步流水、分布式打分器等核心技術(shù)進行訓(xùn)練加速。

基于以上能力,分別使用Qwen25-7B和Qwen25-32B作為base模型為例,使用昇騰MindSpeed RL套件復(fù)現(xiàn)DeepSeek-R1-Zero范式在Math領(lǐng)域的工作效果,在數(shù)學(xué)等邏輯推理評測集上,MATH500的分數(shù)提升幅度15分左右,達到70.6和83.2,32B模型下的AIME24的提升幅度高達26分。

01

MindSpeed RL以Qwen2.5-7B為基座模型為例復(fù)現(xiàn)R1-Zero的效果

訓(xùn)練輸入:使用Qwen2.5-7B base模型在orz數(shù)據(jù)集上訓(xùn)練,使用標(biāo)準(zhǔn)的格式獎勵和準(zhǔn)確性獎勵,訓(xùn)練超參如下

訓(xùn)練過程監(jiān)控:訓(xùn)練過程用Tensorboard可視化工具監(jiān)控,可以看到模型的回復(fù)長度Response length呈現(xiàn)典型的先下降后上升趨勢,準(zhǔn)確性獎勵A(yù)ccuracy持續(xù)上升并逐漸穩(wěn)定在0.4~0.5之間。

打開網(wǎng)易新聞 查看精彩圖片

模型效果評估:使用開源榜單評測系統(tǒng)OpenCompass進行模型評估,分數(shù)如下:

對于MATH500,Qwen-2.5-7B原模型的得分是54.4,開源社區(qū)Open-R1獲得69分,而Qwen-2.5-7B+MindSpeed RL得分高達70.6,超越了開源社區(qū);對于AIME24和GPQA,Qwen-2.5-7B+MindSpeed RL的效果也提升了近10分,分別達到16.2和37.3分。

打開網(wǎng)易新聞 查看精彩圖片

MindSpeed RL以Qwen25-7B為例

復(fù)現(xiàn)R1-Zero的模型在數(shù)學(xué)能力效果超越開源社區(qū)

02

MindSpeed RL以Qwen2.5-32B為基座模型為例復(fù)現(xiàn)R1-Zero的效果

訓(xùn)練輸入:使用Qwen2.5-32B模型在deepscaler數(shù)據(jù)集上使用標(biāo)準(zhǔn)的格式獎勵和準(zhǔn)確性獎勵訓(xùn)練,訓(xùn)練超參如下:

打開網(wǎng)易新聞 查看精彩圖片

訓(xùn)練過程監(jiān)控:訓(xùn)練過程用Tensorboard可視化工具監(jiān)控,可以看到模型的回復(fù)長度Response length呈現(xiàn)典型的先下降后上升的趨勢,準(zhǔn)確性獎勵A(yù)ccuracy保持持續(xù)上升;格式獎勵Format很快上升到較高的水平。

打開網(wǎng)易新聞 查看精彩圖片

模型效果評估:使用開源榜單評測系統(tǒng)OpenCompass進行模型評估,分數(shù)如下:

對于MATH500,Qwen-2.5-7B原模型的得分是68.6,開源社區(qū)SimpleRL-Zoo復(fù)現(xiàn)R1-Zero效果獲得82.4分,而MindSpeed RL復(fù)現(xiàn)R1-Zero得分83.2,超越開源社區(qū);對于AIME24,開源社區(qū)SimpleRL-Zoo復(fù)現(xiàn)R1-Zero效果獲得27.2分,MindSpeed RL復(fù)現(xiàn)R1得分30.4,超越開源社區(qū);而對于GPQA,MindSpeed RL復(fù)現(xiàn)R1得分41.1,相比基座模型也有9分提升。

打開網(wǎng)易新聞 查看精彩圖片

MindSpeed RL以Qwen25-32B為例

復(fù)現(xiàn)R1-Zero的模型在數(shù)學(xué)能力效果超越開源社區(qū)

03

訓(xùn)練后模型出現(xiàn)Aha-moment的自我反思現(xiàn)象

訓(xùn)練前,通過prompt可以引導(dǎo)模型部分遵從 的格式,但回答的思考過程較短沒有自我反思,樣例如下:

打開網(wǎng)易新聞 查看精彩圖片

訓(xùn)練后,我們觀察到經(jīng)過幾十個iterations后模型就有一定概率出現(xiàn)Aha-Moment,從“But wait”上看模型在進行自我反思,出現(xiàn)了R1范式中的模型產(chǎn)生CoT思維鏈現(xiàn)象,樣例如下:

打開網(wǎng)易新聞 查看精彩圖片

R1-Zero

(以Qwen2.5-32B為例)

復(fù)現(xiàn)指南

環(huán)境配置

配置MindSpeed RL基礎(chǔ)環(huán)境以及準(zhǔn)備代碼,參考安裝指南

https://gitee.com/ascend/MindSpeed-RL/blob/master/docs/install_guide.md

模型選擇

Qwen2.5-32B下載:

https://gitee.com/link?target=https%3A%2F%2Fhuggingface.co%2FQwen%2FQwen2.5-32B%2Ftree%2Fmain

權(quán)重轉(zhuǎn)換

在進行RL訓(xùn)練之前,模型需要從HuggingFace權(quán)重轉(zhuǎn)換為megatron權(quán)重,可參考權(quán)重轉(zhuǎn)換部分:https://gitee.com/ascend/MindSpeed-RL/blob/master/docs/algorithms/grpo.md

source /usr/local/Ascend/ascend-toolkit/set_env.sh

# 設(shè)置需要的權(quán)重轉(zhuǎn)換參數(shù)

# actor使用TP8PP2,將腳本里改成TP8PP2配置

# reference使用TP8PP1,將腳本里改成TP8PP2配置

bash examples/ckpt/ckpt_convert_qwen25_hf2mcore.sh

# 訓(xùn)練完后如需要轉(zhuǎn)回HF格式

bash examples/ckpt/ckpt_convert_qwen25_mcore2hf.sh

模板構(gòu)造

R1-Zero復(fù)現(xiàn)需要在數(shù)據(jù)處理時加上prompt模板激發(fā) ... ...$\boxed{}

<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\nA conversation between User and Assistant. The user asks a question, and the Assistant solves it. The assistant first thinks about the reasoning process in the mind and then provides the user with the answer. The reasoning process and answer are enclosed within and tags, respectively, i.e., reasoning process here answer here Put your final answer within \\boxed{}.\n{你真正的問題}<|im_end|>\n<|im_start|>assistant\n{模型真正的回答}

數(shù)據(jù)集

對于32B模型應(yīng)使用更高難度的數(shù)據(jù)集,所以我們使用DeepScale 40K來訓(xùn)練。

數(shù)據(jù)集地址:https://gitee.com/link?target=https%3A%2F%2Fhuggingface.co%2Fdatasets%2Fagentica-org%2FDeepScaleR-Preview-Dataset%2Ftree%2Fmain

數(shù)據(jù)預(yù)處理

需要先配置數(shù)據(jù)處理的yaml文件(examples\datasets\r1_zero_qwen25_32b.yaml) 自定義數(shù)據(jù)集需要設(shè)置--map-keys映射,或重寫自定義handler;具體參考數(shù)據(jù)集處理部分

Qwen2.5-32B

處理的時候默認使用qwen_r1的模板

# 啟動轉(zhuǎn)換

bash examples/data/preprocess_data.sh r1_zero_qwen25_32b

訓(xùn)練配置準(zhǔn)備

模型結(jié)構(gòu)的配置文件位于configs/model下,訓(xùn)練配置文件位于configs/目錄下,我們以qwen2.5-32b為例[r1_zero_qwen25_32b.yaml],該配置用到了32卡,為了進一步加速可以不斷增加推理DP的數(shù)量。以下為參數(shù)配置:

defaults:

- model:

- qwen25-32b <-- 網(wǎng)絡(luò)結(jié)構(gòu)需要定義在model目錄的yaml文件下

megatron_training:

global_batch_size: 128 <-- 每個迭代的總樣本數(shù)

dataset_additional_keys: ['labels',] <-- 使用打分器時需要的額外字段

actor_config:

model: qwen25-32b

micro_batch_size: 1 <-- 訓(xùn)練的mbs

lr: 1e-6

lr_decay_style: constant <-- 學(xué)習(xí)率衰減方式

weight_decay: 0.0 <-- 正則化強度系數(shù)

lr_warmup_fraction: 0.0 <-- 控制學(xué)習(xí)率預(yù)熱

no_load_optim: false <-- 續(xù)訓(xùn)加載優(yōu)化器狀態(tài)

no_load_rng: false <-- 續(xù)訓(xùn)加載數(shù)據(jù)隨機數(shù)生成器

no_save_optim: false <-- 保存權(quán)重時同時保存優(yōu)化器狀態(tài)

no_save_rng: false <-- 保存權(quán)重時同時保存數(shù)據(jù)隨機數(shù)生成器

ref_config:

model: qwen25-32b

rl_config:

blocking: false <-- 開啟異步流水

adv_estimator: group_norm <-- 優(yōu)勢計算方法

mini_batch_size: 2048 <-- 訓(xùn)練更新梯度的bs, 一般為gbs*n_samples_per_prompt

max_prompt_length: 1024 <-- 最大的prompt長度

clip_ratio: 0.2 <-- 策略裁剪比例

shuffle_minibatch: false <-- minibatch里的數(shù)據(jù)是否打亂

n_samples_per_prompt: 16 <-- GRPO中一個group內(nèi)生成的response條數(shù)

colocate_actor_ref: false

colocate_all_models: false

rule_reward: true <-- 開啟規(guī)則獎勵

verifier_function: ["acc", "strict_format"] <-- 規(guī)則獎勵模型方法

verifier_weight: [1.0, 1.0] <-- 規(guī)則獎勵模型權(quán)重

use_tensorboard: true <-- 開啟tensorboard日志功能

actor_resource: <-- actor worker資源分配

num_npus: 16

reference_resource: <-- ref worker資源分配

num_npus: 16

generate_config:

trust_remote_code: true <-- tokenizer相關(guān)配置

infer_tensor_parallel_size: 4 <-- 推理時的并行配置

infer_pipeline_parallel_size: 1

infer_expert_parallel_size: 1

max_num_seqs: 128 <-- vllm 推理并發(fā)最大樣本限制

max_num_batched_tokens: 128000 <-- vllm 推理并發(fā)最大token限制

max_model_len: 4096

dtype: "bfloat16"

gpu_memory_utilization: 0.9

offload_train_optimizer: true <-- 卸載訓(xùn)練節(jié)點優(yōu)化器

offload_train_grad: true <-- 卸載訓(xùn)練節(jié)點梯度

offload_train_param: true <-- 卸載模型權(quán)重

sampling_config: <-- vllm 采樣配置

max_tokens: 3072 <-- 單條response最大生成token數(shù)量

logprobs: 1 <-- 是否生成logprobs

max_tokens: 3072

top_p: 0.9

top_k: 50

min_p: 0.01

temperature: 0.9

detokenize: false

手動啟動訓(xùn)練

與基于ray的其他強化訓(xùn)練一樣,我們多機需要先在主節(jié)點初始化ray:

# 創(chuàng)建一個集群,端口6344,dashboard端口8260

ray start --head --port 6344 --dashboard-host=0.0.0.0 --dashboard-port=8260

隨后,在其他節(jié)點加入主節(jié)點的集群:

# IP_ADDRESS 處填寫主節(jié)點 IP 地址

ray start --address="IP_ADDRESS:6344"

最后,在主節(jié)點上啟動訓(xùn)練:

export HCCL_CONNECT_TIMEOUT=1800

export CUDA_DEVICE_MAX_CONNECTIONS=1

python cli/train_grpo.py --config-name r1_zero_qwen25_32b | tee logs/r1_zero_qwen25_32b_full.log

腳本啟動訓(xùn)練

注意:所有節(jié)點的代碼、權(quán)重、數(shù)據(jù)等路徑的層級要保持一致,且啟動ray的時候都位于MindSpeed RL目錄下

更多詳細復(fù)現(xiàn)指導(dǎo)見MindSpeed RL開源readme文件

Qwen25-7B R1-Zero復(fù)現(xiàn)

https://gitee.com/ascend/MindSpeed-RL/blob/master/docs/solutions/r1_zero_qwen25_7b.md

Qwen25-32B R1-Zero復(fù)現(xiàn)

https://gitee.com/ascend/MindSpeed-RL/blob/master/docs/solutions/r1_zero_qwen25_32b.md