OpenVla复现

这份文档为记录了详尽的 OpenVLA (Open-Source Vision-Language-Action) 模型推理任务复现记录。OpenVLA 是基于 Llama 2 和 DINOv2/SigLIP 的视觉-语言-动作模型,专为机器人控制任务设计。

这份记录模拟了在 Linux 服务器环境下的完整操作流程,涵盖了从环境配置到最终动作输出的每一个细节。


实验记录:OpenVLA-7B 模型推理复现

日期: 2025-11-28

实验目的: 验证 OpenVLA-7B 模型在给定图像和指令下的推理能力,并解析输出的动作(Action)。

参考项目:
openvla/openvla-7b
openvla

1. 硬件与环境准备 (Hardware & Environment)

OpenVLA-7B 是一个 70 亿参数的模型。为了流畅运行,显存(VRAM)是关键瓶颈。

硬件/软件 配置说明 备注
GPU NVIDIA RTX 3090 (24GB) 若显存 < 16GB,需使用 4-bit 量化
CPU/RAM 32GB+ RAM 模型加载时需要较大的系统内存
OS Ubuntu 20.04 推荐 Linux 环境
Python 3.10 避免版本过低导致的库冲突
CUDA 12.1 配合 PyTorch 版本

1.1 创建虚拟环境

建议使用conda进行环境隔离:

1
2
conda create -n openvla python=3.10 -y
conda activate openvla

1.2 安装核心依赖

OpenVLA 依赖 transformers 库的最新功能以及 bitsandbytes (用于量化)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装pytorch. 以下命令只是⼀个样例,具体的版本要根据这个链接去下载适合你电脑配置的:

# https://pytorch.org/get-started/locally/
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia -y
# 克隆openvla
git clone https://github.com/openvla/openvla.git
cd openvla
# 执⾏下⾯命令需要有梯⼦
pip install -e .
# 安装Flash Attention 2
# 如果遇到困难先输⼊`pip cache remove flash_attn`
pip install packaging ninja
ninja --version; echo $? # Verify Ninja --> should return exit code "0"
pip install "flash-attn==2.5.5" --no-build-isolatio

2.LIBERO下载

LIBERO旨在研究多任务和终身机器人学习问题中的知识转移。成功解决这些问题需要对对象/空间关系的声明性知识以及关于运动/行为的程序性知识。LIBERO提供:

  • 一个程序生成流水线,原则上可以生成无限数量的作任务。
  • 130个任务被分为四个任务套件:LIBERO-空间LIBERO-对象LIBERO-目标LIBERO-100。前三个任务套件具有受控分布转移,意味着它们需要传输特定类型的知识。相比之下,LIBERO-100包含100个作任务,这些任务需要传输纠缠知识。LIBERO-100进一步细分为LIBERO-90用于预训练策略,LIBERO-10用于测试智能体的下游终身学习性能。
  • 五个研究课题。
  • 三种视觉运动政策网络架构。
  • 三种终身学习算法,具有顺序微调和多任务学习基线。

2.1 LIBERO配置

克隆并安装LIBERO仓库

1
2
3
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git
cd LIBERO
pip install -e .

此外,还要安装其他必需的软件包:

1
2
cd openvla
pip install -r experiments/robot/libero/libero_requirements.txt

2.2 启动LIBERO评估

项目Markdown中说明了,他们通过LoRA(r=32)独立对四个LIBERO任务组进行了微调:LIBERO-Spatial、LIBERO-Object、LIBERO-Goal和LIBERO-10(也称为LIBERO-Long)。 四个检查点可在Hugging Face上查看:

libero环境下复现包含4个套件,每个套件10个任务,每个任务50轮推理,推理结束后⾃动开始下⼀个任务的推理。这里我们选择openvla-7b-finetuned-libero-spatial

2.2.1模型下载

方式一:官网下载

方式二:modelscope下载

魔搭社区

