智能体强化学习配置#
本节介绍智能体和推理 RL 训练专用的配置参数(数学推理、代码智能体、多智能体系统)。 这些参数扩展了 基础配置 中的共享配置。
runner#
runner:
enable_dynamic_batch_size: False
max_tokens_per_mbs: 2048
runner.enable_dynamic_batch_size:使用 Megatron 训练时是否启用动态批大小。
runner.max_tokens_per_mbs:启用动态批时每个微批的 token 上限。
algorithm#
algorithm:
n_minibatches: 4
training_batch_size_per_gpu: 1
rollout_batch_size_per_gpu: null
sampling_params:
max_new_tokens: ${subtract:${runner.seq_length}, ${data.max_prompt_length}}
min_new_tokens: 1
algorithm.n_minibatches:每个 batch 的梯度更新次数。
algorithm.training_batch_size_per_gpu:每张 actor GPU 的训练微批大小。
algorithm.rollout_batch_size_per_gpu:每 GPU 的推理微批大小;为 null 时按全局大小平均分配。
sampling_params:
algorithm.sampling_params.max_new_tokens:最大生成长度(由 runner.seq_length 与 data.max_prompt_length 计算)。
algorithm.sampling_params.min_new_tokens:最小生成长度。
rollout#
rollout:
enforce_eager: False # 若为 False,rollout 引擎将使用 CUDA graph,初始化更久但运行更快
distributed_executor_backend: mp # 可选 ray 或 mp
disable_log_stats: False
detokenize: False # 是否反词元化输出;RL 训练通常只需 token id。调试可设 True
padding: null # 为空则使用 tokenizer.pad_token_id;用于过滤 megatron 的 padding
eos: null # 为空则使用 tokenizer.eos_token_id
attention_backend: triton
tensor_parallel_size: 1
pipeline_parallel_size: 1
validate_weight: False # 是否在开始时发送全部权重进行一致性校验
validate_save_dir: null # 若启用校验,保存用于比对的权重目录
print_outputs: False # 是否打印 rollout 引擎的输出(token id/文本等)
sglang_decode_log_interval: 500000 # SGLang 打印解码耗时与统计信息的间隔
max_running_requests: 64 # rollout 引擎内最大并发请求数
cuda_graph_max_bs: 128 # 使用 CUDA graph 的最大 batch size;超过则不使用
use_torch_compile: False # 在 SGLang 中为 rollout 启用 torch.compile
torch_compile_max_bs: 128 # 启用 torch.compile 的最大 batch size;超过则不使用
rollout.enforce_eager:True 时禁用 CUDA graph,加快预热启动。
rollout.distributed_executor_backend:rollout worker 的启动后端(mp 或 ray)。
rollout.disable_log_stats:是否关闭后端周期性统计日志。
rollout.detokenize:是否将输出 detokenize(调试用)。
rollout.padding:pad token id 重载;null 则用 tokenizer 的 pad id。
rollout.eos:EOS token id 重载;null 则用 tokenizer 的 eos id。
rollout.attention_backend:注意力算子后端(如 triton)。
rollout.tensor_parallel_size:生成后端的张量并行度(TP)。
rollout.pipeline_parallel_size:生成后端的流水并行度(PP)。
并行化细节见 5D 并行配置。
rollout.validate_weight:是否发送完整权重进行校验。
rollout.validate_save_dir:启用校验时的权重保存目录。
rollout.print_outputs:是否打印调试输出。
rollout.sglang_decode_log_interval:SGLang 解码统计的间隔。
rollout.max_running_requests:最大并发解码请求数。
rollout.cuda_graph_max_bs:可使用 CUDA graph 的最大批大小。
rollout.use_torch_compile:启用 torch.compile。
rollout.torch_compile_max_bs:可使用 torch.compile 的最大批大小。
data#
data:
type: math
max_prompt_length: 1024
rollout_batch_size: 64
val_rollout_batch_size: null
num_workers: 2
prompt_key: prompt
shuffle: True
validation_shuffle: True
seed: 1234
train_data_paths: ["../../data/boba/AReaL-boba-106k.jsonl"]
val_data_paths: ["../../data/boba/AReaL-boba-106k.jsonl"]
data.type:数据集/任务类型(如 math)。
data.max_prompt_length:提示的最大 token 数。
data.rollout_batch_size:全局 rollout 批大小。
data.val_rollout_batch_size:全局验证批大小;为 null 则回退到 data.rollout_batch_size。
data.num_workers:每个 actor rank 的数据加载进程数。
data.prompt_key:JSONL 中提示文本的键名。
data.shuffle:训练数据是否每 epoch 乱序。
data.validation_shuffle:验证数据是否乱序(on-policy 评估通常建议 True)。
data.seed:数据加载与采样用的随机种子。
data.train_data_paths:训练 JSONL 文件列表。
data.val_data_paths:验证 JSONL 文件列表。
actor#
actor:
training_backend: megatron
mcore_gpt: True
spec_name: decoder_gpt
offload_optimizer: True
offload_weight: True
offload_grad: True
enable_dp_load_balance: False
calculate_flops: False
model:
precision: fp16
add_bias_linear: False
tensor_model_parallel_size: 1
pipeline_model_parallel_size: 1
activation: swiglu
sequence_parallel: True
# recompute_method: block
# recompute_granularity: selective
recompute_method: block
recompute_granularity: full
recompute_num_layers: 20
seq_length: ${runner.seq_length}
encoder_seq_length: ${runner.seq_length}
normalization: rmsnorm
position_embedding_type: rope
apply_rope_fusion: True
bias_dropout_fusion: False
persist_layer_norm: False
bias_activation_fusion: False
attention_softmax_in_fp32: True
batch_p2p_comm: False
variable_seq_lengths: True
gradient_accumulation_fusion: False
moe_token_dispatcher_type: alltoall
use_cpu_initialization: False
optim:
optimizer: adam
bf16: False
fp16: True
lr: 2e-05
adam_beta1: 0.9
adam_beta2: 0.95
adam_eps: 1.0e-05
min_lr: 2.0e-6
weight_decay: 0.05
use_distributed_optimizer: True
overlap_grad_reduce: True
overlap_param_gather: True
optimizer_enable_pin: false
overlap_param_gather_with_optimizer_step: False
clip_grad: 1.0
loss_scale_window: 5
lr_sched:
lr_warmup_fraction: 0.01
lr_warmup_init: 0.0
lr_warmup_iters: 0
max_lr: 2.0e-5
min_lr: 0.0
lr_decay_style: constant
lr_decay_iters: 10
tokenizer:
tokenizer_model: ../../model/DeepSeek-R1-Distill-Qwen-1.5B/
use_fast: False
trust_remote_code: True
padding_side: 'right'
megatron:
ddp_bucket_size: null
distributed_backend: nccl # 支持 'nccl' 与 'gloo'
distributed_timeout_minutes: 30
ckpt_format: torch
use_dist_ckpt: False
tp_comm_bootstrap_backend: nccl
tp_comm_overlap_cfg: null
use_hf_ckpt: True # 为 True 时将 HF 模型转为 Megatron checkpoint 并用于训练
ckpt: # checkpoint 转换器配置
model: DeepSeek-R1-Distill-Qwen-1.5B
hf_model_path: ${rollout.model.model_path} # HF 模型所在路径
save_path: ${runner.output_dir}/${runner.experiment_name}/actor/megatron_ckpt_from_hf
use_gpu_num : 0
use_gpu_index: null #
process_num: 16 # 转换使用的进程数
tensor_model_parallel_size: ${actor.model.tensor_model_parallel_size}
pipeline_model_parallel_size: ${actor.model.pipeline_model_parallel_size}
fsdp_config:
strategy: "fsdp"
sharding_strategy: "no_shard"
cpu_offload: False
offload_pin_memory: False
reshard_after_forward: True
enable_gradient_accumulation: True
forward_prefetch: False
limit_all_gathers: False
backward_prefetch: null
use_orig_params: False
use_liger_kernel: False
mixed_precision:
param_dtype: ${actor.model.precision}
reduce_dtype: ${actor.model.precision}
buffer_dtype: ${actor.model.precision}
amp_autocast:
enabled: False
precision: "bf16"
grad_scaler:
enabled: False
顶层:
actor.training_backend:训练后端(megatron)。
actor.mcore_gpt:是否使用 Megatron-Core GPT 栈。
actor.spec_name:模型规格/预设(如 decoder_gpt)。
actor.offload_optimizer/weight/grad:将优化器/权重/梯度尽可能下放到 CPU 以节省显存。
actor.enable_dp_load_balance:是否启用数据并行负载均衡。
actor.calculate_flops:是否计算并记录 FLOPs(分析用)。
Model 子项:
actor.model.precision:训练数值精度(fp16 等)。
actor.model.add_bias_linear:线性层是否带 bias。
actor.model.tensor_model_parallel_size:actor 端 TP 并行度。
actor.model.pipeline_model_parallel_size:actor 端 PP 并行度。
actor.model.activation:激活函数(如 swiglu)。
actor.model.sequence_parallel:启用序列并行(需配合 TP)。
actor.model.recompute_method/granularity/num_layers:重计算策略/粒度/层数。
actor.model.seq_length / encoder_seq_length:训练时解码/编码序列长度。
actor.model.normalization:归一化层类型(rmsnorm)。
actor.model.position_embedding_type:位置编码类型(rope)。
actor.model.apply_rope_fusion:是否使用融合的 RoPE 内核。
actor.model.*fusion:若干算子融合开关。
actor.model.attention_softmax_in_fp32:注意力 softmax 用 FP32 保稳。
actor.model.batch_p2p_comm:跨层批量 P2P 通信。
actor.model.variable_seq_lengths:允许不同微批序列长度。
actor.model.gradient_accumulation_fusion:梯度累积融合。
actor.model.moe_token_dispatcher_type:MoE token 分发方式(如 alltoall)。
actor.model.use_cpu_initialization:在 CPU 上初始化权重以降低 GPU 峰值。
优化器:
actor.optim.optimizer:优化器选择(如 adam)。
actor.optim.bf16 / actor.optim.fp16:混合精度训练相关开关。
actor.optim.lr:基础学习率(Base learning rate)。
actor.optim.adam_beta1 / adam_beta2 / adam_eps:Adam 优化器的超参数。
actor.optim.min_lr:最小学习率(适用于 LR 衰减低于基准 LR 的情况)。
actor.optim.weight_decay:L2 正则化权重衰减。
actor.optim.use_distributed_optimizer:是否使用 Megatron 分布式优化器。
actor.optim.overlap_grad_reduce:是否在反向传播时与梯度归约操作重叠执行。
actor.optim.overlap_param_gather:是否在前向传播时与参数 all-gather 重叠执行。
actor.optim.optimizer_enable_pin:是否固定优化器的内存位置。
actor.optim.overlap_param_gather_with_optimizer_step:是否在执行优化器 step 时与参数 all-gather 重叠。
actor.optim.clip_grad:全局梯度裁剪范数(Gradient clipping norm)。
actor.optim.loss_scale_window:FP16 的动态 loss scaling 窗口。
学习率调度:
actor.lr_sched.lr_warmup_fraction:学习率预热阶段占总迭代的比例。
actor.lr_sched.lr_warmup_init:预热初始学习率值。
actor.lr_sched.lr_warmup_iters:学习率预热的迭代次数(>0 时覆盖上面比例设置)。
actor.lr_sched.max_lr / min_lr:学习率调度的上限 / 下限。
actor.lr_sched.lr_decay_style:学习率衰减策略(如 constant)。
actor.lr_sched.lr_decay_iters:学习率衰减持续的总迭代次数。
分词器:
actor.tokenizer.tokenizer_model:分词器路径/名称。
actor.tokenizer.use_fast:是否使用 fast tokenizer。
actor.tokenizer.trust_remote_code:允许自定义分词器代码。
actor.tokenizer.padding_side:填充方向(left/right)。
Megatron 集成:
actor.megatron.*:分布式后端、超时、checkpoint 格式、HF checkpoint 转换等设置。
Megatron checkpoint 转换器:
actor.megatron.ckpt.model:转换器元信息中的模型名称。
actor.megatron.ckpt.hf_model_path:源 HF 模型路径。
actor.megatron.ckpt.save_path:转换后 Megatron checkpoint 保存目录。
actor.megatron.ckpt.use_gpu_num:转换使用的 GPU 数量。
actor.megatron.ckpt.use_gpu_index:指定使用的 GPU 索引。
actor.megatron.ckpt.process_num:转换过程使用的 CPU 进程数。
actor.megatron.ckpt.tensor_model_parallel_size:转换后 checkpoint 的张量并行度(TP)。
actor.megatron.ckpt.pipeline_model_parallel_size:转换后 checkpoint 的流水线并行度(PP)。
FSDP 集成:
actor.fsdp_config.strategy: 决定所使用FSDP 策略,支持fsdp, fsdp2(不区分大小写)
actor.fsdp_config.sharding_strategy: FSDP/FSDP2参数,表示FSDP所使用的切片策略,支持full_shard, shard_grad_op, hybrid_shard, no_shard
actor.fsdp_config.cpu_offload: FSDP2参数,决定FSDP2是否将参数放置于CPU侧,需要时在传输到GPU侧
actor.fsdp_config.offload_pin_memory: FSDP2参数,仅当cpu_offload选项为True时有效,如果为真则此时CPU侧内存为pinned memory以提高传输效率
actor.fsdp_config.reshard_after_forward: FSDP2参数,表示是否在前向传播后重新切片参数以节省显存
actor.fsdp_config.enable_gradient_accumulation: FSDP/FSDP2参数,表示是否启用梯度累积,如果为真则仅在最后一个micro batch结束后再进行通信并更新梯度,开启会增加一定显存占用,但会加快训练
actor.fsdp_config.forward_prefetch: FSDP1参数,表示是否在前向传播时预取下一个 all-gather 操作。开启时会增加显存占用,建议当显存足够时可以开启以重叠通信与计算,从而提升性能
actor.fsdp_config.limit_all_gathers: FSDP1参数,表示是否限制并发 all-gather 操作的数量,建议当CPU或内存成为瓶颈时开启。
actor.fsdp_config.backward_prefetch: FSDP1参数,表示后向传播时的预取策略(null/'pre'/'post'), 如果为 'pre',则在计算梯度时预取下一个 all-gather 操作,这样重叠更激进,吞吐更高;如果为 'post',则在当前梯度计算完成后预取下一个 all-gather 操作,相较于 'pre' 更保守一些。
actor.fsdp_config.use_orig_params: FSDP1参数,表示是否使用模块的原始参数,让模块暴露原始参数(nn.Module.named_parameters),而非 FSDP 的扁平参数。可以提高兼容性,但是会引入额外的通信开销降低性能。
actor.fsdp_config.use_liger_kernel: FSDP/FSDP2参数,是否使用 liger_kernel(目前仅支持部分模型,包括:qwen2.5,qwen2.5-vl),开启则可以降低显存占用并提升训练速度。
actor.fsdp_config.mixed_precision.param_dtype: FSDP/FSDP2参数,指定参数类型
actor.fsdp_config.mixed_precision.reduce_dtype: FSDP/FSDP2参数,指定规约时使用的数据类型
actor.fsdp_config.mixed_precision.buffer_dtype: FSDP1参数,指定缓冲区使用的数据类型
actor.fsdp_config.amp_autocast.enabled: FSDP/FSDP2参数,表示是否启用自动混合精度训练
actor.fsdp_config.amp_autocast.precision: FSDP/FSDP2参数,表示AMP使用的数值精度
actor.fsdp_config.grad_scaler.enabled: FSDP/FSDP2参数,表示是否启用梯度缩放器
actor.fsdp_config.grad_scaler.init_scale: FSDP/FSDP2 参数,表示梯度缩放器的初始缩放因子,用于在训练初期放大梯度以防止数值下溢(Underflow)。
actor.fsdp_config.grad_scaler.growth_interval: FSDP/FSDP2 参数,表示在不发生梯度溢出的情况下,缩放因子增加所需的连续迭代步数。
reward#
reward:
reward_type: math
reward_scale: 5.0
reward.reward_type:训练所使用的奖励类型。
reward.reward_scale:答对奖励为 reward_scale,答错为 -reward_scale。