当前位置: 首页 > news >正文

VLM-R1 + GRPO 算法完整复现全过程日志

📌 仓库地址:om-ai-lab/VLM-R1: Solve Visual Understanding with Reinforced VLMs

我真 TMD 服了 🤯!

这是我科研以来最离谱的一次环境配置,整整肝了快 10 个小时,只为了跑通一个训练脚本💥。

CUDA 对不上,Triton 编译挂,FlashAttention 报 libc 错误,连 gcc 都要我手动指定版本 🤬。

每一步都像踩雷,报错一个接一个,搞到心态炸裂。

这篇总结就是为下一个走这条路的倒霉蛋准备的,也是写给未来的我:看完再动手,别再踩坑了!


💡 背景介绍

在尝试将 VLM-R1 项目中的 GRPO(Guided Reinforcement Prompt Optimization)算法应用于自己的任务时,我亲身经历了一场旷日持久的环境配置噩梦。整个过程累计耗时接近 10 个小时,其中踩坑无数,特别是在 FlashAttention、GLIBC 版本不匹配、Deepspeed 执行异常、Qwen2.5-VL 兼容问题等方面极其繁琐。

本篇博客将对整个复现过程中的关键步骤和典型问题做一个系统性总结,方便大家(尤其是使用多卡分布式训练、非 root 权限服务器的研究者)少走弯路。


📦 Step 1. 基础环境配置

✅ 环境创建(根据官方文档)

conda create -n vlm-r1 python=3.10
conda activate vlm-r1
bash setup.sh

注意事项:

  • setup.sh 内部包含依赖安装、FlashAttention 编译等多个步骤,不建议手动跳过任何步骤

  • 该脚本会尝试安装 gcc-13,需要提前检查是否具备该编译器环境。


📂 Step 2. 数据准备

根据 readme 文档下载数据:

wget https://huggingface.co/datasets/omlab/VLM-R1/resolve/main/train2014.zip --no-check-certificate
wget https://huggingface.co/datasets/omlab/VLM-R1/resolve/main/rec_jsons_processed.zip --no-check-certificate

根据 run_scripts/run_grpo_rec.sh 中的注释信息修改数据路径:

data_paths="/data1/vincia/VLM-R1/data/rec_jsons_processed/refcoco_train.jsonl"
image_folders="/data1/vincia/VLM-R1/data"

推荐提前检查数据文件是否符合 JSONL 格式、是否存在乱码等问题,否则训练前期直接报错会非常浪费调试时间。


❗ Step 3. 重磅踩坑合集(高能预警⚠️)

⚠️ 1. GLIBC_2.32 not found 报错

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found

原因:系统 GLIBC 版本过低,无法兼容编译好的 FlashAttention2 模块。

解决方案

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found-CSDN博客


⚠️ 2. gcc-13 缺失导致编译失败

FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/gcc-13'

原因:默认在系统路径 /usr/bin/gcc-13 查找 GCC 13 编译器,找不到则报错。

解决方案

FileNotFoundError: ‘/usr/bin/gcc-13‘-CSDN博客


⚠️ 3. GET was unable to find an engine to execute this computation

RuntimeError: GET was unable to find an engine to execute this computation

原因:使用 Deepspeed + FP16 训练时,未能正确识别设备或 CUDA 执行路径异常。

解决方案

RuntimeError: GET was unable to find an engine to execute this computation-CSDN博客


⚠️ 4. Qwen2.5-VL 模块导入失败

ImportError: cannot import name 'Qwen2_5_VLVisionFlashAttention2'

原因:最新的 transformers 版本中可能已经变动接口或移除部分 Qwen2.5 相关方法。

解决方案:回退到官方推荐版本的 transformers:

pip install transformers==4.49.0

⚠️ 5. AutoModel 加载配置类报错

ValueError: Unrecognized configuration class <class 'Qwen2_5_VLConfig'> for this kind of AutoModel: AutoModelForCausalLM

原因:Qwen2.5-VL 模型不兼容 AutoModelForCausalLM 加载器。

解决方案

https://github.com/om-ai-lab/VLM-R1/issues/242#issue-3005082200


🎉 喜提 CUDA out of memory!

在尝试多轮修复之后,当我第一次喜提:

RuntimeError: CUDA out of memory

我居然……感动到流泪 😭第一次这么喜欢这个报错 —— 因为这意味着所有环境相关问题都已解决,模型成功加载,训练终于快要开始了!


✅ 成功运行的最终配置

  • 使用 3090 * 8 的服务器,但 Qwen2.5/VL-3B 模型 + Deepspeed 即使最小 batch size 也容易爆显存。

  • 最终使用了官方提供的 LoRA 启动脚本:run_grpo_rec_lora.sh 成功启动训练。

bash run_grpo_rec_lora.sh

训练相关超参数:

  • per_device_train_batch_size: 尽量设小,防止 OOM

  • num_generations: 控制样本生成数目,直接影响推理阶段显存

  • gradient_accumulation_steps: 适当放大以模拟大 batch 训练

  • 「GRPO训练参数详解:理解Batch构成与生成数量的关系」-CSDN博客


📝 总结 & 建议

  1. 优先复现 Lora 版本,复杂性更低,能快速验证流程是否通畅;

  2. 明确 FlashAttention 所需的 GLIBC、CUDA 环境,建议使用 Docker 固定版本;

  3. 对 Transformers 版本敏感组件进行接口封装,防止 import error;

  4. 每次配置不成功时,尽量使用 最小复现例子 来 isolate 问题,避免在复杂脚本中排查;

  5. 多关注官方 issues 区,比如 #242,可能能救你一命。


如果你也在复现大模型强化学习训练中踩坑,欢迎留言交流,我们一起少走弯路!🛠️🚀

http://www.xdnf.cn/news/1102159.html

相关文章:

  • 随手记录第二十话 -- Python3版本虚拟环境安装与AI的接入使用
  • RuoYi+Uniapp(uni-ui)开发商城系统
  • python学习DataFrame数据结构
  • 数据结构第一章复杂度的认识
  • 【java17】使用 Word 模板导出带替换符、动态表格和二维码的文档
  • iOS 数组如何设计线程安全
  • 提示工程:突破Transformer极限的计算科学
  • 工具分享--IP与域名提取工具
  • Spring 声明式事务:从原理到实现的完整解析
  • 小架构step系列11:单元测试引入
  • 分享|2025年机器学习工程师职业技术证书报考指南
  • 如何使用 Python 删除 Excel 中的行、列和单元格 – 详解
  • 《探索电脑麦克风声音采集多窗口实时可视化技术》
  • xFile:高性能虚拟分布式加密存储系统——Go
  • 上位机知识篇---Git符号链接
  • python的类型注解讲解
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(中)
  • 电力自动化的通信中枢,为何工业交换机越来越重要?
  • NLP_知识图谱_大模型——个人学习记录
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
  • LVS-NAT模式配置
  • Java语言基础
  • Windos服务器升级MySQL版本
  • 从Excel到PDF一步到位的台签打印解决方案
  • 5G标准学习笔记14 - CSI--RS概述
  • 《磁力下载工具实测:资源搜索+高速下载一站式解决方案》
  • P1204 [USACO1.2] 挤牛奶Milking Cows
  • 【Linux】GDB/CGDB 调试器学习笔记
  • 实现在线预览pdf功能,后台下载PDF
  • 【web应用】若依框架中,使用Echarts导出报表为PDF文件