AReaL v0.2(boba)技术深度解析:SGLang 加速下的 7B 数学推理 SOTA 训练实践

发布时间:2026/9/18 6:54:24
AReaL v0.2(boba)技术深度解析:SGLang 加速下的 7B 数学推理 SOTA 训练实践
AReaL v0.2boba技术深度解析SGLang 加速下的 7B 数学推理 SOTA 训练实践【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL导读本文是 AReaL 项目 v0.2代号 boba版本发布博客的深度解析。AReaL 定位为 The RL Bridge for LLM-based Agent Applications而 v0.2 的核心成就在于通过将生成后端从 vLLM 0.6.3 升级到 SGLang v0.4.0借助 radix attention、可变长序列打包训练与基于 GDRDMA 的高性能数据传输等系统优化实现了相比 v0.1 约 1.5 倍的吞吐提升并训练出在数学推理上达到 SOTA 的 7B 模型AIME 2024 pass1 达 61.9。读完本文你将掌握 AReaL 的 PPO 数学推理训练完整配方数据筛选、稀疏奖励、token 级损失归一化、优势归一化、7B/32B 两个规模的可复现训练方案以及长上下文评测的最佳实践。文中所有结论均与仓库源码、配置文件相互印证可直接在仓库中查证复现。AReaL v0.2 三大里程碑AReaL v0.2boba发布于 2025-03-31围绕 训练更快、模型更强、成本更低 三个方向带来三项主要成果SGLang 支持与 1.5x 提速引入 SGLang v0.4.0 作为生成后端并配套一系列工程优化在 7B 模型上相比 v0.1 获得约 1.5 倍的吞吐提升SOTA 7B 模型RL 训练更稳定、采样效率更高得到的 7B 数学推理模型在 AIME 2024 上 pass1 为 61.9、AIME 2025 上为 48.3极具竞争力的 32B 模型仅使用 200 条数据样本在极低成本下复现出与 QwQ-32B 可比的 AIME 2024 推理表现。模型性能对照下表是 v0.2 博客发布的评测数据AIME 2024 / AIME 2025 / GPQA-Diamondpass1模型7BAIME 2024AIME 2025GPQA-DiamondR1-Distill-Qwen-7B55.039.747.1Light-R1-7B-DS56.744.940.9AReaL-boba-RL-7B61.948.347.6模型32BAIME 2024AIME 2025GPQA-DiamondR1-Distill-Qwen-32B72.654.963.2QwQ-32B78.970.264.6Light-R1-32B-DS76.267.863.5AReaL-boba-SFT-32B78.862.160.1需要说明的评测口径以上数字均来自项目团队的重测结果每个数字为 32 次采样的平均值评测代码曾位于evaluation/目录需回退到 commit f55fe682026-02-04或更早版本才能复现。对于基线与 SFT 模型遵循 DeepSeek 建议的配置temperature0.6、top_p0.95并使用默认的 R1-Distill-Qwen 模板对于 RL 训练得到的模型则保持与 RL rollout 阶段相同的 temperature1.0。另外团队在 GPQA 测试时发现所有答案均为 A为消除该偏差对答案选项做了随机化处理。值得注意的两个观察其一尽管训练数据以数学与逻辑题为主RL 训练却在挑战性 STEM 基准 GPQA 上也带来了可测量的提升其二使用仅 200 条数据样本的 SFT 就能在 AIME 2024 上逼近 QwQ-32B78.8 vs 78.9凸显了数据质量在推理训练中的核心地位。1.5x 吞吐提升背后的三大系统优化生成后端升级vLLM 0.6.3 → SGLang v0.4.0v0.2 将 rollout 生成后端从 vLLM 0.6.3 升级为 SGLang v0.4.0核心收益来自 SGLang 的radix attention机制在 RL 场景下同一 prompt 往往需要采样多条响应例如 boba 配置中n_samples: 16共享前缀的 KV cache 可以被复用从而显著提升吞吐。同时SGLang 会在权重更新时自动刷新 radix cache保证 on-policy 强化学习中缓存与最新权重的正确性。从仓库配置可以直观看到生成后端的可插拔设计。例如 boba_grpo.yaml 中同时给出了sglang与vllm两套生成端配置sglang: model_path: ${actor.path} random_seed: ${seed} skip_tokenizer_init: true dtype: ${actor.dtype} max_running_requests: null context_length: 32768 mem_fraction_static: 0.9 vllm: model: ${actor.path} seed: ${seed} skip_tokenizer_init: false dtype: ${actor.dtype} max_model_len: 32768 gpu_memory_utilization: 0.9其中mem_fraction_static/gpu_memory_utilization分别控制 SGLang / vLLM 可用的显存比例此处均为 0.9context_length/max_model_len为 32768 token 的上下文上限。rollout 通过rollout.backend字段如vllm:d4其中d4表示 4 张卡的数据并行选择具体后端。值得一提的工程细节是AReaL 的 SGLang 集成并不停留在简单的 API 调用层面。在 sglang_plugin.py 中可以找到权重更新与 KV cache 生命周期管理的协同实现——插件通过 barrier、flush_cache、_resume_kvcache等机制确保权重写入完成后再安全地刷新/恢复 KV cache这与博客所述 SGLang 自动刷新 radix cache 保证 on-policy 正确性 完全对应。可变长序列打包与动态分配训练为了高效处理变长序列v0.2 的训练侧不再填充padding到等长而是将序列打包pack进 1D 张量并采用一个近似最优的动态分配算法在给定最大 token 预算下分配序列平衡各 micro-batch 的大小并最小化 micro-batch 数量从而最大化 GPU 显存利用率支撑大 batch 的变长输入高效计算。该设计在训练配置中以mb_specmicro-batch spec体现例如 boba_grpo.yaml 中 actor 与 ref 模型均配置mb_spec: max_tokens_per_mb: 16384max_tokens_per_mb即每个 micro-batch 允许的最大 token 预算动态分配算法会在该预算下优化序列与 micro-batch 的排布这正是 消除 padding、按 token 预算打包 的配置化表达。这一机制与仓库中trainer/、engine/fsdp_utils/等训练组件协同工作。面向 1K GPU 规模的 GDRDMA 高性能数据传输在千卡集群规模下rollout 生成数据与训练之间的传输是吞吐瓶颈之一。AReaL 采用NCCL GPU-Direct RDMAGDRDMA通过 InfiniBand/RoCE 实现 GPU 到 GPU 的直接通信绕开 CPU 中转与 PCIe 瓶颈。相比传统以太网方案该方法降低了延迟、提升了吞吐即便在 1000 卡集群中generation 到 training 的数据传输开销也能控制在 3 秒以内此为博客声称的集群实测结论。训练配方一基于 RL 的 SOTA 7B 数学推理模型基座模型以 DeepSeek-R1-Distill-Qwen-7B 为基座。仓库中的 boba 示例则使用更小规模的 R1-Distill-Qwen-1.5Bactor.path: deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B以便在单机 8 卡环境下验证整套流程。数据筛选质量优先的课程策略训练数据集为 AReaL-boba-106k融合了多个开源项目的数据DeepScaleROpen-Reasoner-ZeroLight-R1DAPO并补充了更具挑战性的题目NuminaMath 的 AoPS/Olympiad 子集、ZebraLogic。为保证难度适中团队过滤掉过于简单的题目——具体做法是用基座模型 DeepSeek-R1-Distill-Qwen-7B 对每道题生成 8 个解答若全部解答都正确则删除该题。其背后逻辑是基座模型已能稳定做对的题不再贡献学习信号详见文末 结论与展望。仓库中的 boba 数据加载代码boba_grpo.py也体现了类似的数据工程思路def get_boba_math_dataset(path, tokenizer): dataset load_dataset( pathjson, splittrain, data_filespath, ) dataset dataset.filter(lambda x: len(tokenizer.encode(x[prompt])) 1024) return dataset即用 tokenizer 过滤掉 prompt 超过 1024 token 的超长样本控制输入长度分布。训练数据集在配置中通过train_dataset.path指定示例中为 HuggingFace 上的inclusionAI/AReaL-boba-Datatype: rlbatch_size: 32。稀疏序列级奖励函数v0.2 采用稀疏序列级奖励要求模型把最终答案放入\boxed{}中随后校验 boxed 答案正确得 5错误得 -5。同时观察到KL 奖励会损害长思维链训练效果因此将 KL 系数置零。仓库中对这一设计有非常直接的印证。一方面配置中actor.kl_ctl: 0.0将 KL 散度系数显式关闭另一方面奖励函数在 boba_grpo.py 中实现为def boba_reward_fn( prompts, completions, prompt_ids, completion_ids, solutions, **kwargs ) - float: try: worker get_math_verify_worker() for sol in solutions: try: score worker.verify(str(completions), str(sol)) if score 1.0: return 1.0 except Exception: pass return 0.0 except Exception: # Return 0 if completion parsing fails or any other error occurs return 0.0即遍历标准答案只要任意一个答案被验证通过即得 1.0 分否则为 0.00/1 稀疏信号博客所述 ±5 是 0/1 信号乘以reward_scaling后的具体取值仓库示例配置为reward_scaling: 10.0、reward_bias: -0.5可组合出 ±5 的奖励分布。其底层校验器是areal.reward包中的MathVerifyWorkerareal/reward/init.py它基于math_verify的parse()verify()直接调用默认以 6 位有效数字精度比较数值结果并用线程池实现线程安全的 5 秒超时避免了signal.alarm()只能在主线程使用的限制解析失败或超时一律返回 0。RL 算法去掉 Critic 的 PPO训练算法为 PPO但移除了 critic 模型以节省算力并将折扣因子 γ 与 GAE 参数 λ 均设为 1该做法也被 Open-Reasoner-Zero 采用。结合上文数据这意味着优势完全由稀疏奖励与 GAE 递推计算得出无值函数估计。仓库中 actor 训练的核心实现在 areal/trainer/ppo/actor.py其中_compute_token_level_gae用于逐 token 计算 GAEuse_decoupled_loss、recompute_logprob、eps_clip、ppo_n_minibatches等开关共同决定 PPO 的目标计算方式decoupled loss 会隐式启用recompute_logprob并支持 RECOMPUTE / LOGLINEAR / METRICS / REUSE_TRAIN_LOGP 等多种 proximal log-prob 计算方式见 areal/utils/constants.py。boba 示例配置采用了use_decoupled_loss: true、recompute_logprob: true的组合。Token 级损失归一化在序列级别平均 loss 会低估长文本的整体贡献长序列被截断前的 token 对梯度的贡献被稀释。v0.2 改为在token 级归一化 loss这一实践在 DAPO 中也被强调。这也是 RLVR 工作流areal.workflow.rlvr.RLVRWorkflow中配合enable_thinkingTrue处理思考 token 的重要环节。Rollout 策略每 batch 采样 512 道题、每道题生成 16 条响应总 batch 为 8,192。最大生成长度设为 27K token 以最小化输出截断实验中截断率低于 5%。仓库示例配置通过gconfig复现了这一思路gconfig: n_samples: 16 # 每道题采样的响应数 min_new_tokens: 0 max_new_tokens: 8192 max_tokens: 2048 greedy: false temperature: 1.0其中n_samples: 16与博客的 16 responses per question 一一对应实际最大生成长度需按显存与任务调大示例为 8192temperature: 1.0也与 RL 评测时保持训练温度一致的口径相符。优势归一化训练阶段使用 GAE 计算优势并在所有生成的 token 上做归一化。配置层面由reward_norm与adv_norm两段控制boba 示例的设置如下reward_norm: mean_level: group std_level: group group_size: ${gconfig.n_samples} adv_norm: mean_level: batch std_level: batch即奖励在 同一 prompt 的 n_samples 条响应组内归一化而优势在 batch 维度归一化——前者消除不同题难度差异带来的奖励尺度偏差后者稳定 PPO 的更新步长。关键超参数参数值PPO Minibatches4Learning Rate2e-5Adam ε1e-5该组合在收敛速度与训练稳定性之间取得平衡避免过高的学习率或过小的 ε 带来的崩溃风险。对照仓库示例boba_grpo.yamlppo_n_minibatches: 4与博客一致示例的lr: 1e-5、eps: 1e-8则是 1.5B 小模型 单机环境的适配取值7B 复现请按博客表格使用 2e-5 / 1e-5。其余示例配置还包括optimizeradamweight_decay: 0.01、beta1: 0.9、beta2: 0.999、lr_scheduler_type: constant、gradient_clipping: 1.0、eps_clip: 0.4、rejection_samplingmetric: ratio、upper: 5.0以及seed: 1、enable_offload: false等训练环境项。训练配方二200 条数据逼近 QwQ-32B在 32B 规模上团队进一步精炼数据发布仅含200 条数据点的高质量数据集 AReaL-boba-SFT-200并配套训练脚本通过 SFT 在 AIME 2024 上复现了 QwQ-32B 的推理表现78.8 vs 78.9。这一结果的启示是在推理能力已足够强的基座上极小规模、极高信噪比的 SFT 数据即可唤醒或迁移推理风格大幅降低对齐成本。相关 SFT 训练流程可参考仓库 examples/math 下的 SFT 示例如 gsm8k_sft.py与sft_trainer。评测最佳实践评测阶段使用vLLM v0.6.3作为生成框架。团队识别出若干影响评测结果尤其长上下文生成的设置建议手动配置enforce_eagerTrue no_enable_chunked_prefillTrue disable_custom_all_reduceTrue disable_sliding_windowTrueenforce_eagerTrue关闭 CUDA graph 以换取确定性与长序列稳定性no_enable_chunked_prefillTrue禁用 chunked prefill避免长上下文 prefill 行为差异disable_custom_all_reduceTrue关闭自定义 all-reduce规避多卡通信路径对生成结果的影响disable_sliding_windowTrue关闭滑动窗口注意力确保长上下文推理完整可见。提示词层面遵循 DeepSeek 模型惯例在 prompt 中加入指令Please reason step by step, and enclose your final answer in \boxed{}.同时强制模型每条输出以 \n 开头以鼓励长上下文推理促使模型先换行再开始思考。为得到可靠的 pass1 估计每道题采样 32 个答案SFT 模型使用 temperature0.6、top_p0.95RL 模型保持训练温度 1.0。评测代码曾位于evaluation/目录需回退到 commit f55fe68 及更早版本。这一评测链路与仓库当前用于 RL 验证的math_verify校验器同源保证了训练/评测在答案判分口径上的一致性。结论与展望数据质量与算法创新同等重要v0.2 的实验结果表明高质量数据与算法创新同等关键在强大的基座模型上做 RL 时需要更具挑战性的题目来促进学习一个直接有效的数据过滤策略是——移除基座模型多次采样都能稳定做对的题目因为它们不再贡献性能提升。AReaL 将上述技术全部落地到代码库并提供面向不同模型规模与硬件配置的可复现配置。后续规划包括进一步优化 RL 训练吞吐、引入新的算法特性、持续开源训练数据、扩展到更广泛的推理任务。如何在当前仓库中复现与验证示例入口boba_grpo.py 定义了数据加载、prompt 提取、boba_reward_fn奖励函数与 PPO 训练主流程训练工作流为areal.workflow.rlvr.RLVRWorkflow奖励函数通过字符串路径examples.math.boba_grpo.boba_reward_fn注册属于单轮、支持思考 token 的 reward learning 流程areal/workflow/rlvr.py。配置骨架boba_grpo.yaml 覆盖cluster单机 8 卡、NFS 名字解析、rollout后端选择、max_concurrent_rollouts: 64、dump_to_file: true、actor/refFSDP 训练端、ref与actorcolocation 调度、sglang/vllm生成端、train_dataset、saver/recover/evaluator/stats_logger/perf_tracer等完整训练设施。奖励校验实现areal/reward/init.py 中的MathVerifyWorker与get_math_verify_worker()被 gsm8k、geometry3k 等奖励函数复用如 areal/reward/gsm8k.py并配有针对性的测试与示例。PPO 核心实现areal/trainer/ppo/actor.pyGAE 计算、decoupled loss、prox logp 方式与 areal/utils/constants.pyProxLogpMethod 枚举配置解析见 areal/api/cli_args.py 中GRPOConfig、ActorConfig等数据类字段。一个实用的对比是仓库中的 gsm8k 系列示例gsm8k_grpo.yaml、gsm8k_rl.py使用了与 boba 示例相同的 RLVR 工作流与get_math_verify_worker校验器可作为理解 boba 配方的最小可运行参照tests/test_examples.py中的test_gsm8k_grpo等测试则验证了整条示例训练链路的可执行性。需要提醒的是博客中 7B/32B 的模型权重、106k/200 数据集与提交评测均位于 HuggingFace 与历史提交上仓库内提供的是可运行、可缩放的工程骨架实际复现 SOTA 数字需按博客表格参数lr2e-5、Adam ε1e-5、minibatches4 等并结合对应硬件规模进行。【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考