随着对 R1 兴趣的增长,并研究了 open-r1 和 trl 中 GRPO 算法的优雅实现,我们进行了一次快速实验,探究 R1 范式在多模态模型中的应用。
[!NOTE]
虽然我们的见解可能无法保证完全正确,但我们承诺真实、坦诚地分享。我们欢迎社区反馈和讨论,以改进对多模态推理模型的理解。我们后续将向open-r1提交 Pull Request,以更好地支持社区对多模态 RL 的研究。

我们的工作
- 基于 huggingface/open-r1 和 deepseek-ai/DeepSeek-R1 实现了多模态 R1。
- 集成了 Qwen2-VL 系列、Aria-MoE 以及 transformers 中可用的其他 VLM。
- 开源了首批 8k 专注于数学推理的多模态 RL 训练样本。该数据由 GPT4o 基于 Math360K 和 Geo170K 生成,包含推理路径和可验证答案。我们提供了一个脚本,供用户检查和创建自己的数据。
- 数据集地址:lmms-lab/multimodal-open-r1-8k-verified
- 开源了使用 GRPO 训练的模型。
- 模型地址:lmms-lab/Qwen2-VL-2B-GRPO-8k | lmms-lab/Qwen2-VL-7B-GRPO-8k
见解与未来计划
- 由于许多数学多模态问题是选择题,因此需要进行选项验证。在 issue#56 中已有讨论,我们在 src/open_r1/grpo.py 中自定义了验证逻辑。
- 需要策划可验证的 RL 数据,需进一步探索如何有效将现有数据转化为 RL 数据,并验证 GPT4o 策划的可靠性。
- 当前框架在大规模训练中效率不高。Qwen2-VL-2B 模型在 8 块 H100 GPU 上训练 8k 样本 的 1 个周期 需要 10 小时。因此,有必要研究如何有效扩展训练规模。
- 初始模型(Qwen2-VL-2/7B-Instruct)在我们的实验中没有表现出良好的推理能力。训练期间,模型迅速从“格式”而非“准确性”上获取奖励,这对整个 RL 训练来说不是一个好迹象。我们公开了 wandb 日志 供参考。
[!NOTE]
以下训练命令配置适用于 8 块 H100(80GB)节点。对于不同的硬件和拓扑,您可能需要调整批次大小和梯度累积步数。
在 Qwen2-VL-2B 上运行 GRPO:
cd /home/tiger/multimodal-open-r1
# pip3 install vllm==0.6.6.post1
pip3 install -e ".[dev]"
pip3 install wandb==0.18.3
torchrun --nproc_per_node="${ARNOLD_WORKER_GPU}" \ # 8
--nnodes="${ARNOLD_WORKER_NUM}" \ # 1
--node_rank="${ARNOLD_ID}" \ # 0
--master_addr="${METIS_WORKER_0_HOST}" \ # 127.0.0.1
--master_port="${port_in_cmd}" \ # 12345
src/open_r1/grpo.py \
--deepspeed scripts/zero3.json \
--output_dir checkpoints/Qwen2-VL-2B-GRPO-8k \
--model_name_or_path Qwen/Qwen2-VL-2B-Instruct \
--dataset_name lmms-lab/multimodal-open-r1-8k-verified \
--max_prompt_length 8192 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 1 \
--logging_steps 1 \
--bf16 \
--report_to wandb \
--gradient_checkpointing true \
--attn_implementation flash_attention_2 \
--max_pixels 2359296 \
--save_total_limit 8 \
--num_train_epochs 1 \
--run_name Qwen2-VL-2B-GRPO-8k
更多细节请参考 local_scripts/train_qwen2_vl.sh。
上述脚本适用于多 GPU / 多节点训练。
许多基准测试(如 MMMU 和 AI2D)要求模型直接输出答案,不提供推理步骤。这引发了一个关键的评估问题:模型是真的理解如何推导答案,还是仅仅在猜测或依赖记忆?为了解决这个问题,我们要求模型在给出最终答案之前先生成推理步骤。然后使用 GPT-4o 提取并评分。
我们测试了原始 Qwen2-VL-2B-Instruct 和 Qwen2-VL-7B-Instruct 模型,发现当包含推理步骤时,它们在某些基准测试上的分数有所下降。随后,我们使用相同的评估方法比较了我们模型的分数。我们的模型在基于推理的思维链(CoT)设置下表现更好。我们将此归功于模型在 GRPO 上的训练,这似乎增强了模型处理推理格式的能力,从而获得了更高的分数。
| 基准测试 | Qwen2-VL-2B-Instruct(无推理) | Qwen2-VL-2B-Instruct(有推理) | Qwen2-VL-2B-GRPO-8k(有推理) | Qwen2-VL-7B-Instruct(无推理) | Qwen2-VL-7B-Instruct(有推理) | Qwen2-VL-7B-GRPO-8k(有推理) |
|---|---|---|---|---|---|---|
| MMMU | 39.7 | 31.2 | 35.22 | 50.8 | 41.9 | 49.4 |
| Mathvista-mini | 51.6 | 48.6 | 49.4 | 57.1 | 60.9 | 60.6 |
在我们的日志中,有时会发现模型仍然直接输出答案而没有推理步骤(即使是我们训练过的模型)。我们认为这可能是因为模型不熟悉推理步骤,无法决定如何生成它。
我们使用 lmms-eval 来评估模型,请运行:
bash local_scripts/lmms_eval_qwen2vl.sh
要复现我们在上述基准测试上的结果,请切换到 dev/qwen_cot 分支。
目前,视觉推理任务的评估局限于直接答案格式和简单的解析逻辑。像 mmmu_val、mathvista_testmini 和 mmmu_pro 这样的任务期望直接答案而不是推理痕迹,当前的解析逻辑无法处理逐步推理。我们正在积极努力改进这一局限性,并欢迎社区贡献,以开发一个更全面的视觉推理模型评估框架。
我们提供了首批 8k 专注于数学推理的多模态 RL 训练示例。该数据由 GPT4o 生成。我们提供了脚本,供用户检查和创建自己的数据。
用户可以在 lmms-lab/multimodal-open-r1-8k-verified 查看数据。问题/解答由 GPT4o 根据推理路径和可验证答案生成。原始问题/原始答案来自原始数据集。