verl安装与验证:5分钟快速跑通SFT示例
1. 引言:为什么选择verl做SFT?
在大语言模型(LLM)的后训练流程中,监督微调(Supervised Fine-Tuning, SFT)是让模型从“通用知识掌握者”转变为“专业任务执行者”的关键一步。而如何高效、稳定地完成这一步,是每个开发者关心的问题。
verl正是为了应对这一挑战而生。它是由字节跳动火山引擎团队开源的强化学习训练框架,专为大型语言模型设计,同时也是HybridFlow 论文的官方实现。虽然它的核心目标是支持复杂的RL训练流程,但其模块化架构和高性能特性,也让它成为运行SFT任务的理想选择。
本文将带你用不到5分钟的时间,完成 verl 的安装与基础验证,并成功跑通一个标准的SFT示例。无论你是刚接触LLM微调的新手,还是希望快速搭建实验环境的工程师,都能从中获益。
你将学到:
- 如何快速安装 verl 并验证环境
- SFT训练的基本命令结构
- 一键启动一个完整的SFT微调流程
- 常见问题排查技巧
2. verl 简介:不只是为RL准备的框架
尽管 verl 主打的是强化学习训练场景,但它内置的强大分布式训练能力、灵活的设备映射机制以及对主流模型的良好支持,使其同样适用于监督微调任务。
2.1 核心优势一览
| 特性 | 说明 |
|---|---|
| 高性能吞吐 | 支持FSDP2、Liger-Kernel等优化技术,显著提升训练速度 |
| 模块化设计 | 解耦数据、模型、训练器,易于扩展和定制 |
| 多并行策略支持 | 支持Tensor Parallelism、Sequence Parallelism、FSDP混合使用 |
| HuggingFace友好 | 可直接加载HuggingFace格式模型,无缝集成现有生态 |
| 易于部署 | 提供清晰API和配置系统,支持YAML或命令行参数驱动 |
这些特性使得 verl 不仅适合复杂RLHF流程,在简单的SFT阶段也能发挥出色的性能表现。
3. 安装与环境验证
我们采用最简洁的方式进行安装,确保你能快速进入实操环节。
3.1 创建独立Python环境(推荐)
# 使用conda创建虚拟环境 conda create -n verl python=3.10 conda activate verl建议使用 Python 3.10+ 和 PyTorch 2.3+ 环境以获得最佳兼容性。
3.2 克隆仓库并安装依赖
# 克隆 verl 项目 git clone https://gitcode.com/GitHub_Trending/ve/verl cd verl # 安装核心依赖 pip install -r requirements.txt # 安装推理相关依赖(用于后续生成测试) pip install -r requirements_sglang.txt3.3 验证安装是否成功
进入Python交互环境,执行以下操作:
import verl print(verl.__version__)如果输出类似0.1.0或具体版本号,则表示安装成功。
成功提示:若无报错且能正常打印版本号,说明 verl 已正确安装。
4. 快速跑通SFT示例
现在我们来运行一个真实的SFT训练示例,使用 Qwen2.5-0.5B-Instruct 模型在 GSM8K 数学推理数据集上进行微调。
4.1 数据准备
verl 推荐使用 Parquet 格式存储训练数据。我们可以先下载并预处理 GSM8K 数据集:
cd examples/data_preprocess python3 gsm8k.py --local_dir ~/data/gsm8k该脚本会自动下载原始数据并转换为train.parquet和test.parquet文件,存放于~/data/gsm8k目录下。
4.2 启动SFT训练任务
返回根目录,使用torchrun启动单机多卡训练任务:
#!/bin/bash set -x nproc_per_node=4 # 根据你的GPU数量调整 save_path="./checkpoints/sft_qwen_05b" torchrun --standalone --nnodes=1 --nproc_per_node=$nproc_per_node \ -m verl.trainer.fsdp_sft_trainer \ data.train_files=$HOME/data/gsm8k/train.parquet \ data.val_files=$HOME/data/gsm8k/test.parquet \ data.prompt_key=question \ data.response_key=answer \ data.micro_batch_size_per_gpu=4 \ data.max_length=2048 \ model.partial_pretrain=Qwen/Qwen2.5-0.5B-Instruct \ model.strategy=fsdp2 \ model.enable_gradient_checkpointing=true \ optim.lr=1e-4 \ optim.warmup_steps_ratio=0.1 \ optim.clip_grad=1.0 \ trainer.total_epochs=3 \ trainer.project_name=gsm8k-sft \ trainer.default_local_dir=$save_path \ trainer.experiment_name=sft-qwen25-05b \ trainer.logger=console参数说明(小白友好版):
data.train_files:训练数据路径prompt_key/response_key:指定输入问题和期望回答的字段名micro_batch_size_per_gpu:每张GPU上的小批量大小model.partial_pretrain:要加载的HuggingFace模型名称model.strategy=fsdp2:启用PyTorch最新的FSDP2分布式策略enable_gradient_checkpointing:开启梯度检查点节省显存optim.lr:学习率设置trainer.total_epochs:训练轮数
5. LoRA微调模式(资源有限时推荐)
如果你的GPU资源有限(如单卡3090/4090),建议使用LoRA方式进行微调,大幅降低显存占用。
5.1 LoRA训练命令示例
torchrun --nproc_per_node=1 \ -m verl.trainer.fsdp_sft_trainer \ data.train_files=$HOME/data/gsm8k/train.parquet \ model.partial_pretrain=Qwen/Qwen2.5-0.5B-Instruct \ model.lora_rank=32 \ model.lora_alpha=16 \ model.target_modules=all-linear \ data.micro_batch_size_per_gpu=2 \ optim.lr=2e-5 \ trainer.total_epochs=2 \ trainer.default_local_dir=./checkpoints/lora_sft小贴士:LoRA只更新低秩矩阵,显存消耗可减少60%以上,非常适合中小规模模型快速迭代。
6. 性能优化建议(进阶可选)
为了让你的SFT训练更快更稳,这里提供几个实用的优化技巧。
6.1 启用Liger-Kernel加速
Liger-Kernel 是一种针对Transformer结构优化的融合内核库,能显著提升训练吞吐量。
pip install liger-kernel然后在训练命令中加入:
model.use_liger=true \ model.use_remove_padding=true \实测效果:在A100上可提升约25%的tokens/sec吞吐量。
6.2 启用BF16混合精度训练
对于支持bfloat16的GPU(如A100/H100),建议开启混合精度:
model.fsdp_config.model_dtype=bf16 \ optim.use_fused_adam=true这不仅能加快计算速度,还能减少显存占用。
6.3 多节点训练扩展(集群用户)
如果你有多个节点,可以通过SLURM或直接指定rdzv_endpoint方式扩展训练规模:
--nnodes=2 --nproc_per_node=8 \ --rdzv_backend=c10d \ --rdzv_endpoint=node0:29500配合FSDP2策略,可在大规模集群上实现线性扩展。
7. 常见问题与解决方案
7.1 ImportError: No module named 'verl'
原因:未正确安装或未在项目根目录运行。
解决方法:
- 确保已执行
pip install -e .(推荐) - 或将当前路径添加到PYTHONPATH:
export PYTHONPATH=$(pwd):$PYTHONPATH
7.2 CUDA Out of Memory (OOM)
常见于全参数微调时
解决方案组合拳:
model.enable_gradient_checkpointing=true \ data.micro_batch_size_per_gpu=2 \ model.lora_rank=32 # 改用LoRA优先考虑使用LoRA + 梯度检查点 + 减小batch size三件套。
7.3 训练速度慢
检查以下几点:
- 是否启用了
use_liger=true - GPU利用率是否偏低(可用
nvidia-smi dmon查看) - 数据加载是否瓶颈(建议使用Parquet格式)
推荐搭配
balance_dp_token=true参数均衡不同GPU间的token负载。
8. 总结:5分钟上手SFT全流程回顾
1. 我们完成了什么?
本文带你一步步完成了 verl 的完整安装与SFT示例验证,包括:
- 成功安装 verl 并验证导入
- 准备GSM8K数据集并完成预处理
- 运行了一个标准的SFT训练任务
- 了解了LoRA微调的轻量级替代方案
- 掌握了常见问题的排查思路
整个过程控制在5分钟左右,真正实现了“开箱即用”。
2. 下一步你可以做什么?
- 尝试用自己的数据集替换GSM8K,只需修改字段名即可
- 在更大模型(如7B级别)上测试LoRA效果
- 结合TensorBoard或Wandb进行训练可视化
- 将训练好的模型导出并在vLLM中部署推理
verl 不仅是一个RL框架,更是你开展LLM后训练工作的全能工具箱。无论是SFT、DPO还是PPO,它都提供了统一、高效的接口支持。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。