配置说明
最后更新时间: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.htmlactor_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
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
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.modelinput_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_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
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
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_configmodel_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)。