.. _config-explain-page: 配置说明 =================== 最后更新时间:2025年6月18日。 ppo_trainer.yaml - RL FSDP 后端 ------------------------------------- Data ~~~~ .. code:: yaml 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。 .. code:: yaml custom_cls: path: null name: null - ``data.custom_cls.path``: 包含您自定义数据集类的文件的路径。如果未指定,将使用预先实现的 dataset。 - ``data.custom_cls.name``: 指定文件内的 dataset 类的名称。 Actor/Rollout/Reference Policy ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: yaml 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_megatron``、``dummy_dtensor``、``dummy_hf`` 中选择用于 rollout 初始化,我们的混合引擎将在 actor/rollout 权重同步期间选择相应的权重加载器(即 ``megatron``、``dtensor``、``hf``)。 Megatron Optimizer and Optimizer Parameter Scheduler ____________________________________________________ .. code:: yaml 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_style`` 是 ``linear``, 这意味着学习率将在 ``lr_decay_steps`` 内从初始学习率线性衰减到 ``min_lr``。 然而,在 verl 中,为了与 FSDP 的默认行为保持一致,我们将默认的 ``lr_decay_style`` 设置为 ``constant``, 这意味着学习率在 warmup 阶段后将保持不变。 Critic Model ~~~~~~~~~~~~ Critic 的大部分参数与 Actor Model 类似。 Reward Model ~~~~~~~~~~~~ .. code:: yaml 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: yaml custom_reward_function: path: null name: compute_score - ``custom_reward_function.path``: 包含您自定义奖励函数的文件的路径。如果未指定,将使用预先实现的奖励函数。 - ``custom_reward_function.name`` (Optional) : 指定文件内的奖励函数的名称。默认为 'compute_score'。 Algorithm ~~~~~~~~~ .. code:: yaml 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_kl`` 和 ``full``。如何 计算 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。 - ``horizon`` 和 ``target_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 ~~~~~~~ .. code:: yaml 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``: 恢复训练模式。支持 ``disable``、``auto`` 和 ``resume_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 .. image:: https://github.com/user-attachments/assets/16aebad1-0da6-4eb3-806d-54a74e712c2d evaluation.yaml --------------- Data ~~~~ .. code:: yaml 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: yaml 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 ~~~~~~~ .. code:: yaml 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 类似。 .. code:: yaml 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``。 支持:``bf16``、``fp16``、``fp32``。 - ``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`)。