模型 / 数据集
hiyouga/EasyR1 avatar
hiyouga/EasyR1

EasyR1 评测:多模态强化学习训练,从环境搭建到 GRPO 实战

EasyR1: An Efficient, Scalable, Multi-Modality RL Training Framework based on veRL

5,163 个 Star394 个 ForkPythonApache-2.0

秒懂

它是什么?
EasyR1 是一个基于 veRL 的多模态强化学习训练框架,支持视觉语言模型和多种 RL 算法。本文从架构、安装、运行到局限,逐项拆解它是否值得进入你的技术选型。
适合谁用?
EasyR1 适合需要快速验证 GRPO、DAPO 等算法在视觉语言模型上效果的团队,尤其是已有 veRL 或 vLLM 经验、能接受容器化部署的工程师。它不适合追求极致显存效率或需要生产级稳定 API 的用户,因为全参微调 7B 模型需 8 张 40GB 显卡,且依赖特定版本的 flash-attn 与 vllm。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 16 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

强化学习微调大模型的门槛一直很高,多模态场景更甚。veRL 本身是个高性能框架,但它的设计偏底层,对视觉语言模型的支持需要额外改造。EasyR1 直接 fork 了 veRL,把 Qwen2-VL、Qwen2.5-VL、Qwen3-VL 这类模型的训练路径打通。它面向的是想用 GRPO 或 DAPO 训练视觉模型的算法工程师,这些人通常不关心框架内部如何调度 Ray 任务,只希望给一个数据集和配置文件就能跑起来。项目描述里提到的 Amazon Web Services 使用案例,说明它已经过了真实业务场景的检验。

HybridEngine 与 vLLM 的调度逻辑

效率来自两个设计:HybridEngine 和 vLLM 的 SPMD 模式。HybridEngine 是训练与推理混合引擎,论文 arxiv 编号 2409.19256 给出了完整描述。简单说,它在训练过程中复用推理阶段的激活值,避免重复计算。vLLM 的 SPMD 模式则让推理服务能跨多卡扩展。两者结合,使得 EasyR1 在 rollout 阶段生成样本时,不需要单独起一套推理服务,而是与训练共享显存和计算资源。这个机制对长文本生成尤其关键,因为生成阶段往往是 RL 训练的时间瓶颈。

支持的模型、算法与数据格式

模型侧覆盖了 Llama3、Qwen2、Qwen2.5、Qwen3 语言模型,以及 Qwen2-VL、Qwen2.5-VL、Qwen3-VL 视觉语言模型,还有 DeepSeek-R1 的蒸馏版本。算法列表比多数同类框架丰富:GRPO、DAPO、Reinforce++、ReMax、RLOO,以及较新的 GSPO 和 CISPO。数据方面,README 明确要求特定的格式,并给出了四个参考数据集:纯文本的 math12k、单图的 geometry3k、多图的 journeybench-multi-image-vqa、图文混合的 rl-mixed-dataset。这意味着你不能直接丢一个任意格式的 JSON 进去,必须先按示例调整 schema。

从零开始的安装与运行

官方推荐用预构建的 Docker 镜像,而不是从源码编译。拉取命令是 docker pull hiyouga/verl:ngc-th2.8.0-cu12.9-vllm0.11.0,镜像标签里包含了 PyTorch 2.8.0、CUDA 12.9 和 vLLM 0.11.0 的版本信息。如果你的环境没有 Docker,可以用 Apptainer 拉取同一镜像。源码安装需要 Python 3.9 以上、transformers 4.54.0 以上、flash-attn 2.4.3 以上、vllm 0.8.3 以上,这些依赖版本都偏新,旧环境大概率要升级。跑一个 GRPO 全参训练只需要执行 bash examples/qwen2_5_vl_7b_geo3k_grpo.sh,LoRA 版本则对应 qwen3_vl_4b_geo3k_grpo_lora.sh。训练结束后,用 python3 scripts/model_merger.py --local_dir checkpoints/easy_r1/exp_name/global_step_1/actor 把 checkpoint 合并成 Hugging Face 格式。

