7天掌握verl:从单机部署到千万级参数模型训练

7天掌握verl:从单机部署到千万级参数模型训练

【免费下载链接】verl verl: Volcano Engine Reinforcement Learning for LLMs 【免费下载链接】verl 项目地址: https://gitcode.com/GitHub_Trending/ve/verl

引言:为什么选择verl进行大模型强化学习?

在大语言模型(LLM)训练领域,强化学习(RL)已成为提升模型性能的关键技术。verl(Volcano Engine Reinforcement Learning for LLMs)作为火山引擎推出的开源框架,为开发者提供了从单机实验到大规模分布式训练的完整解决方案。本文将带你通过7天时间,从环境搭建到生产级部署,全面掌握verl的核心功能与最佳实践。

第1天:环境准备与基础安装

系统要求检查

开始前,请确保你的系统满足以下要求:

  • Python版本 ≥ 3.10
  • CUDA版本 ≥ 12.1

这些要求在官方安装文档中有详细说明。对于需要在AMD GPU上运行的用户,verl也提供了ROCm支持,具体配置可参考docker/Dockerfile.rocm

快速安装:Docker方式

推荐使用Docker进行环境隔离和快速部署。verl提供了三种类型的Docker镜像:

  • Base Image:仅包含基础依赖,可在其上安装vLLM或SGLang
  • Application Image:包含稳定版的推理和训练框架
  • Community Image:包含最新框架和实验性功能

以vLLM后端的应用镜像为例,启动命令如下:

docker create --runtime=nvidia --gpus all --net=host --shm-size="10g" --cap-add=SYS_ADMIN -v .:/workspace/verl --name verl verlai/verl:app-verl0.5-transformers4.55.4-vllm0.10.0-mcore0.13.0-te2.2 sleep infinity
docker start verl
docker exec -it verl bash

进入容器后,安装verl本身:

git clone https://gitcode.com/GitHub_Trending/ve/verl && cd verl
pip3 install --no-deps -e .

自定义环境安装

如果需要在现有环境中安装,可使用提供的安装脚本:

# 安装基础依赖
bash scripts/install_vllm_sglang_mcore.sh
# 仅安装FSDP支持(不包含Megatron)
USE_MEGATRON=0 bash scripts/install_vllm_sglang_mcore.sh

完成后安装verl:

git clone https://gitcode.com/GitHub_Trending/ve/verl.git
cd verl
pip install --no-deps -e .

第2天:首个RL训练实验

数据准备

以GSM8K数学推理数据集为例,首先运行数据预处理脚本:

python3 examples/data_preprocess/gsm8k.py --local_save_dir ~/data/gsm8k

该脚本将数据集转换为parquet格式,便于高效读取。预处理逻辑可查看examples/data_preprocess/gsm8k.py

模型准备

下载Qwen2.5-0.5B-Instruct模型作为基础模型:

python3 -c "import transformers; transformers.pipeline('text-generation', model='Qwen/Qwen2.5-0.5B-Instruct')"

如果需要先进行有监督微调(SFT),可参考SFT示例SFT Trainer代码

启动PPO训练

使用PPO算法进行训练,基础命令如下:

PYTHONUNBUFFERED=1 python3 -m verl.trainer.main_ppo \
 data.train_files=$HOME/data/gsm8k/train.parquet \
 data.val_files=$HOME/data/gsm8k/test.parquet \
 data.train_batch_size=256 \
 data.max_prompt_length=512 \
 data.max_response_length=256 \
 actor_rollout_ref.model.path=Qwen/Qwen2.5-0.5B-Instruct \
 actor_rollout_ref.actor.optim.lr=1e-6 \
 actor_rollout_ref.actor.ppo_mini_batch_size=64 \
 actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=4 \
 actor_rollout_ref.rollout.name=vllm \
 actor_rollout_ref.rollout.gpu_memory_utilization=0.4 \
 critic.optim.lr=1e-5 \
 critic.model.path=Qwen/Qwen2.5-0.5B-Instruct \
 algorithm.kl_ctrl.kl_coef=0.001 \
 trainer.logger=console \
 trainer.n_gpus_per_node=1 \
 trainer.total_epochs=15 2>&1 | tee verl_demo.log

