配置说明

最后更新时间:2025年6月18日。

ppo_trainer.yaml - RL FSDP 后端

Data

data:
  tokenizer: null
  train_files: ~/data/rlhf/gsm8k/train.parquet
  val_files: ~/data/rlhf/gsm8k/test.parquet
  train_max_samples: -1  # 设置为 -1 使用完整数据集
  val_max_samples: -1  # 设置为 -1 使用完整数据集
  prompt_key: prompt
  max_prompt_length: 512
  max_response_length: 512
  train_batch_size: 1024
  return_raw_input_ids: False  # 当 policy 和 rm 的 tokenizer 不同时,应设置为 true
  return_raw_chat: False
  return_full_prompt: False
  shuffle: True
  seed: 42
  filter_overlong_prompts: False
  filter_overlong_prompts_workers: 1
  truncation: error
  image_key: images
  trust_remote_code: True
  custom_cls:
     path: null
     name: null
  • data.train_files: 训练集 parquet 文件。可以是单个文件或文件列表。程序会将所有文件读入内存,因此不能过大(< 100GB)。路径可以是本地路径或 HDFS 路径。对于 HDFS 路径,我们提供了工具将其下载到 DRAM 并将 HDFS 路径转换为本地路径。

  • data.val_files: 验证集 parquet 文件。可以是单个文件或文件列表。

  • data.train_max_samples: 用于训练数据集的最大样本数。设置为 -1 可使用完整数据集。

  • data.val_max_samples: 用于验证数据集的最大样本数。设置为 -1 可使用完整数据集。

  • data.prompt_key: 数据集中包含 prompt 的字段。默认为 ‘prompt’。

  • data.max_prompt_length: 最大 prompt 长度。所有 prompts 将被左填充到此长度。如果长度过长,将报告错误。

  • data.max_response_length: 最大 response 长度。RL 算法(如 PPO)中的 rollout 生成的长度最多为此值。

  • data.train_batch_size: 用于不同 RL 算法的一次训练迭代采样的批次大小。

  • data.return_raw_input_ids: 是否返回原始 input_ids 而不添加 chat template。这主要用于适应 reward model 的 chat template 与 policy 不同的情况。需要先解码,然后应用 RM 的 chat template。如果使用基于模型的 RM,并且 policy 和 RM 的 chat_templates 不同,则需要将此标志设置为 True。

  • data.return_raw_chat: 是否返回原始 chat (prompt) 而不应用 chat template。

  • data.return_full_prompt: 是否返回包含 chat template 的完整 prompt。

  • data.shuffle: 是否在 dataloader 中打乱数据。

  • data.seed: 用于打乱数据时使用的整数种子。如果未设置或设置为 null,则数据打乱将不会被种子化,导致每次运行数据顺序不同。

  • data.filter_overlong_prompts: 默认不过滤。

  • data.filter_overlong_prompts_workers: 对于大规模数据集,过滤过长的 prompts 可能会耗时。您可以设置 filter_overlong_prompts_workers 来使用多进程加速。默认为 1。

  • data.truncation: 如果 input_ids 或 prompt 长度超过 max_prompt_length,则截断。默认为 ‘error’,不允许超过 max_prompt_length。用户应在抛出错误时增加 max_prompt_length。您还可以设置为 ‘left’、’right’ 和 ‘middle’。当选择 ‘middle’ 时,逻辑会将允许的最大长度大致分成两半,保留序列的头部和尾部,从而有效地丢弃中间部分。

  • data.image_key: 多模态数据集中包含图像的字段。默认为 ‘images’。

  • data.trust_remote_code: 如果远程 tokenizer 包含 python 文件,我们可以使用此字段允许使用远程 tokenizer。例如:moonshotai/Moonlight-16B-A3B-Instruct

自定义数据集

SFT trainer 实现了一个自定义数据集扩展,并且可以通过类似的更改扩展到其他 trainer。

custom_cls:
  path: null
  name: null
  • data.custom_cls.path: 包含您自定义数据集类的文件的路径。如果未指定,将使用预先实现的 dataset。

  • data.custom_cls.name: 指定文件内的 dataset 类的名称。