1
2
3
4
5
#1.
pip install modelscope
#2.
modelscope download --model zixiaoBios/openvla-7b-finetuned-libero-spatial

2.2.2 启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#进入openvla目录
cd openvla

# Launch LIBERO-Spatial evals
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint openvla/openvla-7b-finetuned-libero-spatial \
--task_suite_name libero_spatial \
--center_crop True
#注意要将模型地址修改为本地存放的地址
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint /hy-tmp/modelscope_cache/models/zixiaoBios/openvla-7b-finetuned-libero-spatial \
--task_suite_name libero_spatial \
--center_crop True

# Launch LIBERO-Object evals
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint openvla/openvla-7b-finetuned-libero-object \
--task_suite_name libero_object \
--center_crop True

# Launch LIBERO-Goal evals
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint openvla/openvla-7b-finetuned-libero-goal \
--task_suite_name libero_goal \
--center_crop True

# Launch LIBERO-10 (LIBERO-Long) evals
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint openvla/openvla-7b-finetuned-libero-10 \
--task_suite_name libero_10 \
--center_crop True

5.结果

✅ 成功测试1 ✅ 成功测试2 ✅ 成功测试3
19 2 3
拿起放在木质橱柜上的那个黑色碗,并将它放到盘子中 拿起放在小烤碗旁边的那个黑色碗,并将它放在盘子中 拿起小烤碗旁边的黑色碗,并把它放到盘子中
✅ 成功测试4 成功测试5 成功测试6
14 8 10
拿起饼干盒旁边的黑色碗,并将它放到盘子中 拿起放在饼干盒上的黑色碗,并把它放到盘子中 拿起木质橱柜最上面抽屉里的黑色碗,并把它放到盘子中

以上的六个测试用例都是成功的测试用例,接下来再展示几个失败的测试用例

❌ 失败测试1 ❌ 失败测试2 ❌ 失败测试3
7 15 20
拿起放在饼干盒上的黑色碗,并将它放到盘子中 拿起炉子上的黑色碗,并将它放到盘子中 拿起木质橱柜上的黑色碗,并将它放到盘子中
失败原因:虽然成功的放到了盘子中,但是模型没有停止输出,导致仿真环境的 Step 达到最大次数,发生了截断 失败原因:对炉子上的黑色碗的位置判断不够准确,当机械臂还没有移动到准确的位置时,就执行了抓取动作 失败原因:虽然成功的放到了盘子中,但是模型没有停止输出,导致仿真环境的 Step 达到最大次数,发生了截断

如果你看不到 gif ,请科学上网 ✅

6. 踩坑与故障排除 (Troubleshooting)

在复现过程中,以下是遇到的问题及解决方案:

6.1 找不到libero模块

报错:No model named ‘libero’

这个报错的核⼼原因是:Python解释器在当前 libero 包(虽然你安装了 openvla 环境的「模块搜索路径」中,找不到 libero-0.1.0 ,但安装路径 /data/sjj/LIBERO 没被当前环境 识别)。

将路径添加到python环境即可

1
2
export PYTHONPATH=/root/LIBERO:$PYTHONPATH
python -c "import libero; print(dir(libero))"

6.2 网络连接超时(*)

1
2
3
OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and /openvla-7b is not the path to a directory containing a file named configuration_prismatic.py.
Checkout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transoffline-mode'.

1.将代码中模型加载路径改为本地模型路径。(推荐、简单)

2.科学上网

6.3 Flash Attention 报错

Flash Attention安装报错,将镜像下载到本地,再进行安装注意下载镜像要检查python、torch、cuda的版本一定要对应。

1
pip install flash_attn-2.7.3+cu12torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

7. 总结 (Summary)

下一步计划:
尝试 OpenVLA 微调(Fine-tuning) 的复现,并且尝试将此模型部署到其它机器人中。


OpenVla复现
https://this-is-kuo.github.io/2025/11/28/OpenVla复现/
作者
Kuo
发布于
2025年11月28日
许可协议