硬件需求与显存真相

README 给了一张硬件估算表,数字相当具体。GRPO 全参微调 1.5B 模型在 AMP 精度下需要 2 张 24GB 显卡,但换成 BF16 后 1 张 24GB 就够。7B 模型全参微调在 BF16 下要 4 张 40GB,AMP 下翻倍到 8 张。72B 模型则直接跳到 16 到 32 张 80GB。LoRA 微调能显著降低门槛,7B 模型在 AMP 下只需 2 张 32GB。注意表格标注了 estimated,实际显存占用还会受序列长度、batch size 和 vLLM 缓存影响。另一个细节是 BF16 模式需要显式设置 worker.actor.fsdp.torch_dtype=bf16 和 worker.actor.optim.strategy=adamw_bf16,否则默认走 AMP。

多节点训练的 Ray 流程

70B 以上模型必然涉及多节点。EasyR1 依赖 Ray 做分布式调度,步骤很明确:先在主节点执行 ray start --head --port=6379 --dashboard-host=0.0.0.0,然后每个工作节点用 ray start --address=<head_node_ip>:6379 连接主节点。用 ray status 确认资源池后,只在主节点上运行训练脚本。这套流程本身不复杂,但要求你对 Ray 有一定了解,特别是节点间网络延迟和共享存储的挂载。README 没有交代失败恢复的细节,比如某个节点中途掉线后 Ray 会如何重试,这部分需要参考 veRL 的官方文档。

版本演进与已知边界

项目从 2025 年 4 月的 v0.3.0 起步,6 月发布 v0.3.1 加入多模态 DAPO,9 月的 v0.3.2 引入了 RL Baselines,节奏相当快。但快节奏也意味着接口可能变动,比如 v0.3.2 之前写的自定义数据集脚本,在新版本下可能需要调整字段。几个明显的局限:一是模型支持范围集中在 Qwen 系和 Llama 系,对 Mistral、Gemma 等没有提及;二是训练技巧里没有看到序列打包之外的显存优化手段,比如梯度检查点或 offload;三是依赖版本要求苛刻,flash-attn 2.4.3 和 vllm 0.8.3 的组合在部分老旧 GPU 驱动上可能无法编译。

与 veRL 及 TRL 的差异

EasyR1 的直接上游是 veRL,它的价值在于让 veRL 支持视觉语言模型,并内置了 LoRA 训练和断点恢复功能。如果你只做纯文本模型的 RL,veRL 本身可能更合适,因为 EasyR1 的额外封装会引入一层抽象。另一个对比对象是 Hugging Face 的 TRL,它的 GRPO 实现更容易上手,但 TRL 的推理 rollout 通常依赖外部 vLLM 服务,而 EasyR1 通过 HybridEngine 把推理和训练耦合得更紧。这种耦合带来了效率,也带来了调试难度,当你需要单独定位生成阶段的问题时,混合引擎会让排查变复杂。许可证方面,项目采用 Apache-2.0,对商业使用友好,但派生自 veRL 这一点意味着你需要同时遵守上游的许可条款。

编辑结论

EasyR1 适合需要快速验证 GRPO、DAPO 等算法在视觉语言模型上效果的团队,尤其是已有 veRL 或 vLLM 经验、能接受容器化部署的工程师。它不适合追求极致显存效率或需要生产级稳定 API 的用户,因为全参微调 7B 模型需 8 张 40GB 显卡,且依赖特定版本的 flash-attn 与 vllm。在采纳前,先对照 README 的硬件估算表确认你的 GPU 集群,并检查网络能否稳定拉取 Docker 镜像或 Hugging Face 模型,这两点是多数失败案例的根源。

官方来源

  1. hiyouga/EasyR1 on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
社区笔记

社区笔记