Actor/Rollout/Reference Policy

actor_rollout_ref:
 hybrid_engine: True
 model:
   path: ~/models/deepseek-llm-7b-chat
   external_lib: null
   override_config:
     model_config: {}
     moe_config:  # 仅 Megatron,可调整 moe 配置
       freeze_moe_router: False  # 仅 Megatron,可冻结 moe 路由(不计算梯度)
   enable_gradient_checkpointing: False
   enable_activation_offload: False
   trust_remote_code: False
   use_remove_padding: False
 actor:
   strategy: fsdp  # 向后兼容
   ppo_mini_batch_size: 256
   ppo_micro_batch_size: null # 将被弃用,使用 ppo_micro_batch_size_per_gpu
   ppo_micro_batch_size_per_gpu: 8
   use_dynamic_bsz: False
   ppo_max_token_len_per_gpu: 16384 # n * ${data.max_prompt_length} + ${data.max_response_length}
   grad_clip: 1.0
   clip_ratio: 0.2
   entropy_coeff: 0.0
   use_kl_loss: False # GRPO 为 True
   # Rollout Importance Sampling (纠正 rollout 和训练之间的分布不匹配)
   rollout_is: False # 启用 IS 校正
   rollout_is_threshold: null # IS 权重的上限(null 表示禁用)
   rollout_is_threshold_lower: null # 下限(null 表示自动为 1/upper)
   rollout_is_level: token # 聚合级别:token/sequence/geometric
   rollout_is_mode: truncate # 边界模式:truncate/mask
   rollout_is_veto_threshold: 1e-4 # 灾难性异常值阈值
   use_torch_compile: True # False 表示禁用 torch compile
   kl_loss_coef: 0.001 # grpo 使用
   kl_loss_type: low_var_kl # grpo 使用
   ppo_epochs: 1
   data_loader_seed: null
   shuffle: False
   ulysses_sequence_parallel_size: 1 # sp size
   optim:
     lr: 1e-6
     lr_warmup_steps: -1 # 优先级最高。负值表示委托给 lr_warmup_steps_ratio。
     lr_warmup_steps_ratio: 0.  # 总步数将在运行时注入
     min_lr_ratio: 0.0   # 仅用于 cosine 学习率调度器,默认为 0.0
     num_cycles: 0.5     # 仅用于 cosine 学习率调度器,默认为 0.5
     lr_scheduler_type: constant  # 选择 constant/cosine
     total_training_steps: -1  # 必须由程序覆盖
   fsdp_config:
     wrap_policy:
       # transformer_layer_cls_to_wrap: None
       min_num_params: 0
     param_offload: False
     optimizer_offload: False
     fsdp_size: -1
   checkpoint:
     # 在保存的 checkpoint 中包含什么
     # 'hf_model' 可以将整个模型保存为 hf 格式,现在仅使用分片模型 checkpoint 来节省空间
     save_contents: ['model', 'optimizer', 'extra']
     # 为了更大的灵活性,您可以指定从 checkpoint 加载的内容。
     load_contents: ${actor_rollout_ref.actor.checkpoint.save_contents}
 ref:
   fsdp_config:
     param_offload: False
     wrap_policy:
       # transformer_layer_cls_to_wrap: None
       min_num_params: 0
   log_prob_micro_batch_size: null # 将被弃用,使用 log_prob_micro_batch_size_per_gpu
   log_prob_micro_batch_size_per_gpu: 16
   log_prob_use_dynamic_bsz: ${actor_rollout_ref.actor.use_dynamic_bsz}
   log_prob_max_token_len_per_gpu: ${actor_rollout_ref.actor.ppo_max_token_len_per_gpu}
   ulysses_sequence_parallel_size: ${actor_rollout_ref.actor.ulysses_sequence_parallel_size} # sp size
 rollout:
   name: vllm
   temperature: 1.0
   top_k: -1 # hf rollout 为 0,vllm rollout 为 -1
   top_p: 1
   prompt_length: ${data.max_prompt_length}  # 仅用于 opensource
   response_length: ${data.max_response_length}
   # vllm rollout 使用
   dtype: bfloat16 # 应与 FSDP 对齐
   gpu_memory_utilization: 0.5
   ignore_eos: False
   enforce_eager: True
   free_cache_engine: True
   load_format: dummy_dtensor
   tensor_model_parallel_size: 2
   max_num_batched_tokens: 8192
   max_num_seqs: 1024
   log_prob_micro_batch_size: null # 将被弃用,使用 log_prob_micro_batch_size_per_gpu
   log_prob_micro_batch_size_per_gpu: 16
   log_prob_use_dynamic_bsz: ${actor_rollout_ref.actor.use_dynamic_bsz}
   log_prob_max_token_len_per_gpu: ${actor_rollout_ref.actor.ppo_max_token_len_per_gpu}
   # hf rollout 使用
   do_sample: True
   engine_kwargs: # 推理引擎参数,请参考 vllm/sglang 官方文档了解详情
     vllm: {}
     sglang: {}

   n: 1 # 对于每个 prompt,生成 n 个 responses(即采样 n 次)。对于 grpo, rloo,将其设置为 > 1 的值
   calculate_log_probs: False # 设置为 True 以通过 rollout 计算 log probs
   val_kwargs:
     # 验证时的采样参数
     top_k: -1 # hf rollout 为 0,vllm rollout 为 -1
     top_p: 1.0
     temperature: 0
     n: 1
     do_sample: False # 验证时默认为 eager

   agent:
     custom_async_server: # 使用自定义异步服务器实现 rollout
       path: null
       name: null