训练过程解析

上述命令启动了一个完整的PPO训练流程,关键组件包括:

  1. Actor模型:基于Qwen2.5-0.5B-Instruct,通过RL优化生成回答
  2. Critic模型:评估生成内容的质量,提供价值估计
  3. Reward函数:基于规则的奖励模型,检查答案正确性,代码见verl/utils/reward_score/gsm8k.py

训练过程中,关键日志包括:

  • critic/score/mean:平均奖励分数
  • actor/pg_loss:策略梯度损失
  • critic/vf_loss:价值函数损失
  • response_length/mean:平均回答长度

断点续训与模型合并

训练中断后,可通过以下方式恢复:

python3 -m verl.trainer.main_ppo \
 ... \
 trainer.resume=True \
 trainer.resume_ckpt_path=checkpoints/your_project/your_experiment/global_step_500

训练完成后,合并模型权重:

python3 -m verl.model_merger merge \
 --backend fsdp \
 --local_dir checkpoints/your_project/your_experiment/global_step_1000/actor \
 --target_dir merged_model

第3-4天:性能优化与调参

关键性能指标

训练性能可通过以下指标评估:

  • 每秒处理token数(tokens/s)
  • GPU内存利用率
  • 训练稳定性(奖励分数增长趋势)

开启详细日志以便分析:

actor_rollout_ref.rollout.disable_log_stats=False

推理性能优化

  1. 调整GPU内存利用率
actor_rollout_ref.rollout.gpu_memory_utilization=0.6

对于vLLM后端,该参数控制模型和KV缓存使用的GPU内存比例,推荐设置0.5-0.7。

  1. 增加批处理大小
actor_rollout_ref.rollout.max_num_batched_tokens=4096
  1. 启用序列打包
actor_rollout_ref.model.use_remove_padding=True

该特性通过移除padding token提高GPU利用率,支持Llama、Mistral、Qwen等模型。

训练性能优化

  1. 启用动态批处理
actor_rollout_ref.actor.use_dynamic_bsz=True
critic.use_dynamic_bsz=True

动态批处理根据序列长度自动调整批大小,提高GPU利用率。此时需要设置token限制而非批大小:

actor_rollout_ref.actor.ppo_max_token_len_per_gpu=4096
critic.ppo_max_token_len_per_gpu=8192
  1. 梯度检查点
actor_rollout_ref.model.enable_gradient_checkpointing=True
critic.model.enable_gradient_checkpointing=True
  1. FSDP优化
actor_rollout_ref.actor.fsdp_config.forward_prefetch=True
actor_rollout_ref.actor.strategy="fsdp2"  # 使用FSDP2提升性能

FSDP2相比传统FSDP可降低7%内存使用,提升1.5%吞吐量。

超参数调优

  1. 学习率

    • Actor: 1e-6 ~ 5e-6
    • Critic: 1e-5 ~ 5e-5
  2. PPO参数

    • algorithm.kl_ctrl.kl_coef: 0.001 ~ 0.01(KL惩罚系数)
    • actor_rollout_ref.actor.entropy_coeff: 0.01 ~ 0.1(熵奖励系数)
  3. 批大小关系

    • data.train_batch_size = actor_rollout_ref.actor.ppo_mini_batch_size × 积累步数

第5-6天:分布式训练部署

单机多GPU训练

直接设置GPU数量即可:

python3 -m verl.trainer.main_ppo \
 ... \
 trainer.n_gpus_per_node=4  # 使用4张GPU

多节点训练:Ray集群

  1. 启动Head节点
ray start --head --dashboard-host=0.0.0.0 --port=6379
  1. 启动Worker节点
ray start --address="head_node_ip:6379"
  1. 提交任务
