🧩高级强化学习文档
在将 Unsloth 与 GRPO 一起使用时的高级文档设置。
关于使用 Unsloth 进行批处理、生成和训练参数的 GRPO 详细指南:
训练参数
beta(浮点,默认 0.0):KL 系数。0.0⇒ 未加载参考模型(更少内存,更快)。更高的
beta将策略约束得更接近参考策略。
num_iterations(整数,默认 1):每个批次的 PPO 轮数(算法中的 μ)。 在每个梯度累积步骤内重放数据;例如,2= 每个累积步骤两次前向传播。epsilon(浮点,默认 0.2):用于令牌级别对数概率比的裁剪值(典型比值范围 ≈ [-1.2, 1.2] 使用默认 ε)。delta(浮点,可选):启用 上限 的裁剪界限用于 双向 GRPO 当设置时。如果无,使用标准 GRPO 裁剪。建议> 1 + ε在启用时(根据 INTELLECT-2 报告)。epsilon_high(浮点,可选):上界 epsilon;如果未设置,默认为epsilon。DAPO 建议 0.28.importance_sampling_level(“token” | “sequence”,默认 "token"):"token":原始逐令牌比值(每个令牌一个权重)。"sequence":将逐令牌比值平均为单个序列级比值。 GSPO 显示在序列级奖励下序列级采样通常能提供更稳定的训练。
reward_weights(float 列表,可选):每个奖励一个权重。如果无,则所有权重 = 1.0。scale_rewards(字符串|布尔,默认 "group"):True或"group":按以下方式缩放 每组内的标准差 (组内单位方差)。"batch":按以下方式缩放 整个批次的标准差 (按照 PPO-Lite)。假或"无": 不缩放。Dr. GRPO 建议不进行缩放以避免来自标准缩放的难度偏差。
loss_type(字符串,默认值 "dapo"):"grpo":按序列长度归一化(长度偏差;不推荐)。"dr_grpo":按一个 全局常数 归一化(由 Dr. GRPO 引入;消除长度偏差)。常数 ≈max_completion_length."dapo"(默认):按以下项归一化 在全局累积批次中的活动标记 (由 DAPO 引入;消除长度偏差)。"bnpo":按以下项归一化 仅按本地批次中的活动标记 (结果会随本地批次大小而变化;当per_device_train_batch_size == 1 时等同于 GRPO).
mask_truncated_completions(布尔值,默认 False): 当True时,截断的完成会从损失中排除(DAPO 为稳定性推荐)。 注意:此标志存在一些与 KL 相关的问题,因此我们建议禁用它。# 如果启用了 mask_truncated_completions,则在 completion_mask 中将截断的完成置零 if self.mask_truncated_completions: truncated_completions = ~is_eos.any(dim=1) completion_mask = completion_mask * (~truncated_completions).unsqueeze(1).int()当许多完成被截断时,这可能会将所有
completion_mask条目置为零,从而使n_mask_per_reward = 0并导致 KL 变为 NaN。 参见vllm_importance_sampling_correction(布尔值,默认 True): 应用 截断重要性采样(TIS) 以在生成(例如 vLLM / fast_inference)与训练后端不同时校正离策略效应。 在 Unsloth 中,这会 自动设置为 True 如果你使用的是 vLLM/fast_inference;否则 假.vllm_importance_sampling_cap(浮点数,默认 2.0): TIS 的截断参数 C ;为重要性采样比率设定上限以提高稳定性。数据类型在选择 float16 或 bfloat16 时,参见 FP16 与 BF16 用于 RL
生成参数
温度(float,默认值为 1.0):用于采样的温度。温度越高,生成的结果越随机。请确保使用相对较高(1.0)的温度以在生成中获得多样性,这有助于学习。top_p(float,可选,默认值为 1.0):控制要考虑的累计概率的浮点值,适用于排名前列的标记。必须在 (0, 1] 之间。设置为 1.0 以考虑所有标记。top_k(int,可选):保留用于 top-k 过滤的最高概率词汇标记的数量。如果为 None,则禁用 top-k 过滤并考虑所有标记。min_p(float,可选):最小标记概率,将按最可能标记的概率进行缩放。它必须是介于 0.0 和 1.0 之间的值。典型值在 0.01-0.2 范围内。重复惩罚(repetition_penalty)(float,可选,默认值为 1.0):根据新标记是否出现在提示和到目前为止生成的文本中,对新标记进行惩罚的浮点值。大于 1.0 的值鼓励模型使用新标记,而小于 1.0 的值鼓励模型重复标记。每次生成步骤(steps_per_generation):(int,可选):每次生成的步骤数。如果为 None,则默认为gradient_accumulation_steps. 与以下参数互斥generation_batch_size.
弄这个参数有点令人困惑,建议编辑 per_device_train_batch_size 并对批次大小进行梯度累积
批次与吞吐量参数
控制批次的参数
train_batch_size: 样本数量 每个进程 每步。 如果该整数为 小于num_generations, 它将默认为num_generations.steps_per_generation: 数量 微批次 对以下项有贡献 一次生成的 损失计算(仅前向传递)。 每隔steps_per_generation步会生成一个新数据批次;反向传播的时序取决于gradient_accumulation_steps.num_processes: 分布式训练进程的数量(例如 GPU/工作节点)。gradient_accumulation_steps(又名gradient_accumulation):要累积的微批次数量 在 应用反向传播和优化器更新之前。有效批次大小:
在更新之前对梯度有贡献的总样本数(跨所有进程和步骤)。
每次生成的优化器步数:
示例:
4 / 2 = 2.num_generations:生成的代数 每个提示 (应用于 之后 计算effective_batch_size)。 代数中 唯一提示 在一次生成循环中为:必须 > 2 以使 GRPO 生效。
GRPO 批处理示例
下面的表格说明了批次如何通过步骤流动、何时发生优化器更新以及如何生成新批次。
示例 1
生成循环 A
0
[0,0,0]
1
[1,1,1]
→ 优化器更新(达到 accum = 2)
2
[2,2,2]
3
[3,3,3]
优化器更新
生成循环 B
0
[4,4,4]
1
[5,5,5]
→ 优化器更新(达到 accum = 2)
2
[6,6,6]
3
[7,7,7]
优化器更新
示例 2
生成循环 A
0
[0,0,0]
1
[1,1,1]
2
[2,2,2]
3
[3,3,3]
优化器更新(达到 accum = 4)
生成循环 B
0
[4,4,4]
1
[5,5,5]
2
[6,6,6]
3
[7,7,7]
优化器更新(达到 accum = 4)
示例 3
生成循环 A
0
[0,0,0]
1
[0,1,1]
2
[1,1,3]
3
[3,3,3]
优化器更新(达到 accum = 4)
生成循环 B
0
[4,4,4]
1
[4,5,5]
2
[5,5,6]
3
[6,6,6]
优化器更新(达到 accum = 4)
示例 4
生成循环 A
0
[0,0,0, 1,1,1]
1
[2,2,2, 3,3,3]
优化器更新(达到 accum = 2)
生成循环 B
0
[4,4,4, 5,5,5]
1
[6,6,6, 7,7,7]
优化器更新(达到 accum = 2)
快速公式参考
最后更新于
这有帮助吗?