Actor、Rollout 和 Reference Model 的通用配置

  • actor_rollout_ref.hybrid_engine: 是否为混合引擎,目前仅支持混合引擎。

  • actor_rollout_ref.model.path: Huggingface 模型路径。可以是本地路径或 HDFS 路径。对于 HDFS 路径,我们提供了工具将其下载到 DRAM 并将 HDFS 路径转换为本地路径。

  • actor_rollout_ref.model.external_libs: 需要导入的附加 Python 包。用于将模型或 tokenizer 注册到 Huggingface 系统。

  • actor_rollout_ref.model.override_config: 用于覆盖模型的一些原始配置,主要是 dropout。

  • actor_rollout_ref.model.enable_gradient_checkpointing: 仅 FSDP,决定是否为 actor 启用梯度 checkpointing,Megatron 使用 override_transformer_config 中的 recompute 选项来设置此项。

  • actor_rollout_ref.model.enable_activation_offload: 是否为 actor 启用激活 offload。

  • actor_rollout_ref.model.trust_remote_code: 是否启用加载远程代码模型。

  • actor_rollout_ref.model.use_fused_kernels: 是否在模型中使用 fused kernels。如果设置为 True,将使用以下参数。 - actor_rollout_ref.model.fused_kernel_options.impl_backend: fused kernels 的实现后端。选项:“triton”或“torch”。默认为“torch”。 在 megatron 中,我们仅支持“triton”作为实现后端,因此无需此选项。

  • actor_rollout_ref.model.use_remove_padding: 是否在模型中使用 remove padding。如果设置为 True,模型将移除 input_ids 和 response_ids 中的 padding token。这在提高模型运行效率方面非常有帮助。

