.. _config-explain-page: 配置解释 ========ba 最后更新:06/18/2025 。 ppo_trainer.yaml 用于 RL FSDP 后端 --------------------------------- 数据 ~~~~ .. code:: yaml data: tokenizer: null train_files: ~/data/rlhf/gsm8k/train.parquet val_files: ~/data/rlhf/gsm8k/test.parquet train_max_samples: -1 # set to -1 to use full dataset val_max_samples: -1 # set to -1 to use full dataset prompt_key: prompt max_prompt_length: 512 max_response_length: 512 train_batch_size: 1024 return_raw_input_ids: False # This should be set to true when the tokenizer between policy and rm differs 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 文件。可以是列表或单个文件。程序会将所有文件读入内存,因此文件总量不得超过 100 GB。路径可以是本地路径或 HDFS 路径。对于 HDFS 路径,我们提供了工具将它下载到 DRAM 并转换为本地路径。 - ``data.val_files``:验证数据集的 parquet 文件。可以是列表或单个文件。 - ``data.train_max_samples``:从训练数据集中使用的最大样本数量。设置为 -1 以使用完整数据集。 - ``data.val_max_samples``:从验证数据集中使用的最大样本数量。设置为 -1 以使用完整数据集。 - ``data.prompt_key``:数据集中包含提示(prompt)的字段。默认值为 'prompt'。 - ``data.max_prompt_length``:最大提示长度。所有提示将被左填充到此长度。如果长度过长,则会报告错误。 - ``data.max_response_length``:最大响应长度。在 RL 算法(如 PPO)中,生成响应时会达到此长度。 - ``data.train_batch_size``:单个训练迭代中不同 RL 算法采样的批次大小。 - ``data.return_raw_input_ids``:是否返回未添加聊天模板的原始 input_ids。主要用于适应策略(policy)和奖励模型(rm)的聊天模板不同的情况。它需要先解码,然后应用 RM 的聊天模板。如果使用基于模型的 RM,并且策略和 RM 的聊天模板不同,则需要设置此标志。 - ``data.return_raw_chat``:是否返回未应用聊天模板的原始聊天(提示)。 - ``data.return_full_prompt``:是否返回带有聊天模板的完整提示。 - ``data.shuffle``:是否在数据加载器中打乱数据。 - ``data.seed``:用于打乱数据的整数种子。如果未设置或设置为 null,则数据打乱将不会种子化,导致每次运行数据顺序不同。 - ``data.filter_overlong_prompts``:是否过滤过长的提示。默认不过滤。 - ``data.filter_overlong_prompts_workers``:对于大规模数据集,过滤过长提示可能很耗时。您可以使用 ``filter_overlong_prompts_workers`` 设置为多进程加速。默认值为 1。 - ``data.truncation``:当 input_ids 或提示长度超过 max_prompt_length 时截断。默认值为 'error',不允许超过 max_prompt_length。用户应该增加 max_prompt_length 如果抛出错误。您也可以设置为 ``left``、 ``right`` 或 ``middle``。当选择 ``middle`` 时,逻辑将允许的最大长度大致一分为二,保留序列的头部和尾部,有效地丢弃中间部分。 - ``data.image_key``:多模态数据集中包含图像的字段。默认值为 'images'。 - ``data.trust_remote_code``:如果远程分词器有 Python 文件,我们可以使用此字段来允许使用远程分词器。例如:moonshotai/Moonlight-16B-A3B-Instruct 自定义数据集 ~~~~~~~~~~~ 自定义数据集扩展针对 SFT 训练器实现,并可以扩展到其他具有类似变化的训练器。 .. code:: yaml custom_cls: path: null name: null - ``data.custom_cls.path``:包含自定义数据集类的文件的路径。如果未指定,将使用预实现的 dataset。 - ``data.custom_cls.name``:指定文件中的数据集类名称。 执行者/生成/参考策略 ~~~~~~~~~~~~~~~~~ .. code:: yaml actor_rollout_ref: hybrid_engine: True model: path: ~/models/deepseek-llm-7b-chat external_lib: null override_config: attn_implementation: flash_attention_2 # or eager, sdpa - attention implementation override model_config: {} moe_config: # Megatron only, can adjust moe configuration freeze_moe_router: False # Megatron only, can freeze moe router (no grad) enable_gradient_checkpointing: False enable_activation_offload: False trust_remote_code: False use_remove_padding: False actor: strategy: fsdp # This is for backward-compatibility ppo_mini_batch_size: 256 ppo_micro_batch_size: null # will be deprecated, use 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 # True for GRPO # Rollout Correction (corrects distribution mismatch between rollout and training) rollout_correction: rollout_is: token # IS weights: token/sequence/null rollout_is_threshold: 2.0 # Upper threshold for IS weights rollout_rs: null # Rejection sampling: token/sequence/geometric/null rollout_rs_threshold: null # RS upper threshold rollout_rs_threshold_lower: null # RS lower threshold rollout_token_veto_threshold: null # Per-token veto (null to disable) use_torch_compile: True # False to disable torch compile kl_loss_coef: 0.001 # for grpo kl_loss_type: low_var_kl # for 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 # Prioritized. Negative values mean delegating to lr_warmup_steps_ratio. lr_warmup_steps_ratio: 0. # the total steps will be injected during runtime min_lr_ratio: 0.0 # only used with cosine lr scheduler, default to 0.0 num_cycles: 0.5 # only used with cosine lr scheduler, default to 0.5 lr_scheduler_type: constant # select from constant/cosine total_training_steps: -1 # must be override by program fsdp_config: wrap_policy: # transformer_layer_cls_to_wrap: None min_num_params: 0 param_offload: False optimizer_offload: False fsdp_size: -1 checkpoint: # What to include in saved checkpoints # with 'hf_model' you can save whole model as hf format, now only use sharded model checkpoint to save space save_contents: ['model', 'optimizer', 'extra'] # For more flexibility, you can specify the contents to load from the 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 # will be deprecated, use 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 # 0 for hf rollout, -1 for vllm rollout top_p: 1 prompt_length: ${data.max_prompt_length} # not use for opensource response_length: ${data.max_response_length} # for vllm rollout dtype: bfloat16 # should align with 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 # will be deprecated, use 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} # for hf rollout do_sample: True engine_kwargs: # inference engine parameters, please refer vllm/sglang official doc for detail vllm: {} sglang: {} n: 1 # for each prompt, sample n responses (i.e. num sample times). set it to values > 1 for grpo, rloo calculate_log_probs: False # set to True for computing log probs via rollouts val_kwargs: # sampling parameters for validation top_k: -1 # 0 for hf rollout, -1 for vllm rollout top_p: 1.0 temperature: 0 n: 1 do_sample: False # default eager for validation agent: custom_async_server: # Use custom async server implementation for rollout path: null name: null **执行者、生成和参考模型的通用配置** - ``actor_rollout_ref.hybrid_engine``:是否为混合引擎。目前只支持混合引擎。 - ``actor_rollout_ref.model.path``:Huggingface 模型路径。这可以是本地路径或 HDFS 路径。对于 HDFS 路径,我们提供了工具将它下载到 DRAM 并转换为本地路径。 - ``actor_rollout_ref.model.external_libs``:需要导入的额外 Python 包。用于将模型或分词器注册到 Huggingface 系统。 - ``actor_rollout_ref.model.override_config``:用于覆盖模型的原始配置。常见的覆盖包括: - ``attn_implementation``:覆盖注意力实现。默认值为 ``flash_attention_2``。 支持的值:``flash_attention_2``、 ``eager``、 ``sdpa``。使用 ``eager`` 进行调试或兼容性问题。请参阅 :ref:`attention-implementation-override` 了解详细用法。 - ``actor_rollout_ref.model.enable_gradient_checkpointing``:仅限 FSDP,决定是否为执行者启用梯度检查点,Megatron 使用 ``override_transformer_config`` 中的 recompute 选项来设置这个。 - ``actor_rollout_ref.model.enable_activation_offload``:是否为执行者启用激活卸载。 - ``actor_rollout_ref.model.trust_remote_code``:是否启用加载远程代码模型。 - ``actor_rollout_ref.model.use_fused_kernels``:是否在模型中使用融合内核。如果设置为 True,则将使用以下参数。 - ``actor_rollout_ref.model.fused_kernel_options.impl_backend``:融合内核的实现后端。选项:"triton" 或 "torch"。默认值为 "torch"。 在 megatron 中,我们只支持 "triton" 作为实现后端,因此无需此选项。 - ``actor_rollout_ref.model.use_remove_padding``:是否在模型中使用移除填充。如果设置为 True,模型将移除输入中的填充标记,以帮助提高模型运行效率。 **执行者模型** - ``actor_rollout_ref.actor.strategy``:fsdp 或 megatron。在此示例中,我们使用 fsdp 后端。 - ``actor_rollout_ref.actor.ppo_mini_batch_size``:一个样本被分成多个子批次,用于 PPO 更新的批次大小为 ppo_mini_batch_size。这个 ppo_mini_batch_size 是所有工作者/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_rollout_ref.actor.use_kl_loss``:是否在执行者中使用 KL 损失。当使用时,我们不在奖励函数中应用 KL。 - ``actor_rollout_ref.actor.clip_ratio``:PPO 裁剪比率。 - ``actor_rollout_ref.actor.use_torch_compile``:是否在执行者中使用 Torch 编译。 - ``actor_rollout_ref.actor.entropy_coeff``:计算 PPO 损失时熵的权重。从 v0.3.x 开始,默认值改为 0.0。 - ``actor_rollout_ref.actor.ppo_epochs``:对一组采样数据进行 PPO 更新的轮数。 - ``actor_rollout_ref.actor.data_loader_seed``:从 torch 2.6.0 开始,Megatron 后端可在 cp 排名之间生成错误的种子,并导致这些排名之间的数据错位,因此我们应手动设置种子以避免挂起问题。如果 ``actor_rollout_ref.actor.shuffle`` 不为 null,则必须设置此项。 - ``actor_rollout_ref.actor.shuffle``:在有多个轮次时,是否打乱数据。 - ``actor_rollout_ref.actor.optim``:执行者的优化器参数。 - ``actor_rollout_ref.actor.fsdp_config``:执行者训练的 FSDP 配置。 - ``wrap_policy``:FSDP 包装策略。默认使用 Huggingface 的包装策略,即按 DecoderLayer 包装。 - 无需设置 transformer_layer_cls_to_wrap,因此我们将其注释。 - ``*_offload``:是否启用参数、梯度和优化器的卸载。 - 以速度换取 GPU 内存。 - ``actor_rollout_ref.actor.use_kl_loss``:是否启用 KL 损失。默认值为 False。 - ``actor_rollout_ref.actor.kl_loss_coef``:KL 损失的系数。默认值为 0.001。 - ``actor_rollout_ref.actor.kl_loss_type``:支持 ``kl`` (``k1``)、 ``abs``、 ``mse`` (``k2``)、 ``low_var_kl`` (``k3``) 和 ``full``。在末尾附加 ``+`` (例如 ``k1+`` 和 ``k3+``) 将使用无偏梯度估计的直通,而不管 KL 值估计如何(详见 https://github.com/volcengine/verl/pull/2953#issuecomment-3162113848)。如何计算执行者和参考策略之间的 KL 散度。具体选项请参考 `core_algos.py `_ 中的 `kl_penalty()` 。有关详细分析,请参见此博客文章:http://joschu.net/blog/kl-approx.html - ``actor_rollout_ref.actor.checkpoint``:执行者检查点功能的配置。 - ``save_contents``:保存到检查点的内容。默认情况下,我们在检查点中保存模型、优化器和额外信息。额外信息目前包括 Rng 状态、FSDP 支持的 lr_scheduler,以及即将支持的 Megatron opt_param_scheduler。我们默认不存储 hf_model,但我们在 ``scripts/model_merge.py`` 中提供了一个工具来将检查点格式转换为 hf 格式。 - ``load_contents``:从检查点加载的内容。您可以指定不同的检查点加载内容。默认情况下,与 ``save_checkpoint`` 相同。 **参考模型** 当 ``actor.use_kl_loss`` 或/and ``algorithm.use_kl_in_reward`` 为 True 时,参考模型将被启用。 - ``actor_rollout_ref.ref``:与执行者相同的 FSDP 配置。**对于超过 7B 的模型,默认建议为 ref 开启卸载。** - ``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 的本地数量。 **生成模型** - ``actor_rollout_ref.rollout.name``:hf/vllm/sglang。 - (自动回归)生成参数。这些键应等于 vLLM 的 ``SamplingParams`` 中的属性名称。 - ``temperature``、 ``top_k``、 ``top_p`` 等:在 ``SamplingParams`` 中的采样参数。 - ``actor_rollout_ref.rollout.dtype``:生成模型参数类型。这应与 FSDP/Megatron 后端的执行者模型参数类型对齐。 - ``actor_rollout_ref.rollout.gpu_memory_utilization``: - 对于 vLLM v0.7.0 及更高版本:**总** GPU 内存使用的占比。 - 对于 SGLang:对应 ``mem_fraction_static``,表示用于静态内存(如模型权重和 KV 缓存)的可用 GPU 内存占比。 - ``actor_rollout_ref.rollout.tensor_model_parallel_size``:生成模型的 TP 大小。仅在 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``:是否在训练生成期间采样。如果设置为 False,则生成模型将执行贪婪采样。 - ``actor_rollout_ref.rollout.val_kwargs``:专门用于验证的采样参数。 - ``top_k``:Top-k 采样参数。默认为 vLLM 生成的 -1 或 HF 生成的 0。 - ``top_p``:Top-p 采样参数。默认为 1.0 (禁用)。 - ``temperature``:采样温度。默认为 0 (确定性贪婪)。 - ``n``:在验证期间为每个提示生成的响应数量。默认为 1。 - ``do_sample``:是否在验证期间使用采样。默认为 False(确定性输出)。当设置为 True 时,生成将使用 ``actor_rollout_ref.rollout.val_kwargs`` 参数(top_k、top_p、temperature)来控制采样行为。 - ``actor_rollout_ref.rollout.engine_kwargs.vllm``:额外的 vllm 引擎参数,请参考官方文档。 - ``actor_rollout_ref.rollout.engine_kwargs.sglang``:额外的 sglang 引擎参数,请参考官方文档。 - ``actor_rollout_ref.rollout.ignore_eos``:是否忽略 EOS 标记并在生成 EOS 标记后继续生成标记。 - ``actor_rollout_ref.rollout.free_cache_engine``:在生成阶段后卸载 KVCache。默认值为 True。当设置为 True 时,对于 vllm v0.5.4 和 v0.6.3,我们需要在 ``enforce_eager`` 设置为 True 时禁用 CUDAGraph 使用。 - ``actor_rollout_ref.rollout.enforce_eager``:是否在 vLLM 生成中使用 CUDAGraph。默认设置为 True 以禁用 CUDAGraph。 - ``actor_rollout_ref.rollout.load_format``:用于将执行者模型权重加载到生成模型的权重加载器类型。 - ``auto``:使用 Megatron 权重加载器。 - ``megatron``:使用 Megatron 权重加载器。部署于 Megatron 后端。输入模型 ``state_dict()`` 已在 TP 维度沿分区并已在 PP 维度聚集。这个权重加载器要求生成模型和执行者模型的参数形状和名称相同。 - ``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`` 中选择生成初始化,我们的混合引擎将在执行者/生成权重同步期间选择相应的权重加载器(即 ``megatron``、 ``dtensor``、 ``hf``)。 Megatron 优化器和优化器参数调度器 ____________________________________ .. code:: yaml optim: optimizer: adam lr: 1e-6 clip_grad: 1.0 total_training_steps: -1 # must be override by program lr_warmup_init: 0.0 # initial learning rate for warmup, default to 0.0 lr_warmup_steps: -1 # Prioritized. Negative values mean delegating to lr_warmup_steps_ratio. lr_warmup_steps_ratio: 0. # the total steps will be injected during runtime lr_decay_steps: null lr_decay_style: constant # select from constant/linear/cosine/inverse_square_root min_lr: 0.0 # minimum learning rate, default to 0.0 weight_decay: 0.01 weight_decay_incr_style: constant # select from constant/linear/cosine lr_wsd_decay_style: exponential # select from constant/exponential/cosine lr_wsd_decay_steps: null use_checkpoint_opt_param_scheduler: False # use checkpoint optimizer parameter scheduler 请注意,Megatron 优化器和 FSDP 优化器在 API 上有一些差异。 - Megatron 优化器调度器将 lr_warmup 后的时段命名为 lr_decay_steps,因此 ``lr_scheduler_type`` 实际上意味着 warmup 后学习率衰减的风格。 - Megatron 优化器还支持权重衰减衰减机制。 - ``use_checkpoint_opt_param_scheduler`` 决定是否使用检查点优化器参数调度器。如果设置为 True,优化器参数调度器将在保存到检查点并在恢复训练期间从检查点加载。 对于学习率衰减,原始的 Megatron pretrain 默认选项 ``lr_decay_style`` 为 ``linear``, 意味着学习率将在 lr_decay_steps 内从初始学习率线性衰减到 ``min_lr``。但是,在 verl 中,为了与 FSDP 的默认行为对齐,我们将默认的 ``lr_decay_style`` 设置为 ``constant``,意味着学习率将在 warmup 阶段后保持恒定。 评论家模型 ~~~~~~~~~~ 评论家模型的大部分参数与执行者模型相似。 奖励模型 ~~~~~~~~ .. code:: yaml reward_model: enable: False model: input_tokenizer: ${actor_rollout_ref.model.path} # set this to null if the chat template is identical 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``:是否启用奖励模型。如果为 False,我们仅使用用户定义的奖励函数计算奖励。在 GSM8K 和数学示例中,我们禁用奖励模型。对于使用 full_hh_rlhf 的 RLHF 对齐示例,我们利用奖励模型来评估响应。如果为 False,以下参数无效。 - ``reward_model.model`` - ``input_tokenizer``:输入分词器。如果奖励模型的聊天模板与策略不同,我们需要首先解码为纯文本,然后应用 rm 的聊天模板。然后用 RM 评分。如果聊天模板一致,可以设置为 null。 - ``path``:RM 的 HDFS 路径或本地路径。请注意,RM 仅支持 AutoModelForSequenceClassification。其他模型类型需要定义自己的 RewardModelWorker,并通过代码传递。 - ``trust_remote_code``:是否启用加载远程代码模型。默认值为 False。 - ``reward_model.reward_manager``:奖励管理器。这定义了计算基于规则的奖励和处理不同奖励源的机制。默认值为 ``naive``。如果所有验证函数都是多进程安全的,则奖励管理器可以设置为 ``prime`` 以进行并行验证。 自定义奖励函数 ~~~~~~~~~~~~~ .. code:: yaml custom_reward_function: path: null name: compute_score - ``custom_reward_function.path``:包含自定义奖励函数的文件的路径。如果未指定,将使用预实现的奖励函数。 - ``custom_reward_function.name`` (可选):指定文件中的奖励函数名称。默认值为 'compute_score'。 算法 ~~~~ .. code:: yaml algorithm: gamma: 1.0 lam: 1.0 adv_estimator: gae use_kl_in_reward: False kl_penalty: kl # how to estimate kl divergence kl_ctrl: type: fixed kl_coef: 0.005 horizon: 10000 target_kl: 0.1 # Rollout Correction rollout_correction: rollout_is: null # IS weights: token/sequence/null rollout_is_threshold: 2.0 # Upper threshold for IS weights rollout_rs: null # Rejection sampling: token/sequence/geometric/null rollout_rs_threshold: null # RS upper threshold rollout_rs_threshold_lower: null # RS lower threshold rollout_token_veto_threshold: null # Per-token veto (null to disable) - ``gamma``:折扣因子。 - ``lam``:在 GAE 估计器中偏差与方差之间的权衡。 - ``adv_estimator``:支持 ``gae``、 ``grpo``、 ``reinforce_plus_plus``、 ``reinforce_plus_plus_baseline``、 ``rloo``、 ``rloo_vectorized``、 ``grpo_vectorized``。 - ``use_kl_in_reward``:是否启用奖励内 KL 惩罚。默认值为 False。 - ``kl_penalty``:支持 ``kl``、 ``abs``、 ``mse``、 ``low_var_kl`` 和 ``full``。如何计算执行者和参考策略之间的 KL 散度。具体选项请参考 `core_algos.py `_ 中的 `kl_penalty()` 。 - ``kl_ctrl``:奖励内 kl_penalty 控制器的配置。 - ``kl_coef``:奖励内 kl_penalty 的(初始)系数。默认值为 0.001。 - ``type``:'fixed' 用于 FixedKLController 和 'adaptive' 用于 AdaptiveKLController。 - ``horizon`` 和 ``target_kl``:请参阅 AdaptiveKLController 的源代码以了解详细信息。 - ``rollout_correction``:生成纠错配置(嵌套字典)。设置为 ``null`` 以禁用。当启用时,包含: - ``rollout_is``:IS 权重聚合级别:``token``、 ``sequence`` 或 ``null`` 以禁用 IS 权重。 - ``rollout_is_threshold``:IS 重量的上限阈值(例如 2.0)。 - ``rollout_rs``:拒绝采样模式:``token``、 ``sequence``、 ``geometric`` 或 ``null`` 以禁用 RS。 - ``rollout_rs_threshold``:RS 上限阈值。 - ``rollout_rs_threshold_lower``:RS 下限阈值(null = 自动倒数)。 - ``rollout_token_veto_threshold``:灾难性异常值的每个标记否决阈值(null = 禁用)。 注意:生成纠错需要设置 ``actor_rollout_ref.rollout.calculate_log_probs=True``。 训练器 ~~~~~~ .. 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 path default_local_dir: checkpoints/${trainer.project_name}/${trainer.experiment_name} # local checkpoint path resume_mode: auto # or disable or resume_path if resume_from_path is set 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``:训练的总轮次。 - ``trainer.project_name``:用于 wandb、 swanlab、 mlflow。 - ``trainer.experiment_name``:用于 wandb、 swanlab、 mlflow。 - ``trainer.logger``:支持 console 和 wandb、 swanlab、 mlflow、 tensorboard、 trackio。 - ``trainer.log_val_generations``:验证期间记录的生成数量(默认 ``0``)。 - ``trainer.nnodes``:使用的节点数量。 - ``trainer.n_gpus_per_node``:每个节点的 GPU 数量。 - ``trainer.save_freq``:(按迭代)保存执行者和评论家模型检查点的频率。 - ``trainer.val_before_train``:是否在训练前运行验证。 - ``trainer.test_freq``:(按迭代)验证频率。 - ``trainer.critic_warmup``:在实际策略学习前训练评论家模型的迭代次数。 - ``trainer.resume_mode``:恢复训练的模式。支持 ``disable``、 ``auto`` 和 ``resume_path``。如果设置为 ``auto`` 作为默认,程序将自动从 ``default_local_dir`` 中的最新检查点恢复。如果设置为 ``resume_path``,程序将从 ``resume_from_path`` 中指定的路径恢复。 - ``trainer.resume_from_path``:从其恢复训练的路径。仅在 ``resume_mode`` 设置为 ``resume_path`` 时有效。 - ``trainer.remove_previous_ckpt_in_save``:是否在保存目录中移除之前的检查点。默认值为 False。 - ``trainer.del_local_ckpt_after_load``:是否在加载后删除本地检查点。默认值为 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 --------------- 数据 ~~~~ .. 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'。 - ``data.response_key``:包含生成响应的键。这应该是一个字符串列表,表示响应。默认值为 'responses'。 - ``data.data_source_key``:用于根据不同数据源分离指标计算,确保每个源的指标独立计算。 - ``data.reward_model_key``:包含参考答案的键。这些参考答案通常作为任务的 ground truth 或测试用例。 自定义奖励函数 ~~~~~~~~~~~~~ .. code:: yaml custom_reward_function: path: null name: compute_score - ``custom_reward_function.path``:包含自定义奖励函数的文件的路径。如果未指定,将使用预实现的奖励函数。 - ``custom_reward_function.name`` (可选):指定文件中的奖励函数名称。默认值为 'compute_score'。 sft_trainer.yaml 用于 SFT FSDP 后端 ------------------------------------- 优化器 ~~~~~~~ .. code:: yaml optim: optimizer: AdamW optimizer_impl: torch.optim lr: 1e-5 weight_decay: 0.01 lr_warmup_steps_ratio: 0.1 clip_grad: 1.0 lr_scheduler: cosine override_optimizer_config: null - ``optimizer``:优化器类名(例如 ``"AdamW"``、 ``"AdamW8bit"``、 ``"_AdamW"``)。模块中的类名。 - ``optimizer_impl``:从中导入优化器的模块路径(例如 ``"torch.optim"``、 ``"torchao.optim"``、 ``"bitsandbytes.optim"``)。 - ``optim.lr``:优化器的学习率。 - ``optim.weight_decay``:优化器的权重衰减。 - ``optim.lr_warmup_steps_ratio``:warmup 步骤占总训练步骤的比例。 - ``optim.clip_grad``:梯度裁剪值。 - ``optim.lr_scheduler``:学习率调度器类型。选项: - ``cosine``:带 warmup 的余弦学习率调度器(默认)。 - ``wsd``:在 warmup 和 decay 阶段之间提供稳定学习率阶段的 Warmup-Stable-Decay 调度器。 - ``override_optimizer_config``:额外的优化器特定关键字参数字典。例如,要使用 ``torchao.optim`` 的 ``_AdamW`` 和 BF16 随机舍入: ``{"bf16_stochastic_round": true}`` 模型 ~~~~~~~~~~~~ 模型的大部分参数与奖励模型相似。 .. 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 卸载。如果为 True,则使用 offload_params 作为参数。 - ``offload_params``:是否在计算未涉及时将参数卸载到 CPU。如果为 True,则梯度也将卸载到 CPU,这意味着优化器步骤在 CPU 上运行。 - ``lora_rank``:LoRA 模型的 rank,默认值为 0。如果 ``lora_rank``>0,我们将训练 LoRA 模块而不是调整完整模型。 - ``lora_alpha``:LoRA 缩放的 alpha 参数,默认值为 16。 - ``target_modules``:应用适配器的模块名称,默认值为 ``all-linear``。请参阅 `peft 文档 `_ 以了解详情。 - ``use_liger``:是否启用 Liger 内核,默认值为 False。如果为 True,我们将 Liger 内核应用到模型中(取决于 liger-kernel)。