POLARIS 训练脚本逐行解读:从 batch size 到 clip_ratio 的核心超参数调优

发布时间:2026/8/20 21:09:40
POLARIS 训练脚本逐行解读:从 batch size 到 clip_ratio 的核心超参数调优 POLARIS 训练脚本逐行解读从 batch size 到 clip_ratio 的核心超参数调优【免费下载链接】POLARISScaling RL on advanced reasoning models项目地址: https://gitcode.com/gh_mirrors/polaris34/POLARISPOLARIS 是一个开源的强化学习RL后训练配方项目专注于通过 RL 扩展来提升强推理模型的数学能力。在它的官方训练脚本中Qwen3-4B 经三阶段 RL 训练后AIME25 得分从 65.6 跃升至 79.4甚至超过了 Claude-4-Opus 与 Grok-3-Beta 等商业系统。本文以 scripts/train/qwen3-4b 下的脚本为例逐行解读 POLARIS 训练脚本从 batch size 到 clip_ratio 的核心超参数调优思路一次讲清帮你理解这套配方为什么有效。POLARIS 是什么一个被验证的 RL 训练配方POLARISPost-training recipe for scaling Reinforcement Learning on Advanced Reasoning models把「数据筛选 动态采样 三阶段 RL」整合成一套可复现的训练配方。它构建在 Verl 之上开源了完整的训练脚本、数据集与评测代码任何人都可以按文档复现。4B 模型在 32 张 H800 GPU 上训练约 10 天即可完成约 0.33 小时/步batch size 为 128、rollout 数为 8。训练脚本的整体结构三阶段 RL 训练流程POLARIS 的训练脚本放在 scripts/train/qwen3-4b/ 下包含stage1.sh、stage2.sh、stage3.sh三个脚本对应三阶段训练策略stage1在完整数据集上预热让模型适应长思维链输出stage2用 drop_easy_data.py 丢弃简单样本聚焦难题stage3继续用 search_optimal_temperature.py 重搜最优采样温度进一步打磨每个脚本调用python3 -m verl.trainer.main_ppo启动 GRPO 训练所有超参数以keyvalue形式传给训练器。脚本开头的参数解析如何传入模型与数据脚本开头是一个简易参数解析器支持四个参数./scripts/train/qwen3-4b/stage1.sh \ --model /path/to/qwen3-4b \ --data_path parquet/stage1/qwen3-4b-s1.parquet \ --experiment_name qwen3-4b-stage1--model基础模型路径stage2/3 需传入上一阶段转换出的 HF 权重--data_path训练数据stage2/3 使用过滤后的 harder 数据--n_node节点数单机默认 1--experiment_name实验名用于 wandb 与日志区分stage 之间衔接时需要用 model_merger.py 把 Verl 检查点转换为 HF 格式例如python verl/scripts/model_merger.py --local_dir /path/to/checkpoints/global_step_xxx/actor --target_dir checkpoints_hf/ckpt-4b-stage1数据与评测配置train_files、val_files 怎么设data.train_files${DATA} data.val_filesevaluation/benchmarks/aime24.parquet data.max_prompt_length1024 data.max_response_length39936验证集直接用 aime24.parquet 等真实竞赛题max_prompt_length1024控制题目长度max_response_length是本文最值得关注的参数之一它从 stage1 的 39936 一路增加到 stage3 的 52224。POLARIS 论文强调推理模型在训练中会自然产生更长、更深入的思维链响应长度上限若不够模型性能会明显下滑batch size 三层结构train_batch_size 到 micro batch 的调优data.train_batch_size128 actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu1 actor_rollout_ref.actor.ppo_mini_batch_size128GRPO/PPO 的 batch size 是分层结构理解这三层是 batch size 调优的关键层级参数含义本脚本取值全局批次data.train_batch_size一次参数更新对应的全部样本数128mini batchppo_mini_batch_size一次梯度更新实际用到的样本数128micro batchppo_micro_batch_size_per_gpu单卡每次前向/反向的样本数1由于 rollout 数n8全局 128 个 prompt 实际产生 128×81024 条完整轨迹参与训练。micro batch 设为 1 是为了配合下面要讲的 token 级动态批大小避免长序列把显存撑爆。动态批大小use_dynamic_bsz 与 token 级显存控制actor_rollout_ref.actor.use_dynamic_bszTrue actor_rollout_ref.actor.ppo_max_token_len_per_gpu40960 actor_rollout_ref.rollout.max_num_batched_tokens40960这是 POLARIS 脚本里非常巧妙的设计。推理模型的响应长度差异极大几百到几万 token如果按样本数固定 batch长序列样本会触发 OOM。打开use_dynamic_bszTrue后系统改为按token 总量动态决定每批装多少样本ppo_max_token_len_per_gpu就是单卡显存预算的 token 上限max_num_batched_tokens则是 rolloutvLLM 推理侧的批量 token 上限。调优时这两个值基本由「卡显存大小 ÷ 激活显存开销」决定是 batch size 调优中替代样本数的最实用手段。clip_ratio_low 与 clip_ratio_high不对称裁剪的调参技巧actor_rollout_ref.actor.clip_ratio_low0.2 actor_rollout_ref.actor.clip_ratio_high0.28clip_ratio 是 PPO/GRPO 中最敏感的超参数之一。经典 PPO 用对称裁剪如 0.2/0.2而 POLARIS 采用不对称裁剪低侧 0.2、高侧 0.28。在 core_algos.py 中可以看到裁剪实现pg_losses2 -advantages * torch.clamp(ratio, 1 - cliprange_low, 1 cliprange_high)其直觉是当新策略概率大幅超过旧策略ratio 1.28时限制更严格防止策略被激进样本带偏而 ratio 略高1.2~1.28时仍允许模型快速吸收有益更新。高侧略放宽、低侧收紧配合entropy_coeff0关闭熵正则让模型在保持探索的同时稳定收敛。调参建议先在 0.2/0.2 起步若训练后期收益比advantage波动大可尝试 0.15/0.25 或 0.2/0.3观察 clip fraction 指标是否长期偏高。KL 与熵正则use_kl_loss、entropy_coeff 与 kl_coefactor_rollout_ref.actor.use_kl_lossFalse actor_rollout_ref.actor.kl_loss_coef0 actor_rollout_ref.actor.entropy_coeff0 algorithm.kl_ctrl.kl_coef0.001一个容易误读的点脚本同时关闭了 actor 侧的 KL 损失use_kl_lossFalse和熵正则entropy_coeff0但仍保留了algorithm.kl_ctrl.kl_coef0.001作为 GRPO 算法级 KL 控制系数用于约束策略与参考模型ref model的距离。这说明 POLARIS 的做法是让 KL 控制只发生在算法层避免额外的损失项干扰梯度信号。采样温度调优从 1.4 到 1.5 的三阶段策略actor_rollout_ref.rollout.temperature1.4 # stage1 actor_rollout_ref.rollout.temperature1.45 # stage2 actor_rollout_ref.rollout.temperature1.5 # stage3温度是 POLARIS 配方中第二个关键调优点。三个 stage 的温度单调上升1.4 → 1.45 → 1.5配合top_p1.0、top_k-1的宽松采样。注意Qwen3 官方建议推理温度 0.6但 RL 训练必须用更高温度制造多样性否则优势估计缺乏区分度每进入下一 stage脚本都建议用 search_optimal_temperature.py 在 1.4~1.6 区间重搜温度目标是让新阶段的多样性分数与上一阶段对齐1.7B 脚本的温度更高stage2 达 1.55而 r1-distill-7b 脚本保持 0.7 左右的低温说明温度要与基座模型的推理风格匹配学习率与 FSDPlr1e-6 与 offload 的取舍actor_rollout_ref.actor.optim.lr1e-6 actor_rollout_ref.actor.fsdp_config.param_offloadTrue actor_rollout_ref.actor.fsdp_config.optimizer_offloadTruelr1e-6是刻意压低的极小学习率——RL 训练梯度噪声大过大的学习率会让策略在长思维链空间里剧烈震荡。FSDP 侧stage1 打开参数与优化器 offload省显存、慢一点stage2/3 则关闭 offload 换速度因为max_response_length变长后需要更多显存留给激活。同时enable_gradient_checkpointingTrue进一步压缩显存。三阶段脚本差异速查表参数stage1stage2stage3调优方向max_response_length399364812852224逐步放宽容纳更长思维链rollout.temperature1.41.451.5逐步升温维持采样多样性ppo_max_token_len_per_gpu409603276832768与序列长度联动调整ulysses_sequence_parallel_size122长序列时开启序列并行fsdp param/optimizer_offloadTrueFalseFalsestage1 省显存后续换速度dyn_sampling_polarisTrueTrueTrue全程开启动态采样如何跑起来环境安装与启动命令克隆仓库后按以下步骤安装依赖git clone https://gitcode.com/gh_mirrors/polaris34/POLARIS cd POLARIS pip install -e ./verl pip install -e ./ pip install transformers4.51.0 pip install vllm0.8.4 pip install tensordict0.6.2 unset VLLM_ATTENTION_BACKEND注意训练前需把模型 config.json 的max_position_embeddings设为 131072然后逐 stage 启动训练。多机场景可直接用 train_with_ray.py 一键拉起 Ray 集群。调优建议清单batch size 调优显存不足优先调ppo_max_token_len_per_gpu与max_num_batched_tokens而非强行减小样本数clip_ratio 调优从 0.2/0.2 起步观察 clip fraction 指标波动大时向 0.15/0.25 方向收紧低侧温度调优每阶段用 search_optimal_temperature.py 重搜不要照搬固定值响应长度宁可多留余量max_response_length不足会让推理能力倒退数据过滤用 drop_easy_data.py 逐步移除已掌握的简单题把算力集中到难题上POLARIS 的训练脚本把「动态批大小 不对称裁剪 升温采样 渐进数据过滤」几个反直觉的技巧组合在一起才换来 AIME25 上 13.8 分的巨大提升。理解了这些超参数的作用你就能在自己的模型上复现这套 RL 训练配方了。【免费下载链接】POLARISScaling RL on advanced reasoning models项目地址: https://gitcode.com/gh_mirrors/polaris34/POLARIS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考