Actor 模型

  • actor_rollout_ref.actor.strategy: fsdp 或 megatron。在此示例中,我们使用 fsdp 后端。

  • actor_rollout_ref.actor.ppo_mini_batch_size: 一个样本被分割成多个子批次,批次大小为 ppo_mini_batch_size,用于 PPO 更新。ppo_mini_batch_size 是所有 worker/gpu 的全局数量。

  • actor_rollout_ref.actor.ppo_micro_batch_size: [将弃用,使用 ppo_micro_batch_size_per_gpu] 类似于梯度累积,用于一次前向传播的 micro_batch_size_per_gpu,用速度换取 GPU 内存。该值代表全局视图。

  • actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu: 类似于梯度累积,用于一次前向传播的 micro_batch_size_per_gpu,用速度换取 GPU 内存。该值代表每个 GPU 的局部数量。

  • actor_rollout_ref.actor.grad_clip: actor 更新的梯度裁剪。

  • actor_rollout_ref.actor.use_kl_loss: 在 actor 中使用 kl loss。使用时,我们不在奖励函数中应用 KL。

  • actor_rollout_ref.actor.clip_ratio: PPO clip ratio。

  • actor_rollout_ref.actor.use_torch_compile: 是否在 actor 中使用 torch compile。

  • actor_rollout_ref.actor.entropy_coeff: 计算 PPO loss 时 entropy 的权重。从 v0.3.x 开始,默认值已更改为 0.0。

  • actor_rollout_ref.actor.ppo_epochs: 在一组采样数据上进行 PPO 更新的 epoch 数量。

  • actor_rollout_ref.actor.data_loader_seed: 从 torch 2.6.0 开始,Megatron 后端可能会从 pytorch 中获取错误的 seed,这些 seed 在 cp ranks 之间会产生不一致,导致这些 rank 上的数据不一致,因此我们需要手动设置 seed 来避免 hangs 问题。如果 actor_rollout_ref.actor.shuffle 不为 null,则必须设置此项。

  • actor_rollout_ref.actor.shuffle: 在有多个 epoch 时是否打乱数据。

  • actor_rollout_ref.actor.optim: Actor 的优化器参数。

  • actor_rollout_ref.actor.fsdp_config: actor 训练的 FSDP 配置。

    • wrap_policy: FSDP wrap policy。默认情况下,它使用 Huggingface 的 wrap policy,即按 DecoderLayer 包装。

      • 无需设置 transformer_layer_cls_to_wrap,因此我们将其注释掉。

    • *_offload: 是否启用参数、梯度和优化器 offload。

      • 用速度换取 GPU 内存。

  • actor_rollout_ref.actor.use_kl_loss: 是否启用 kl loss。默认为 False。

  • actor_rollout_ref.actor.kl_loss_coef: kl loss 的系数。默认为 0.001。

  • actor_rollout_ref.actor.kl_loss_type: 支持 kl (k1), abs, mse (k2), low_var_kl (k3) 和 full。在末尾追加 +``(例如 ``k1+k3+)将使用 straight-through 来应用 k2 以实现无偏梯度估计,无论 kl 值估计如何(有关更多详细信息,请参阅 https://github.com/volcengine/verl/pull/2953#issuecomment-3162113848)。如何计算 actor 和 reference policy 之间的 kl 散度。有关特定选项,请参阅 core_algos.py 中的 kl_penalty()。有关详细分析,请参阅此博客文章:http://joschu.net/blog/kl-approx.html

  • actor_rollout_ref.actor.checkpoint: actor 中 checkpoint 配置。

    • save_contents: 在 checkpoint 中保存的内容。默认情况下,我们在 checkpoint 中保存模型、优化器和额外信息。 额外信息目前包括 Rng 状态,FSDP 支持的 lr_scheduler,以及即将推出的 Megatron opt_param_scheduler。 默认情况下,我们不存储 hf_model 到 checkpoint,但我们在 scripts/model_merge.py 中提供了一个工具将 checkpoint 格式转换为 hf 格式。

    • load_contents: 从 checkpoint 加载的内容,您可以指定不同的 checkpoint 加载内容。默认情况下,与 save_checkpoint 相同。

Reference Model

actor.use_kl_loss 或/和 algorithm.use_kl_in_reward 为 True 时,将启用 Reference Model。

  • actor_rollout_ref.ref: FSDP 配置与 actor 相同。对于大于 7B 的模型,建议默认开启 ref 的 offload

  • actor_rollout_ref.ref.log_prob_micro_batch_size: [将弃用,使用 log_prob_micro_batch_size_per_gpu] 在计算 ref_log_prob 时一次前向传播的批次大小。该值代表全局数量。

  • actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu: 在计算 ref_log_prob 时一次前向传播的批次大小。该值代表每个 GPU 的局部数量。

Rollout Model

  • actor_rollout_ref.rollout.name: hf/vllm/sglang。

  • Rollout (自回归) 参数。键应与 vLLM 的 SamplingParams 中的属性名相同。

    • temperature, top_k, top_p 等: SamplingParams 中的采样参数。

  • actor_rollout_ref.rollout.dtype: Rollout 模型参数类型。应与 FSDP/Megatron 后端中的 actor 模型参数类型对齐。

  • actor_rollout_ref.rollout.gpu_memory_utilization:

    • 对于 vLLM v0.7.0 及更高版本:用于 vLLM 实例的**总** GPU 内存的比例。

    • 对于 SGLang:对应于 mem_fraction_static,用于**静态**内存(如模型权重和 KV 缓存)的可用 GPU 内存的比例。

  • actor_rollout_ref.rollout.tensor_model_parallel_size: rollout 的 TP size。仅对 vllm 有效。

  • actor_rollout_ref.rollout.log_prob_micro_batch_size: [将弃用,使用 log_prob_micro_batch_size_per_gpu] 在计算 log_prob 时一次前向传播的批次大小。该值代表全局数量。

  • actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu: 用于重新计算 log_prob 的每个 GPU 的微批次大小(一次前向传播的批次大小)。该值代表每个 GPU 的局部数量。

  • actor_rollout_ref.rollout.do_sample: 在训练 rollout 期间是否进行采样。如果设置为 False,则 rollout 模型将执行贪婪采样。

  • actor_rollout_ref.rollout.val_kwargs: 专门在验证期间使用的采样参数。

    • top_k: Top-k 采样参数。vLLM rollout 默认为 -1,HF rollout 默认为 0。

    • top_p: Top-p 采样参数。默认为 1.0(禁用)。

    • temperature: 采样温度。默认为 0(确定性贪婪)。

    • n: 验证期间要生成的 response 数量。默认为 1。

    • do_sample: 验证期间是否使用采样。默认设置为 False 以获得确定性输出。当设置为 True 时,rollout 将使用 actor_rollout_ref.rollout.val_kwargs 参数(top_k、top_p、temperature)来控制采样行为。

  • actor_rollout_ref.rollout.engine_kwargs.vllm: 额外的 vllm 引擎参数,请参阅 vllm 官方文档了解详情。

  • actor_rollout_ref.rollout.engine_kwargs.sglang: 额外的 sglang 引擎参数,请参阅 sglang 官方文档了解详情。

  • actor_rollout_ref.rollout.ignore_eos: 是否忽略 EOS token 并在生成 EOS token 后继续生成 token。

  • actor_rollout_ref.rollout.free_cache_engine: 在 rollout 生成阶段之后 offload KV Cache。默认为 True。设置为 True 时,对于 vllm v0.5.4 和 v0.6.3,我们需要禁用 CUDAGraph 的使用(将 enforce_eager 设置为 True)。

  • actor_rollout_ref.rollout.enforce_eager: 在 vLLM 生成中是否使用 CUDAGraph。默认设置为 True 以禁用 CUDAGraph。

  • actor_rollout_ref.rollout.load_format: 使用哪个权重加载器将 actor 模型权重加载到 rollout 模型中。

    • auto: 使用 Megatron 权重加载器。

    • megatron: 使用 Megatron 权重加载器。与 Megatron 后端一起部署。输入模型的 state_dict() 已经沿 TP 维度分区,并沿 PP 维度聚合。此权重加载器要求 Rollout 模型和 Actor 模型的参数形状和名称应相同。

    • dtensor: 使用 Huggingface 权重加载器时的默认解决方案。与 FSDP 后端一起部署,并且 state_dict_type 为 StateDictType.SHARDED_STATE_DICT。推荐使用此权重加载器。

    • hf: 使用 Huggingface 权重加载器。与 FSDP 后端一起部署,并且 state_dict_type 为 StateDictType.FULL_STATE_DICT。此解决方案不需要为 vLLM 中实现的每个模型重写权重加载器,但会导致更高的峰值内存使用量。

    • dummy_hf, dummy_megatron, dummy_dtensor: 随机初始化。

Note

注意: 在此配置字段中,用户只需从 dummy_megatrondummy_dtensordummy_hf 中选择用于 rollout 初始化,我们的混合引擎将在 actor/rollout 权重同步期间选择相应的权重加载器(即 megatrondtensorhf)。

Megatron Optimizer and Optimizer Parameter Scheduler

optim:
  optimizer: adam
  lr: 1e-6
  clip_grad: 1.0
  total_training_steps: -1  # 必须由程序覆盖
  lr_warmup_init: 0.0  # warmup 的初始学习率,默认为 0.0
  lr_warmup_steps: -1 # 优先级最高。负值表示委托给 lr_warmup_steps_ratio。
  lr_warmup_steps_ratio: 0.  # 总步数将在运行时注入
  lr_decay_steps: null
  lr_decay_style: constant # 选择 constant/linear/cosine/inverse_square_root
  min_lr: 0.0 # 最小学习率,默认为 0.0
  weight_decay: 0.01
  weight_decay_incr_style: constant # 选择 constant/linear/cosine
  lr_wsd_decay_style: exponential # 选择 constant/exponential/cosine
  lr_wsd_decay_steps: null
  use_checkpoint_opt_param_scheduler: False # 使用 checkpoint 优化器参数调度器

请注意,Megatron 优化器与 FSDP 优化器之间的 API 存在一些差异。

  • Megatron 优化器调度器将 warmup 后的周期命名为 lr_decay_steps,因此 lr_scheduler_type 实际上是指 warmup 后学习率衰减的样式。

  • Megatron 优化器还支持权重衰减机制。

  • use_checkpoint_opt_param_scheduler 决定是否使用 checkpoint 优化器参数调度器。如果设置为 True,优化器参数调度器将保存在 checkpoint 中,并在恢复训练时从 checkpoint 加载。

对于学习率衰减,原始 Megatron pretrain 的默认选项 lr_decay_stylelinear, 这意味着学习率将在 lr_decay_steps 内从初始学习率线性衰减到 min_lr。 然而,在 verl 中,为了与 FSDP 的默认行为保持一致,我们将默认的 lr_decay_style 设置为 constant, 这意味着学习率在 warmup 阶段后将保持不变。

Critic Model

Critic 的大部分参数与 Actor Model 类似。

Reward Model

reward_model:
  enable: False
  model:
    input_tokenizer: ${actor_rollout_ref.model.path}  # 如果 chat template 相同,请设置为 null
    path: ~/models/Anomy-RM-v0.1
    external_lib: ${actor_rollout_ref.model.external_lib}
    trust_remote_code: False
    fsdp_config:
      min_num_params: 0
      param_offload: False
  micro_batch_size_per_gpu: 16
  max_length: null
  reward_manager: naive
  • reward_model.enable: 是否启用 reward model。如果为 False,则仅通过用户定义的 reward 函数计算 reward。在 GSM8K 和 Math 示例中,我们禁用了 reward model。对于使用 full_hh_rlhf 的 RLHF 对齐示例,我们使用 reward model 来评估 responses。如果为 False,则以下参数无效。

  • reward_model.model

    • input_tokenizer: 输入 tokenizer。如果 reward model 的 chat template 与 policy 不一致,我们需要先解码为明文,然后应用 rm 的 chat_template。然后使用 RM 进行评分。如果 chat_templates 一致,可以将其设置为 null。

    • path: RM 的 HDFS 路径或本地路径。请注意,RM 仅支持 AutoModelForSequenceClassification。其他模型类型需要定义自己的 RewardModelWorker 并从代码中传递。

    • trust_remote_code: 是否启用加载远程代码模型,默认为 False。

  • reward_model.reward_manager: Reward Manager。它定义了计算基于规则的 reward 和处理不同 reward 源的机制。默认为 naive。如果所有验证函数都是多进程安全的,则可以将 reward manager 设置为 prime 以进行并行验证。

Customized Reward Function

custom_reward_function:
  path: null
  name: compute_score
  • custom_reward_function.path: 包含您自定义奖励函数的文件的路径。如果未指定,将使用预先实现的奖励函数。

  • custom_reward_function.name (Optional) : 指定文件内的奖励函数的名称。默认为 ‘compute_score’。

Algorithm

algorithm:
  gamma: 1.0
  lam: 1.0
  adv_estimator: gae
  use_kl_in_reward: False
  kl_penalty: kl  # 如何估计 kl 散度
  kl_ctrl:
    type: fixed
    kl_coef: 0.005
    horizon: 10000
    target_kl: 0.1
  # Rollout Importance Sampling
  rollout_is: False
  rollout_is_threshold: null
  rollout_is_threshold_lower: null
  rollout_is_level: token
  rollout_is_mode: truncate
  rollout_is_veto_threshold: 1e-4
  • gamma: 折扣因子。

  • lam: GAE 估计器中偏差和方差之间的权衡。

  • adv_estimator: 支持 gae, grpo, reinforce_plus_plus, reinforce_plus_plus_baseline, rloo, rloo_vectorized, grpo_vectorized

  • use_kl_in_reward: 是否在 reward 中启用 kl penalty。默认为 False。

  • kl_penalty: 支持 kl, abs, mse, low_var_klfull。如何 计算 actor 和 reference policy 之间的 kl 散度。有关 特定选项,请参阅 core_algos.py 中的 kl_penalty()

  • kl_ctrl: reward 中 kl_penalty 控制器的配置。 - kl_coef: reward 中 kl_penalty 的(初始)系数。默认为 0.001。 - type: ‘fixed’ 表示 FixedKLController,’adaptive’ 表示 AdaptiveKLController。 - horizontarget_kl: 有关详细信息,请参阅 AdaptiveKLController 的源代码。

  • rollout_is: 是否启用 rollout importance sampling 校正。默认为 False。

  • rollout_is_threshold: IS 权重的上限。设置为 null 以完全禁用 IS。

  • rollout_is_threshold_lower: IS 权重的下限。如果为 null,则默认为上限的倒数 (1/upper)。

  • rollout_is_level: 聚合级别:token (有偏), sequence (无偏), 或 geometric (实验性)。

  • rollout_is_mode: 边界模式:truncate (仅截断上限) 或 mask (在边界外置零)。

  • rollout_is_veto_threshold: 每 token 的灾难性异常值 veto 阈值。默认为 1e-4。 注意:Rollout IS 需要设置 actor_rollout_ref.rollout.calculate_log_probs=True

Trainer

trainer:
  total_epochs: 30
  project_name: verl_examples
  experiment_name: gsm8k
  logger: ['console', 'wandb']
  log_val_generations: 0
  nnodes: 1
  n_gpus_per_node: 8
  save_freq: -1
  val_before_train: True
  test_freq: 2
  critic_warmup: 0
  default_hdfs_dir: null # hdfs checkpoint 路径
  default_local_dir: checkpoints/${trainer.project_name}/${trainer.experiment_name} # 本地 checkpoint 路径
  resume_mode: auto # 或 disable 或 resume_path,如果 resume_from_path 已设置
  resume_from_path: null
  remove_previous_ckpt_in_save: False
  del_local_ckpt_after_load: False
  ray_wait_register_center_timeout: 300
  • trainer.total_epochs: 训练的总 epoch 数。

  • trainer.project_name: 用于 wandb, swanlab, mlflow。

  • trainer.experiment_name: 用于 wandb, swanlab, mlflow。

  • trainer.logger: 支持 console 和 wandb, swanlab, mlflow, tensorboard, trackio。

  • trainer.log_val_generations: 验证期间记录的 generation 数量(默认为 0)。

  • trainer.nnodes: 训练使用的节点数。

  • trainer.n_gpus_per_node: 每个节点的 GPU 数量。

  • trainer.save_freq: 保存 actor 和 critic 模型 checkpoint 的频率(按迭代次数)。

  • trainer.val_before_train: 是否在训练前运行验证。

  • trainer.test_freq: 验证频率(按迭代次数)。

  • trainer.critic_warmup: 在实际策略学习前训练 critic 模型的迭代次数。

  • trainer.resume_mode: 恢复训练模式。支持 disableautoresume_path。如果设置为 auto (默认),程序将自动从 default_local_dir 中的最新 checkpoint 恢复。如果设置为 resume_path,程序将从 resume_from_path 中指定的路径恢复。

  • trainer.resume_from_path: 用于恢复训练的路径。仅在 resume_mode 设置为 resume_path 时有效。

  • trainer.remove_previous_ckpt_in_save: 保存时是否删除之前的 checkpoint。默认为 False。

  • trainer.del_local_ckpt_after_load: 加载本地 checkpoint 后是否删除它们。默认为 False。

  • trainer.ray_wait_register_center_timeout: 等待 ray 注册中心就绪的超时时间。默认为 300 秒。

此图说明了配置如何影响训练。

https://excalidraw.com/#json=pfhkRmiLm1jnnRli9VFhb,Ut4E8peALlgAUpr7E5pPCA

https://github.com/user-attachments/assets/16aebad1-0da6-4eb3-806d-54a74e712c2d

evaluation.yaml

Data

data:
  path: /tmp/math_Qwen2-7B-Instruct.parquet
  prompt_key: prompt
  response_key: responses
  data_source_key: data_source
  reward_model_key: reward_model
  • data.path: 数据集文件路径 (Parquet 格式)。

  • data.prompt_key: 数据集中包含 prompt 的字段。默认为 ‘prompt’。

  • data.response_key: 包含生成 response 的键。这应该是一个字符串列表,表示 responses。默认为 ‘responses’。

  • data.data_source_key: 用于区分不同数据源的指标计算,确保指标对每个源独立计算。

  • data.reward_model_key: 包含参考答案的键。这些参考答案通常作为任务的地面真实值或测试用例。

Customized Reward Function

custom_reward_function:
  path: null
  name: compute_score
  • custom_reward_function.path: 包含您自定义奖励函数的文件的路径。如果未指定,将使用预先实现的奖励函数。

  • custom_reward_function.name (Optional) : 指定文件内的奖励函数的名称。默认为 ‘compute_score’。

sft_trainer.yaml - SFT FSDP 后端

Optim

optim:
  lr: 1e-5
  weight_decay: 0.01
  warmup_steps_ratio: 0.1
  clip_grad: 1.0
  lr_scheduler: cosine
  • optim.lr: 优化器的学习率。

  • optim.weight_decay: 优化器的权重衰减。

  • optim.warmup_steps_ratio: warmup 步数占总训练步数的比例。

  • optim.clip_grad: 梯度裁剪值。

  • optim.lr_scheduler: 学习率调度器类型。选项:

    • cosine: 余弦学习率调度器,带 warmup(默认)。

    • wsd: Warmup-Stable-Decay 调度器,在 warmup 和 decay 阶段之间提供稳定的学习率阶段。

Model

Model 的大部分参数与 Reward Model 类似。

model:
  partial_pretrain: ~/models/gemma-1.1-7b-it
  fsdp_config:
    model_dtype: fp32
    wrap_policy:
      min_num_params: 0
    cpu_offload: False
    offload_params: False
  external_lib: null
  enable_gradient_checkpointing: False
  trust_remote_code: False
  lora_rank: 0
  lora_alpha: 16
  target_modules: all-linear
  use_liger: False
  • partial_pretrain: 预训练模型的 HDFS 路径或本地路径。

  • fsdp_config

    • model_dtype: 模型参数类型,默认为 fp32。 支持:bf16fp16fp32

    • cpu_offload: 是否为 FSDP 启用 CPU offload。如果为 True, 将使用 offload_params 作为参数。

    • offload_params: 在不参与计算时是否将参数 offload 到 CPU。如果为 True,则还将梯度 offload 到 CPU,这意味着优化器步骤在 CPU 上运行。

  • lora_rank: LoRA 模型的 rank,默认为 0。如果 lora_rank > 0, 我们将训练 LoRA 模块而不是微调整个模型。

  • lora_alpha: LoRA 缩放的 alpha 参数,默认为 16。

  • target_modules: 要应用 adapter 的模块名称,默认为 all-linear。 有关详细信息,请参阅 peft 文档

  • use_liger: 是否启用 Liger kernel,默认为 False。如果为 True, 我们将 Liger kernel 应用于模型(依赖于 liger-kernel)。