ray job submit --address="http://head_node_ip:8265" \
 --runtime-env=verl/trainer/runtime_env.yaml \
 -- \
 python3 -m verl.trainer.main_ppo \
 trainer.n_gpus_per_node=8 \
 trainer.nnodes=2 \
 ...

云平台部署:SkyPilot

verl提供SkyPilot配置文件,支持AWS、GCP、Azure等云平台一键部署。以GCP为例:

  1. 准备配置文件examples/skypilot/verl-grpo.yaml

  2. 启动集群

export WANDB_API_KEY=your_wandb_key
sky launch -c verl-cluster examples/skypilot/verl-grpo.yaml
  1. 监控集群
sky status --endpoint 8265 verl-cluster

通过浏览器访问Ray Dashboard监控训练进度。

大规模训练配置示例

以Qwen2-7B模型在2节点(每节点8GPU)上的训练为例:

python3 -m verl.trainer.main_ppo \
 data.train_files="['$HOME/data/gsm8k/train.parquet', '$HOME/data/math/train.parquet']" \
 data.val_files="['$HOME/data/gsm8k/test.parquet', '$HOME/data/math/test.parquet']" \
 data.train_batch_size=1024 \
 data.max_prompt_length=1024 \
 data.max_response_length=1024 \
 algorithm.adv_estimator=grpo \
 actor_rollout_ref.model.path=Qwen/Qwen2-7B-Instruct \
 actor_rollout_ref.actor.optim.lr=1e-6 \
 actor_rollout_ref.actor.ppo_mini_batch_size=256 \
 actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=16 \
 actor_rollout_ref.rollout.tensor_model_parallel_size=2 \
 actor_rollout_ref.rollout.name=vllm \
 actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \
 trainer.n_gpus_per_node=8 \
 trainer.nnodes=2 \
 trainer.logger='["console","wandb"]'

完整脚本可参考examples/grpo_trainer/run_qwen2-7b_math.sh

第7天:生产级最佳实践

训练监控与分析

  1. WandB集成
python3 -m verl.trainer.main_ppo \
 ... \
 trainer.logger='["console","wandb"]' \
 trainer.project_name="verl_math_rl" \
 trainer.experiment_name="qwen2-7b-grpo"
  1. 性能分析

使用Nsight Systems捕获性能数据:

nsys profile -o verl_profile python3 -m verl.trainer.main_ppo ...

分析指南见docs/perf/nsight_profiling.md

模型评估

使用提供的评估脚本评估模型性能:

python3 examples/evaluation/evaluate_gsm8k.py --model_path merged_model --dataset_path ~/data/gsm8k/test.parquet

评估指标包括:

  • 准确率(Accuracy)
  • 推理步数(Reasoning Steps)
  • 计算效率(Tokens per Second)

模型部署

  1. vLLM部署
python3 -m vllm.entrypoints.api_server \
 --model merged_model \
 --tensor-parallel-size 2 \
 --port 8000
  1. 集成到应用

使用OpenAI兼容API调用模型:

import requests

response = requests.post("http://localhost:8000/v1/completions",
    json={
        "prompt": "What is 2+2?",
        "max_tokens": 100,
        "temperature": 0.7
    }
)
print(response.json())

高级功能探索

  1. 多轮对话训练

参考SGLang多轮交互示例,支持工具调用能力训练。

  1. 混合流程训练

结合SFT和RL的优势,参考docs/hybrid_flow.rst

  1. 自定义奖励模型

实现自定义奖励函数,参考recipe/entropy/reward.py

总结与后续学习

通过7天的学习,你已掌握verl从安装到生产部署的全流程。关键资源包括:

后续可深入探索:

  • 多模态模型训练
  • 大规模分布式优化
  • 自定义算法实现

verl持续更新中,建议定期查看CONTRIBUTING.md参与贡献或获取最新特性信息。

【免费下载链接】verl verl: Volcano Engine Reinforcement Learning for LLMs 【免费下载链接】verl 项目地址: https://gitcode.com/GitHub_Trending/ve/verl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值