ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AReaL 中的 PPO/GRPO 算法家族:从 GRPO 到 DAPO、SAPO、GSPO 的配置切换与源码原理

AReaL 中的 PPO/GRPO 算法家族:从 GRPO 到 DAPO、SAPO、GSPO 的配置切换与源码原理 AReaL 中的 PPO/GRPO 算法家族从 GRPO 到 DAPO、SAPO、GSPO 的配置切换与源码原理【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL本文以 docs/en/algorithms/grpo_series.md 为骨架系统讲解 AReaLThe RL Bridge for LLM-based Agent Applications中对 PPO 一族强化学习算法的支持Vanilla PPO、GRPO、Dr.GRPO、LitePPO、RLOO、DAPO、SAPO、GSPO以及可任意组合的 IcePop / KPop token 掩码策略。读者将掌握这些算法在 AReaL 中「同一份执行代码、仅靠 YAML 参数切换」的使用方法、NormConfig/PPOActorConfig等核心配置项的语义以及 GAE 时间步、动态 GAE lambda 与turn_ids协议等源码级实现细节从而能针对自己的 RL 任务快速实验不同算法组合。算法家族全景AReaL 将下列 PPO-like 算法统一收敛到同一个基目标函数上它们之间的差异主要体现为优势/奖励的归一化策略mean_level/std_level/mean_leave1out、裁剪机制对称 / 非对称 / 软门控、重要性采样层级token 级 / sequence 级、以及是否使用解耦损失与 token 掩码等。正因为差异被收敛到少数几个配置参数上在 AReaL 中只需修改 YAML 配置即可在不同算法之间切换Vanilla PPO使用学习到的价值函数critic通过 GAE 估计优势GRPODeepSeekMath去掉 critic用组内奖励均值/标准差做基线Dr.GRPO组内做均值归一化、关闭 std 缩放LitePPO组内均值归一化、batch 级 std 缩放RLOOleave-one-out 基线DAPO非对称裁剪 动态采样 超长惩罚SAPO用软 sigmoid 门控替代硬裁剪GSPOQwen3sequence 级重要性采样比率IcePop基于重要性比率的 token 掩码可与上述任一算法组合KPop基于双向二值 KL 散度的 token 掩码可与上述任一算法组合。所有算法共享同一套 rollout / trainer 执行管线对应入口为 examples/math/gsm8k_rl.py。快速上手统一的执行模式与配置切换所有算法使用完全相同的执行方式官方推荐直接修改配置文件YAML中的参数而不是修改代码后端命令localpython3 examples/math/gsm8k_rl.py --config examples/math/gsm8k_algo.yaml scheduler.typelocalraypython3 examples/math/gsm8k_rl.py --config examples/math/gsm8k_algo.yaml scheduler.typerayslurmpython3 examples/math/gsm8k_rl.py --config examples/math/gsm8k_algo.yaml scheduler.typeslurm将algo替换为ppo、grpo、drgrpo、liteppo、rloo、gspo、dapo_dynamic_bs、sapo、icepop或kpop即可命中examples/math/下对应的现成配置文件。scheduler.type通过命令行覆盖选择本地多进程、Ray 集群或 Slurm 调度。通过 CLI 覆盖切换算法不修改 YAML直接用命令行参数覆盖也可以实现算法切换# 从 GRPO 配置切到 Dr.GRPO python3 examples/math/gsm8k_rl.py \ --config examples/math/gsm8k_grpo.yaml \ scheduler.typelocal \ actor.adv_norm.mean_levelgroup \ actor.adv_norm.std_levelnull # 从 GRPO 配置切到 GSPO python3 examples/math/gsm8k_rl.py \ --config examples/math/gsm8k_grpo.yaml \ scheduler.typelocal \ actor.importance_sampling_levelsequence # 从 GRPO 配置切到 SAPO python3 examples/math/gsm8k_rl.py \ --config examples/math/gsm8k_grpo.yaml \ scheduler.typelocal \ actor.use_sapo_losstrue \ actor.sapo_tau_pos1.0 \ actor.sapo_tau_neg1.05 \ actor.use_decoupled_lossfalse注意当覆盖的键不存在于原 YAML中时需要使用前缀如actor.use_sapo_losstrue对已存在的键直接赋值即可。核心配置参数所有配置均在 areal/api/cli_args.py 中定义主要位于PPOActorConfig约 L1715 起与NormConfig约 L46 起两个 dataclass 中。完整的参数说明可参考 CLI 配置参考。奖励与优势归一化actor.reward_norm与actor.adv_normNormConfig控制奖励reward与优势advantage的归一化方式核心字段如下参数类型取值说明mean_levelstr | Nonebatch、group、None计算均值居中的层级std_levelstr | Nonebatch、group、None计算标准差缩放的层级mean_leave1outbooltrue、false是否使用 leave-one-out 均值剔除当前样本std_unbiasedbooltrue、false是否使用无偏标准差计算默认trueepsfloat-除标准差时避免除零的小常数默认1e-5group_sizeint-组级归一化时的组大小从 cli_args.py 的源码可见mean_level与std_level在__post_init__中会校验取值必须为batch、group或None同时NormConfig.uses_group_statistics属性判断是否任一字段为group组内统计这一属性在后续批量组筛选逻辑中会被复用。语义上batch 层级在整个全局 batch 上计算均值/标准差而 group 层级在组内计算例如共享同一 prompt 的多条轨迹。组边界来源于 rollout 批次的元数据TrajBatchMeta.traj_group_sizes而非group_size因此当组内样本被过滤导致各组大小不等时仍然按 prompt 逐组归一化group_size仅在元数据缺失时作为固定步长的回退方案。将mean_level或std_level设为None分别跳过均值减法或标准差缩放。如果整个字段被省略例如 YAML 中写adv_norm: null则不执行任何归一化。示例actor: adv_norm: null reward_norm: mean_level: group std_level: group group_size: ${gconfig.n_samples}AReaL 默认实践默认配置使用std_level: batch做优势归一化。这是 AReaL 团队在多种 RL 应用从 StarCraft 等游戏 AI 到 LLM 的 RLHF、推理、Agent 场景中一贯的标准做法。虽然 Dr.GRPO 建议std_level: null以获得潜在的性能提升AReaL 为保持向后兼容仍保留std_level: batch想要 Dr.GRPO 风格行为的用户应设置actor.adv_norm.std_levelnull。裁剪策略actor.eps_clip*参数类型默认值说明eps_clipfloat0.2下界裁剪比率被裁剪到[1-eps_clip, ...]eps_clip_higherfloat | NoneNone上界裁剪设置后比率被裁剪到[1-eps_clip, 1eps_clip_higher]当eps_clip_higher为None时使用对称裁剪$\text{clip}(r, 1-\epsilon, 1\epsilon)$。当设置eps_clip_higherDAPO 风格时使用非对称裁剪$\text{clip}(r, 1-\epsilon_{\text{low}}, 1\epsilon_{\text{high}})$。在 cli_args.py 中eps_clip_higher的注释还说明当设置eps_clip_higher时eps_clip作为下界值使用。此外源码还暴露了c_clipdual clipping factor必须大于 1.0None表示禁用这一相关参数。重要性采样层级actor.importance_sampling_level参数类型取值说明importance_sampling_levelstrtoken、sequence计算重要性比率的层级token默认标准的逐 token 重要性比率GRPO、PPO 等sequenceGSPO逐 token 比率的 sequence 级几何平均。算法配置矩阵下表给出各算法在 AReaL 中对应的推荐参数设置同一列即为该算法的配置签名算法adv_norm.mean_leveladv_norm.std_leveladv_norm.mean_leave1outimportance_sampling_level特殊设置PPObatchbatchfalsetoken需要 critic 模型GRPObatchbatchfalsetoken-Dr.GRPOgroupnullfalsetoken-LitePPOgroupbatchfalsetoken-RLOOgroupnulltruetoken-GSPObatchbatchfalsesequence-DAPObatchbatchfalsetoken非对称裁剪、动态采样SAPObatchbatchfalsetokenuse_sapo_losstrueIcePopbatchbatchfalsetokenrejection_sampling.metricratioKPopbatchbatchfalsetokenrejection_sampling.metricbinary_kl注意表中的 GRPO 行反映的是 DeepSeekMath 原始论文的公式AReaL 默认的 GRPO 配置已移除长度归一化项详见下文「AReaL 实现要点」例如 examples/math/gsm8k_grpo.yaml 实际使用reward_norm: {mean_level: group, std_level: group}与adv_norm: {mean_level: batch, std_level: batch}的组合。这些配置在examples/math/下均有现成文件可对照例如 gsm8k_liteppo.yaml 中reward_norm.std_level: batch、gsm8k_rloo.yaml 中adv_norm.mean_leave1out: true、gsm8k_gspo.yaml 中actor.importance_sampling_level: sequence。算法详解与专属选项Vanilla PPOVanilla PPO 使用学习到的价值函数critic通过 GAE 估计优势其关键配置差异在于需要独立的critic:配置段包含自己的模型与优化器。完整配置示例见 examples/math/gsm8k_ppo.yaml。GRPODeepSeekMathGRPO 目标函数为$$ J_{\text{GRPO}}(\theta) \mathbb{E}{\substack{q \sim P(Q), \ {o_i}{i1}^G \sim \pi_{\theta_{\text{old}}}(O \mid q)}} \left[ \frac{1}{G} \sum_{i1}^G \sum_{t1}^{|o_i|} \min\left( r_{i,t}(\theta) \hat{A}{i,t}, \text{clip}\left( r{i,t}(\theta), 1-\epsilon, 1\epsilon \right) \hat{A}{i,t} \right) - \beta D{\mathrm{KL}}\left[ \pi_\theta \middle| \pi_{\text{ref}} \right] \right] $$其中$$ r_{i,t}(\theta) \frac{\pi_\theta(o_{i,t} \mid q, o_{i,t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,t})}, \quad \hat{A}{i,t} \frac{r_i - \text{mean}({r_i}{i1}^G)}{\text{std}({r_i}_{i1}^G)}. $$与 PPO 相比GRPO 不需要 critic同一 prompt 采样出 G 条响应组内奖励均值/标准差即作为优势基线。RLOOREINFORCE Leave-One-OutRLOO 通过求取其他采样响应的奖励均值剔除当前响应来估计基线$$ J_{\text{RLOO}}(\theta) \mathbb{E}{\substack{q \sim P(Q), \ {o_i}{i1}^G \sim \pi_{\theta_{\text{old}}}(O \mid q)}} \left[ \frac{1}{G} \sum_{i1}^G \frac{1}{|o_i|} \sum_{t1}^{|o_i|} \min\left( r_{i,t}(\theta) \hat{A}{i,t}, \text{clip}\left( r{i,t}(\theta), 1-\epsilon, 1\epsilon \right) \hat{A}_{i,t} \right) \right] $$其中$$ \hat{A}{i,t} r_i - \frac{1}{G-1} \sum{j \neq i} r_j. $$在 AReaL 中仅需设置actor.adv_norm.mean_leave1outtrue即可实现该 leave-one-out 基线见 gsm8k_rloo.yaml。GSPOGroup Sequence Policy OptimizationGSPO 在 sequence 级而非 token 级计算重要性采样比率标准 PPOtoken 级$$ r_{i,t}(\theta) \frac{\pi_\theta(o_{i,t} \mid q, o_{i,t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,t})} $$GSPOsequence 级$$ r_i(\theta) \exp\left(\frac{1}{|o_i|}\sum_{t1}^{|o_i|} \log\frac{\pi_\theta(o_{i,t} \mid q, o_{i,t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,t})}\right) $$即对逐 token 比率取对数平均后再指数化几何平均。配置上只需设置actor.importance_sampling_level: sequence见 gsm8k_gspo.yaml。SAPOSoft Adaptive Policy OptimizationSAPO 用软 sigmoid 门控替代 PPO 的硬裁剪提供平滑梯度与非对称控制标准 PPO$L^{\text{PPO}} -\mathbb{E}_t[\min(r_t A_t, r_t^{\text{clip}} A_t)]$SAPO软门控正优势$g_t^ \frac{4}{\tau_{\text{pos}}} \sigma(\tau_{\text{pos}} (r_t - 1))$负优势$g_t^- \frac{4}{\tau_{\text{neg}}} \sigma(\tau_{\text{neg}} (r_t - 1))$损失$L^{\text{SAPO}} -\mathbb{E}_t[g_t A_t]$其中 $g_t g_t^$若 $A_t 0$否则 $g_t^-$参数类型默认值说明actor.use_sapo_lossboolfalse启用 SAPO 损失以替代 PPO 裁剪actor.sapo_tau_posfloat1.0正优势的温度actor.sapo_tau_negfloat1.05负优势的温度注意SAPO 要求actor.use_decoupled_lossfalsecli_args.py 中use_sapo_loss的注释也明确它与 PPO 裁剪互斥。actor: use_sapo_loss: true sapo_tau_pos: 1.0 sapo_tau_neg: 1.05 use_decoupled_loss: false完整示例见 gsm8k_sapo.yaml其中同时通过recompute_logprob: false、use_decoupled_loss: false显式关闭了解耦损失路径。DAPODAPO 引入非对称裁剪与动态采样dynamic sampling当某 prompt 下所有响应全对或全错时该组样本被排除在训练之外。$$ J_{\text{DAPO}}(\theta) \mathbb{E}{\substack{(q,a) \sim \mathcal{D}, \ {o_i}{i1}^G \sim \pi_{\theta_{\text{old}}}(o \mid q)}} \left[ \frac{1}{\sum_{i1}^G |o_i|} \sum_{i1}^G \sum_{t1}^{|o_i|} \min\left( r_{i,t}(\theta) \hat{A}{i,t}, \text{clip}\left( r{i,t}(\theta), 1-\epsilon_{\text{low}}, 1\epsilon_{\text{high}} \right) \hat{A}_{i,t} \right) \right] $$其中 $\hat{A}{i,t}$ 是组归一化优势$r{i,t}(\theta)$ 是 token 级策略比率。非对称裁剪参数参数类型默认值说明actor.eps_clipfloat0.2下界裁剪值actor.eps_clip_higherfloat-上界裁剪值设置后启用非对称gsm8k_dapo_dynamic_bs.yaml 中使用eps_clip: 0.2与eps_clip_higher: 0.28构成非对称裁剪区间。超长惩罚参数参数类型默认值说明actor.overlong_reward_penaltyboolfalse对超长响应启用惩罚actor.overlong_tokensint-视为超长的尾部 token 数量actor.overlong_penalty_factorfloat-应用于超长响应的惩罚因子动态采样AReaL 通过传入PPOTrainer.train()的dynamic_filter_fn支持动态采样。该函数接收从同一 prompt 采样的分组轨迹返回布尔值表示是否接受该组进入训练trainer.train( workflow..., dynamic_filter_fnlambda x: 0 x[rewards].mean() 1 )默认情况下AReaL 使用固定 batch size 动态过滤持续等待直到收集满batch_size个被接受的样本才进行训练。这与部分 DAPO 实现先收集一整批样本再统一过滤的动态 batch size 方案不同。控制 batch 大小的参数如下参数类型默认值说明dynamic_bsboolfalse启用动态 batch sizegsm8k_dapo_dynamic_bs.yaml 顶层即设置了dynamic_bs: true。IcePopIcePop 将重要性比率 $r_{i,t} \frac{\pi_\theta(o_{i,t} \mid q, o_{i,t})}{\pi_{\theta_\text{old}}(o_{i,t} \mid q, o_{i,t})}$$\pi_\theta$ 为当前训练策略$\pi_{\theta_\text{old}}$ 为 rollout 使用的行为策略落在可配置区间 $[\alpha, \beta]$ 之外的 token 从损失中掩码掉——比率过低或过高的 token 都被排除。IcePop 通过rejection_sampling配置实现metricratioactor: use_decoupled_loss: true rejection_sampling: level: token action: mask metric: ratio lower: 0.5 upper: 5.0参数类型默认值说明actor.rejection_sampling.metricstr-设为ratio即 IcePopactor.rejection_sampling.lowerfloat0.5重要性比率下界actor.rejection_sampling.upperfloat5.0重要性比率上界注意IcePop 要求actor.use_decoupled_losstrue否则rejection_sampling不生效。完整示例见 examples/math/gsm8k_icepop.yaml其中lower: 0.5、upper: 5.0、level: token、action: mask均与上表一致。KPopKPop 掩码掉双向二值 KL 散度超过阈值的 token。对每个 token 计算$$\text{KL}{\text{fwd}} \text{KL}(P\theta | P_{\theta_\text{old}}), \quad \text{KL}{\text{rev}} \text{KL}(P{\theta_\text{old}} | P_\theta)$$其中每个 token 的概率被看作一个 Bernoulli 参数$\text{KL}(P | Q) p \log \frac{p}{q} (1-p) \log \frac{1-p}{1-q}$。满足 $\max(\text{KL}{\text{fwd}}, \text{KL}{\text{rev}}) \phi$ 的 token 被掩码这里的 $\phi$ 对应actor.rejection_sampling.upper。KPop 通过rejection_sampling配置实现metricbinary_klactor: use_decoupled_loss: true rejection_sampling: level: token action: mask metric: binary_kl upper: 2.0参数类型默认值说明actor.rejection_sampling.metricstr-设为binary_kl即 KPopactor.rejection_sampling.upperfloat2.0KL 散度阈值$\phi$注意KPop 仅支持actionmask不支持clamp且binary_kl不使用lowerKPop 同样要求actor.use_decoupled_losstrue否则rejection_sampling不生效。完整示例见 examples/math/gsm8k_kpop.yamlmetric: binary_kl、upper: 2.0。核心概念Rewards、Advantages 与 GAERewardsAReaL 假设基于结果的奖励outcome-based rewards。每条轨迹可能由拼接的 LLM 输入-输出对组成在sequence 级获得单个标量奖励而非 token 级。AdvantagesAReaL 为轨迹中每个输出 token 计算逐 token 优势。PPO 将结果奖励视为最后一个 token 的奖励前面所有 token 的奖励为 0随后通过广义优势估计GAE做标准折扣与 TD-error 反向传播得到每个 token 的优势。在默认的 token 级时间步递归下当discount1、gae_lambda1、critic 值为零且禁用 KL 正则时最终结果奖励实际上被广播给每个生成 token。GAE 时间步单位actor.gae_timestep_unitactor.gae_timestep_unit决定 GAE 是在生成 token上推进还是在**生成轮次turn**上推进。prompt、工具、padding 及其他被掩码的位置不消耗 GAE 时间步。该参数在 cli_args.py 中定义取值token或turn。Token 级 GAEtoken是默认值保留 AReaL 的原始行为。对连续活跃的生成 token$$ \delta_t r_t \gamma V_{t1} - V_t, \qquad A_t \delta_t \gamma \lambda A_{t1}, \qquad G_t A_t V_t, $$其中 $\gamma$ 是actor.discount$\lambda$ 是由actor.gae_lambda解析出的每条轨迹的值。奖励 $r_t$ 包含结果奖励增量与 token 级 KL 惩罚。以 EOS 结束的轨迹使用零终端 bootstrap而无 EOS 的被截断轨迹则从最终价值估计处 bootstrap。Turn 级 GAEturn将每个非空生成轮次视为一个宏时间步。对轮次 $u$AReaL 将其任务奖励增量求和为 $r_u^{\mathrm{task}}$并取该轮次第一个活跃动作 token 位置的 $V_u$然后计算$$ \delta_u^{\mathrm{task}} r_u^{\mathrm{task}} \gamma V_{u1} - V_u, \qquad A_u^{\mathrm{task}} \delta_u^{\mathrm{task}} \gamma \lambda A_{u1}^{\mathrm{task}}. $$任务优势 $A_u^{\mathrm{task}}$ 与 critic 目标 $G_uA_u^{\mathrm{task}}V_u$ 被广播给该轮次内的每个活跃 token。token 级 KL 被有意排除在 turn 递归与 critic 目标之外在可选的actor.adv_norm之前轮次 $u$ 中 token $j$ 的 actor 优势为 $A_{u,j}A_u^{\mathrm{task}}r_{u,j}^{\mathrm{KL}}$。这避免了把一轮的 KL 惩罚求和后再广播回每个 token 的做法。动态 GAE lambdaactor.gae_lambda既接受静态 float也接受指向可调用对象的点分路径dotted path。actor.gae_lambda_kwargs向该可调用对象传递关键字参数静态 float 时被忽略。可调用对象接收一个 context内含三个形状为[B]的 tensoreffective_token_lengths活跃生成 token 数含活跃的 EOSturn_counts非空生成轮次数token 模式下无turn_ids时为 0timestep_lengths由gae_timestep_unit选定的长度 $L$。可调用对象必须为每条本地轨迹返回一个有限的浮点 lambda即同设备上形状为[B]的 tensor且该返回值用于该轨迹的所有选定时间步。AReaL 内置两个长度感知函数实现在 areal/trainer/ppo/lambda_fn.py函数路径Kwargs定义areal.trainer.ppo.lambda_fn.vapo_length_adaptive_gaealpha 0$\lambda\max(0, 1 - 1/(\alpha L))$$L0$$L0$ 时取 0areal.trainer.ppo.lambda_fn.relative_position_gae_lambda0 q 1$\lambdaq^{1/(L-1)}$$L\ge2$$L1$ 取 1$L0$ 取 0。相对保持relative-retention解释假设 $\gamma1$从源码看vapo_length_adaptive_gae会校验alpha必须为正数对长度做clamp_min(1.0)后计算并clamp_min(0.0)relative_position_gae_lambda会校验q必须是 $(0,1]$ 内的有限数。二者都由resolve_gae_lambda_fn统一解析静态 float 走constant_gae_lambda快速路径字符串则通过import_from_string动态导入。示例配置actor: gae_timestep_unit: turn gae_lambda: areal.trainer.ppo.lambda_fn.relative_position_gae_lambda gae_lambda_kwargs: q: 0.5自定义 workflow 的turn_ids契约Turn 级 GAE 要求 workflow 返回原始、与 token 对齐的turn_idsactor 内部会将其与 next-token 预测掩码对齐。该 tensor 必须满足与input_ids和loss_mask形状相同batch 为[B, S]使用整数 dtype建议使用有符号整数因为需要-1哨兵值给每个活跃生成 token 分配[0, S)内的 ID保持活跃 ID 在时间上非递减同一 assistant 轮次内的所有 token 使用同一个 ID对 prompt、user、tool、padding 及其他非损失位置使用-1。编号允许有空洞且不消耗 GAE 时间步但仍建议从 0 开始连续编号。自定义 workflow 可以按如下方式构造该字段不要在 workflow 中 roll 它turn_ids [-1] * input_len [turn_idx] * resp.output_len result[turn_ids] torch.tensor(turn_ids, dtypetorch.int32).unsqueeze(0)AReaL 实现要点与原始论文的差异AReaL 的 GRPO 实现与 DeepSeekMath 原始论文相比有两处关键差异长度归一化Length NormalizationAReaL 从原始 GRPO 目标中移除了逐 token 长度归一化项。这与 Dr.GRPO 的建议一致消除了优势估计中的偏差。KL 正则化KL RegularizationAReaL 不直接将 KL 散度项加进目标函数而是采用 PPO 风格、将 KL 正则并入 actor 优势由actor.kl_ctl控制cli_args.py 中默认kl_ctl0.1可选k1/k2/k3估计器。在 token 模式下KLEstimator惩罚在 GAE 之前被加入逐 token 奖励在 turn 模式下它保持为 token 局部的 actor 惩罚不进入 turn 递归与 critic 目标。实践建议与延伸阅读以 GRPO 为起点多数实验可以从 examples/math/gsm8k_grpo.yaml 出发通过命令行覆盖逐步叠加 Dr.GRPO、GSPO、SAPO 等变体避免复制粘贴大量重复配置。IcePop / KPop 是可组合的二者本质是 token 掩码策略可与列表中任一 RL 算法组合使用但都要求use_decoupled_losstrueSAPO 除外它要求use_decoupled_lossfalse。多轮/Agent 场景当处理多轮 agent 轨迹时优先考虑gae_timestep_unit: turn配合动态 GAE lambda如relative_position_gae_lambda并确保自定义 workflow 按上文契约输出turn_ids。源码入口算法相关配置定义在 areal/api/cli_args.pyGAE lambda 内置函数在 areal/trainer/ppo/lambda_fn.pyGAE 计算与 actor 损失实现可继续阅读 areal/trainer/ppo/gae.py 与 areal/trainer/ppo/actor.py配置参数全量说明见 CLI 配置参考。【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表