智能体强化学习配置#
本节介绍智能体和推理 RL 训练专用的配置参数(数学推理、代码智能体、多智能体系统)。 这些参数扩展了 基础配置 中的共享配置。
runner#
runner:
enable_dynamic_batch_size: False
max_tokens_per_mbs: 2048
参数 |
说明 |
|---|---|
|
使用 Megatron 训练时是否启用动态批大小。 |
|
启用动态批时,单个 Megatron 微批中 token 数的上限。 |
algorithm#
algorithm:
n_minibatches: 4
training_batch_size_per_gpu: 1
rollout_batch_size_per_gpu: null
recompute_logprobs: True
shuffle_rollout: False
clip_ratio_low: null
clip_ratio_high: null
sampling_params:
max_new_tokens: ${subtract:${runner.seq_length}, ${data.max_prompt_length}}
min_new_tokens: 1
参数 |
说明 |
|---|---|
|
每个批次的梯度更新次数。 |
|
每个 Actor GPU 的微批大小。 |
|
每个 GPU 的推理微批; |
|
在训练引擎中重新计算对数概率,而非信任 rollout 引擎的取值。 |
|
在优化步之前对 rollout 样本进行打乱。 |
|
非对称 PPO 裁剪界; |
|
最大生成 token 数;由 |
|
最小生成 token 数。 |
共享的损失/优势相关键(loss_type、adv_type、kl_beta、
ratio_clip_eps、group_size、sampling_params.temperature 等)在
基础配置 中说明。
rollout#
rollout:
rollout_backend: sglang # [sglang, vllm]
enforce_eager: False
distributed_executor_backend: mp # ray 或 mp
disable_log_stats: False
detokenize: False
padding: null # 为 null 时使用 tokenizer.pad_token_id
eos: null # 为 null 时使用 tokenizer.eos_token_id
tensor_parallel_size: 1
pipeline_parallel_size: 1
return_logprobs: ${not:${algorithm.recompute_logprobs}}
validate_weight: False
validate_save_dir: null
print_outputs: False
max_running_requests: 64
cuda_graph_max_bs: 128
sglang:
attention_backend: triton # [flashinfer, triton]
decode_log_interval: 500000
use_torch_compile: False
torch_compile_max_bs: 128
vllm:
attention_backend: FLASH_ATTN # [FLASH_ATTN, XFORMERS]
enable_chunked_prefill: True
enable_prefix_caching: True
enable_flash_infer_sampler: True
max_num_batched_tokens: null
参数 |
说明 |
|---|---|
|
使用的生成后端( |
|
为 True 时禁用 CUDA 图捕获以缩短预热时间。 |
|
启动 rollout Worker 的后端( |
|
抑制后端的周期性统计日志。 |
|
为调试反 token 化输出(RL 通常仅使用 token id)。 |
|
pad token id 覆盖; |
|
EOS token id 覆盖; |
|
生成后端内部的 TP 并行度。见 5D 并行配置。 |
|
生成后端内部的 PP 并行度。见 5D 并行配置。 |
|
引擎是否返回对数概率;默认为 |
|
首次发送全部权重以进行交叉校验/验证。 |
|
启用验证时用于保存对比权重的目录。 |
|
打印引擎的 token id/文本以供调试。 |
|
最大并发解码请求数。 |
|
可使用 CUDA 图的最大批大小。 |
SGLang 后端(``rollout.sglang``):
参数 |
说明 |
|---|---|
|
注意力内核后端( |
|
SGLang 记录解码统计的间隔(步)。 |
|
在 SGLang 内启用 |
|
可使用 |
vLLM 后端(``rollout.vllm``):
参数 |
说明 |
|---|---|
|
注意力后端( |
|
启用分块预填充。 |
|
启用前缀缓存。 |
|
使用 FlashInfer 进行采样。 |
|
一起批处理的最大 token 数; |
rollout.group_name、rollout.gpu_memory_utilization 与 rollout.model.*
为共享键,在 基础配置 中说明。
data#
data:
type: math
dataset_name: boba
max_prompt_length: 1024
filter_prompt_by_length: True
rollout_batch_size: 512
val_rollout_batch_size: null
num_workers: 2
prompt_key: prompt
answer_key: solutions
apply_chat_template: False
shuffle: True
validation_shuffle: True
seed: 1234
train_data_paths: ["/dataset/boba/AReaL-boba-106k.jsonl"]
val_data_paths: ["/dataset/boba/AReaL-boba-106k.jsonl"]
参数 |
说明 |
|---|---|
|
数据集/任务族(例如 |
|
用于选择预处理/格式化的数据集标识。 |
|
prompt 允许的最大 token 数。 |
|
丢弃长度超过 |
|
跨引擎的全局 rollout 批大小。 |
|
全局验证 rollout 批大小; |
|
每个 Actor rank 的数据加载 worker 数。 |
|
存储 prompt 文本的 JSONL 键。 |
|
存储参考答案/解答的 JSONL 键。 |
|
在 token 化前用分词器的对话模板包裹 prompt。 |
|
每个 epoch 打乱训练数据。 |
|
打乱验证数据。 |
|
加载器与采样的随机种子。 |
|
训练 JSONL 文件路径列表。 |
|
验证 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
seed: 1234
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: 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: False
overlap_param_gather: False
optimizer_enable_pin: false
overlap_param_gather_with_optimizer_step: False
clip_grad: 0.8
loss_scale: 65536
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: /path/to/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
use_profiler: False
ckpt_convertor: # 检查点转换器的配置
model: DeepSeek-R1-Distill-Qwen-1.5B
hf_model_path: ${rollout.model.model_path}
save_path: ${runner.output_dir}/${runner.experiment_name}/converted_ckpts/actor
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
顶层
参数 |
说明 |
|---|---|
|
训练后端( |
|
使用 Megatron-Core GPT 栈。 |
|
模型 spec/预设名称(例如仅解码器 GPT)。 |
|
将优化器状态卸载到 CPU 以降低显存。 |
|
在可能时将模型权重卸载到 CPU。 |
|
将梯度卸载到 CPU 以降低显存。 |
|
启用数据并行负载均衡。 |
|
计算并记录 FLOPs 以供性能分析。 |
|
用于可复现性的全局随机种子。 |
模型子节
参数 |
说明 |
|---|---|
|
训练的数值精度(例如 |
|
为线性层添加偏置项。 |
|
Actor 的 TP 并行度。 |
|
Actor 的 PP 并行度。 |
|
激活函数(例如 |
|
启用序列并行(需要 TP)。 |
|
激活重计算策略(例如 |
|
重计算范围( |
|
进行检查点/重计算的层数。 |
|
训练的解码器上下文长度。 |
|
编码器长度(仅解码器模型下与 |
|
归一化层类型(例如 |
|
位置编码类型(例如 |
|
在可用时使用融合的 RoPE 内核。 |
|
融合 bias + dropout 内核。 |
|
以更高精度持久化 LayerNorm 参数。 |
|
融合 bias + 激活内核。 |
|
以 FP32 计算注意力 softmax 以提升稳定性。 |
|
跨层批处理 P2P 通信。 |
|
允许每个微批使用可变序列长度。 |
|
融合的梯度累积。 |
|
MoE token 分发器(例如 |
|
在 CPU 上初始化权重以降低显存峰值。 |
优化器
参数 |
说明 |
|---|---|
|
优化器选择( |
|
混合精度标志。 |
|
基础学习率。 |
|
Adam 超参数。 |
|
最小学习率(用于会衰减到基础学习率以下的调度器)。 |
|
L2 权重衰减。 |
|
使用 Megatron 分布式优化器。 |
|
让梯度规约与反向传播重叠。 |
|
让参数 all-gather 与前向传播重叠。 |
|
固定(pin)优化器内存。 |
|
让参数 gather 与优化器步重叠。 |
|
全局梯度裁剪范数。 |
|
静态 FP16 损失缩放(动态缩放请改用 |
学习率调度
参数 |
说明 |
|---|---|
|
预热占总迭代数的比例。 |
|
预热期间的初始学习率。 |
|
预热迭代数(> 0 时覆盖比例设置)。 |
|
调度器的学习率上下界。 |
|
衰减策略(例如 |
|
总衰减迭代数。 |
分词器
参数 |
说明 |
|---|---|
|
分词器的路径/名称。 |
|
使用 HuggingFace 快速分词器。 |
|
允许自定义分词器代码。 |
|
|
Megatron 集成
参数 |
说明 |
|---|---|
|
DDP 梯度分桶大小。 |
|
分布式后端( |
|
后端通信超时。 |
|
检查点格式(例如 |
|
使用分布式(分片)检查点。 |
|
用于 TP 引导的后端(例如 |
|
TP 通信/计算重叠的 YAML 路径。 |
|
从 HuggingFace 检查点转换/加载以进行训练。 |
|
训练期间启用 Torch profiler(会影响性能)。 |
Megatron 检查点转换器(``actor.megatron.ckpt_convertor``)
参数 |
说明 |
|---|---|
|
转换器元数据使用的模型名称。 |
|
源 HF 模型路径。 |
|
转换后 Megatron 检查点的目标目录。 |
|
用于转换的 GPU 数量。 |
|
使用的具体 GPU 索引。 |
|
用于转换的 CPU 进程数。 |
|
转换后检查点的 TP 并行度。 |
|
转换后检查点的 PP 并行度。 |
FSDP 集成(``actor.fsdp_config``)
当 actor.training_backend 为 fsdp 时使用。
参数 |
说明 |
|---|---|
|
FSDP 策略: |
|
分片策略: |
|
FSDP2:参数保留在 CPU,仅在需要时移到 GPU。 |
|
FSDP2:使用固定(pinned)CPU 内存(仅当 |
|
FSDP2:前向后重新分片参数以节省显存。 |
|
仅在最后一个微批后进行通信/更新。以显存换训练速度。 |
|
FSDP:在前向期间预取下一次 all-gather(更多显存,更好重叠)。 |
|
FSDP:限制并发 all-gather(CPU/内存受限时建议开启)。 |
|
FSDP:反向中的预取策略( |
|
FSDP:暴露原始(未展平)参数;兼容性更好,但通信开销更大。 |
|
使用 Liger 内核(目前支持 Qwen2.5 / Qwen2.5-VL)以降低显存并加速训练。 |
|
参数数据类型。 |
|
规约数据类型。 |
|
缓冲区数据类型。 |
|
启用自动混合精度(AMP)训练。 |
|
AMP 使用的数值精度。 |
|
启用梯度缩放器。 |
reward#
reward:
reward_type: math
reward_scale: 5.0
参数 |
说明 |
|---|---|
|
训练使用的奖励类型(例如 |
|
答案正确时获得 |