配置参数详解¶
本指南详细介绍了 LightRFT 中提供的所有配置参数。为了方便查阅,参数按类别进行了归类。
目录¶
模型参数¶
--pretrain¶
类型:
str是否必填: 是
描述: 预训练模型和分词器 (tokenizer) 的路径
示例:
/path/to/Qwen2.5-7B-Instruct
--reward_pretrain¶
类型:
str默认值: 与
--pretrain相同描述: 奖励模型 (Reward Model) 的路径
示例:
/path/to/reward-model
--remote_rm_url¶
类型:
str默认值:
None描述: 远程奖励模型服务器的 URL
示例:
http://localhost:5000
--max_len¶
类型:
int默认值:
4096描述: 最大序列长度(Prompt + Response)
--prompt_max_len¶
类型:
int默认值:
2048描述: 最大 Prompt 长度
训练参数¶
--num_episodes¶
类型:
int默认值:
1描述: 训练的总 Episode 数量
建议: 大多数任务建议设置为 10-100
--max_epochs¶
类型:
int默认值:
1描述: 每个 Episode 中训练的 Epoch 数量
建议: 1-3
--actor_learning_rate¶
类型:
float默认值:
5e-7描述: Actor(策略)模型的学习率
建议范围:
1e-7到5e-6
--critic_learning_rate¶
类型:
float默认值:
9e-6描述: Critic(价值)模型的学习率
建议范围:
1e-6到1e-5
--lr_warmup_ratio¶
类型:
float默认值:
0.03描述: Warmup 步数占总步数的比例
范围:
0.0到0.1
--max_norm¶
类型:
float默认值:
1.0描述: 梯度裁剪的最大范数 (Gradient clipping norm)
--l2¶
类型:
float默认值:
0.0描述: L2 正则化系数
--adam_betas¶
类型:
tuple[float, float]默认值:
(0.9, 0.95)描述: Adam 优化器的 beta 参数
Batch Size 配置¶
重要约束¶
规则: train_batch_size >= rollout_batch_size × n_samples_per_prompt
--train_batch_size (TBS)¶
类型:
int是否必填: 是
描述: 所有 GPU 上的全局训练 Batch Size
示例:
256计算公式:
micro_train_batch_size × num_gpus × gradient_accumulation_steps
--micro_train_batch_size¶
类型:
int默认值:
1描述: 单个 GPU 上的训练 Batch Size
常见值:
1,2,4
--rollout_batch_size (RBS)¶
类型:
int是否必填: 是
描述: 所有 GPU 上的全局生成 (Rollout) Batch Size
示例:
64注意: 必须能被 GPU 总数整除
--micro_rollout_batch_size¶
类型:
int默认值:
2描述: 单个 GPU 上的生成 (Rollout) Batch Size
常见值:
2,4,8
配置示例¶
配置 1: 8 张 GPU,显存受限
--train_batch_size 128 \
--micro_train_batch_size 1 \
--rollout_batch_size 64 \
--micro_rollout_batch_size 2
配置 2: 8 张 GPU,追求高吞吐量
--train_batch_size 512 \
--micro_train_batch_size 2 \
--rollout_batch_size 256 \
--micro_rollout_batch_size 8
算法参数¶
--advantage_estimator¶
类型:
str选项:
gae,reinforce,rloo,reinforce_baseline,group_norm,cpgd,reinforce++,on_policy_distillation默认值:
group_norm描述: 优势估计 (Advantage estimation) 的方法
建议:
group_norm: 通用选择 (GRPO)reinforce: 需要低方差时使用cpgd: 旨在保持基础模型能力时使用
说明:当前参数解析器可以接受
reinforce++,但优势计算器工厂尚未提供对应映射;在该集成完成前不应使用此选项。
--n_samples_per_prompt¶
类型:
int默认值:
4描述: 每个 Prompt 采样生成的 Response 数量
常见值:
4,8,16注意: 值越高效果通常越好,但速度越慢
--kl_estimator¶
类型:
str选项:
k1,k2,k3默认值:
k3描述: KL 散度估计器类型
建议: 大多数情况下使用
k3
--init_kl_coef¶
类型:
float默认值:
0.001描述: 初始 KL 惩罚系数
范围:
0.0001到0.01
--kl_target¶
类型:
float默认值:
0.01描述: 目标 KL 散度(用于 CPGD)
--clip_range¶
类型:
float默认值:
0.2描述: PPO 的裁剪范围 (Clipping range)
范围:
0.1到0.3
--clip_range_higher¶
类型:
float默认值:
0.3描述: 上限裁剪范围(用于 Clip Higher 算法)
--temperature¶
类型:
float默认值:
1.0描述: 采样温度 (Sampling temperature)
范围:
0.6到1.2注意: 值越低生成结果越确定
--top_p¶
类型:
float默认值:
0.9描述: 核采样 (Nucleus sampling) 概率
范围:
0.8到1.0
分布式训练¶
--zero_stage¶
类型:
int选项:
1,2,3默认值:
2描述: DeepSpeed ZeRO 优化阶段
建议:
Stage 1: 优化器状态分片
Stage 2: 优化器状态 + 梯度分片(推荐)
Stage 3: 优化器状态 + 梯度 + 参数分片(最大程度节省显存)
--fsdp¶
操作:
store_true默认值:
False描述: 使用 FSDP 代替 DeepSpeed
适用场景: 原生 PyTorch 工作流,追求极致的显存效率
--fsdp_cpu_offload¶
操作:
store_true默认值:
False描述: 将 FSDP 优化器状态卸载 (Offload) 到 CPU
注意: 减少 GPU 显存占用,但会降低速度
--bf16¶
操作:
store_true默认值: 通常默认启用
描述: 使用 bfloat16 混合精度
--gradient_checkpointing¶
操作:
store_true默认值:
False描述: 启用梯度检查点 (Gradient checkpointing)
注意: 以增加计算量为代价换取显存节省
--sp_size¶
类型:
int默认值:
1描述: 序列并行 (Sequence parallelism) 大小
建议: 处理极长序列时建议设置为
1,2,4
推理引擎¶
--engine_type¶
类型:
str选项:
vllm,sglang默认值:
vllm描述: 推理引擎类型
--engine_tp_size¶
类型:
int默认值:
1描述: 推理引擎的张量并行 (Tensor Parallelism) 大小
建议:
7B 模型:
1或213B-34B 模型:
2或470B+ 模型:
4或8
约束:
GPU 总数 (world_size) % engine_tp_size == 0
--engine_mem_util¶
类型:
float默认值:
0.5范围:
0.3到0.9描述: 用于 KV 缓存的 GPU 显存占比
建议:
显存充裕:
0.8-0.9显存适中:
0.5-0.7显存紧张:
0.3-0.5
--enable_engine_sleep¶
操作:
store_true默认值:
True描述: 启用推理引擎休眠模式
注意: 在不使用引擎阶段释放显存
--disable_engine_sleep¶
操作:
store_false目标名为:
enable_engine_sleep描述: 禁用推理引擎休眠模式
--rm_use_engine¶
操作:
store_true默认值:
False描述: 奖励模型 (Reward Model) 使用推理引擎进行计算
适用场景: 需要高吞吐量的奖励计算
内存优化¶
--adam_offload¶
操作:
store_true默认值:
False描述: 将 Adam 优化器状态卸载 (Offload) 到 CPU
--use_mp_opt¶
操作:
store_true默认值:
False描述: 使用混合精度优化器 (FSDP)
--packing_samples¶
操作:
store_true默认值:
False描述: 将多个样本打包 (Pack) 到同一序列中
适用场景: 序列长度差异较大时,可提高 GPU 利用率
--fused_linear_logprob¶
操作:
store_true默认值:
False描述: 融合线性层和 logprob 计算
注意: 对于大词表模型可节省显存
--chunk_size¶
类型:
int默认值:
4096描述: 融合操作的分块大小 (Chunk size)
日志与监控¶
--log_dir¶
类型:
str默认值:
None描述: 日志及可视化结果的保存目录
--plot_every¶
类型:
int默认值:
10描述: 每隔 N 步绘制一次生成长度分布图
--use_tensorboard¶
类型:
str默认值:
None描述: TensorBoard 日志目录
--use_wandb¶
类型:
str默认值:
None描述: Weights & Biases 项目名称
--wandb_org¶
类型:
str默认值:
None描述: W&B 组织名称
--wandb_run_name¶
类型:
str默认值: 自动生成
描述: W&B Run 名称
检查点管理¶
--save_path¶
类型:
str是否必填: 是
描述: 检查点 (Checkpoint) 保存目录
--ckpt_path¶
类型:
str默认值:
None描述: 加载检查点的路径
--load_checkpoint¶
操作:
store_true默认值:
False描述: 启用检查点加载
--save_interval¶
类型:
int默认值:
1描述: 每隔 N 个 Episode 保存一次检查点
--max_ckpt_num¶
类型:
int默认值:
3描述: 保留检查点的最大数量
--max_ckpt_mem¶
类型:
int默认值:
1000描述: 最大检查点存储空间(GB)
奖励处理¶
--reward_running_norm¶
操作:
store_true默认值:
False描述: 对奖励应用实时归一化 (Running normalization)
--reward_running_norm_minus_mean¶
操作:
store_true默认值:
False描述: 奖励归一化时减去均值
--advantages_norm¶
操作:
store_true默认值:
False描述: 对优势 (Advantages) 进行归一化
--advantage_clip¶
类型:
float默认值:
0.0描述: 对优势进行裁剪 (0 表示不裁剪)
--reward_clip¶
类型:
float默认值:
0.0描述: 对奖励进行裁剪 (0 表示不裁剪)
多模态 (VLM) 参数¶
--mixed_mm_data¶
操作:
store_true默认值:
False描述: 处理混合的多模态和纯文本数据
--processor¶
类型:
str默认值: 自动检测
描述: 多模态处理器 (Processor) 类型
完整配置示例¶
数学推理 (GSM8K, MATH)¶
python train.py \
# 模型
--pretrain /path/to/Qwen2.5-7B-Instruct \
--reward_pretrain /path/to/reward-model \
--max_len 4096 \
--prompt_max_len 2048 \
\
# 训练
--num_episodes 20 \
--max_epochs 1 \
--actor_learning_rate 5e-7 \
--critic_learning_rate 9e-6 \
\
# Batch Size
--train_batch_size 128 \
--micro_train_batch_size 1 \
--rollout_batch_size 64 \
--micro_rollout_batch_size 2 \
\
# 算法
--advantage_estimator group_norm \
--n_samples_per_prompt 8 \
--kl_estimator k3 \
--init_kl_coef 0.001 \
--temperature 0.6 \
\
# 分布式
--zero_stage 2 \
--bf16 \
--gradient_checkpointing \
\
# 引擎
--engine_type vllm \
--engine_tp_size 1 \
--engine_mem_util 0.85 \
--enable_engine_sleep \
\
# 内存
--adam_offload \
--fused_linear_logprob \
\
# 日志
--use_tensorboard ./tb_logs \
--plot_every 10 \
\
# 检查点
--save_path ./checkpoints \
--save_interval 1 \
--max_ckpt_num 3 \
\
# 奖励
--reward_running_norm \
--advantages_norm
多模态 VLM 训练¶
python train_vl.py \
# 模型
--pretrain /path/to/Qwen2-VL-7B-Instruct \
--max_len 4096 \
\
# 训练
--num_episodes 10 \
--actor_learning_rate 1e-6 \
\
# Batch Size
--train_batch_size 64 \
--micro_train_batch_size 1 \
--rollout_batch_size 32 \
--micro_rollout_batch_size 1 \
\
# 算法
--advantage_estimator group_norm \
--n_samples_per_prompt 4 \
\
# 分布式
--fsdp \
--fsdp_cpu_offload \
--gradient_checkpointing \
\
# 引擎
--engine_tp_size 4 \
--engine_mem_util 0.6 \
\
# VLM 特定
--mixed_mm_data \
--packing_samples
参数依赖校验¶
LightRFT 会自动验证参数的合法性。常见的校验规则包括:
Batch Size:
train_batch_size >= rollout_batch_size × n_samples_per_prompt整除性: Batch Size 必须能被 GPU 数量整除
显存: 引擎的 TP size 必须能整除 world size
学习率: Actor LR 通常小于 Critic LR
KL Target: 为了训练稳定,建议设置较小的值 (0.001-0.01)
环境变量¶
用于优化性能的有用环境变量:
# NCCL 优化
export TORCH_NCCL_AVOID_RECORD_STREAMS=1
# CUDA 显卡设置
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# 调试
export TORCH_DISTRIBUTED_DEBUG=INFO
export NCCL_DEBUG=INFO