OpenVLA 复现过程

部署运行你感兴趣的模型镜像

一、环境配置要求

硬件要求

  • 显卡显存:需要15.9GB,16GB显存的显卡不够用
  • 保持代码:不要修改任何源代码
  • 操作系统:必须使用Ubuntu 20.04
  • 显卡驱动类型
    • 必须使用desktop version(图形化桌面版本)
    • 支持X11等图形化库
    • 禁止使用service版(服务器版/无头版)
    • 识别特征:驱动名称带--server后缀,如:nvidia-driver-XXX-server
  • 外接显示器:不要使用 VNC 远程而是使用外接的显示器。

环境验证命令

# 检查系统信息
hw@T640$ uname -a
hw@T640$ nvidia-smi

# 检查显卡驱动版本
apt list --installed | grep nvidia-driver
命令行前缀 hw@T640$ 的含义
分解说明:
  • hw:当前登录系统的用户名(username)
  • @:分隔符,表示"在"的意思
  • T640计算机的主机名(hostname)
  • $命令提示符,表示普通用户权限(如果是#则表示root管理员权限)
完整含义:

hw@T640$ 表示:

  • 当前用户 hw
  • 在名为 T640 的计算机上
  • 以普通用户身份执行命令

在实际输入命令时,你只需要输入 $ 后面的内容,前面的 hw@T640$ 是系统自动显示的提示符。


命令详解
1. uname -a
命令作用:

显示详细的系统信息(Unix Name - All)

输出示例:
Linux T640 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
各字段含义:
  • Linux:操作系统内核名称
  • T640:网络节点主机名
  • 5.15.0-91-generic:内核版本号
  • #101~20.04.1-Ubuntu SMP:内核编译信息和版本
  • Thu Nov 16 14:22:28 UTC 2023:内核编译时间
  • x86_64:机器硬件架构(64位x86架构)
  • GNU/Linux:操作系统类型
在实验中的重要性:
  • 验证系统是否为Ubuntu 20.04
  • 确认系统架构兼容性
  • 排查系统级别的问题

2. nvidia-smi
命令作用:

NVIDIA System Management Interface - 显示NVIDIA显卡状态信息

输出示例:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.146.02   Driver Version: 535.146.02   CUDA Version: 12.2    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA RTX 4090    On   | 00000000:01:00.0 Off |                  Off |
|  0%   45C    P8    20W / 450W |    245MiB / 24564MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
关键信息解读:

1. 驱动信息:

  • Driver Version: 535.146.02 - NVIDIA驱动版本
  • CUDA Version: 12.2 - CUDA工具包版本

2. 显卡状态:

  • GPU Name: NVIDIA RTX 4090 - 显卡型号
  • Memory-Usage: 245MiB / 24564MiB - 显存使用情况(已用/总量)
    • 总量24GB:验证是否满足15.9GB要求

3. 性能指标:

  • Temp: 45C - 显卡温度
  • Perf: P8 - 性能状态(P0最高,P12最低)
  • GPU-Util: 0% - GPU利用率
在实验中的关键作用:
  1. 验证驱动类型

    • 检查是否是desktop版本(非server版)
  2. 确认显存容量

    • 必须 ≥15.9GB(16GB不够用)
    • 示例中24GB满足要求
  3. 检查CUDA兼容性

    • 确保CUDA版本与PyTorch-cuda版本匹配
  4. 监控资源使用

    • 在长时间实验(40小时)中监控显卡状态

实验环境验证流程
完整的验证步骤:
# 1. 检查系统基本信息
uname -a
# 输出应包含 Ubuntu 20.04 相关信息

# 2. 检查显卡状态
nvidia-smi
# 验证:驱动版本、显存大小(≥15.9GB)、CUDA版本

# 3. 确认驱动类型
apt list --installed | grep nvidia-driver
# 确认不是 xxx-server 版本
# 如果失败了,则改成如下两步
# apt list --installed > installed.txt
# search in installed.txt about nvidia
为什么这些验证很重要:
  1. 系统兼容性:确保Ubuntu 20.04系统
  2. 驱动正确性:避免使用server版驱动导致图形化仿真失败
  3. 资源充足性:确认显存满足OpenVLA运行需求
  4. 版本匹配:防止CUDA版本不匹配导致的安装错误

这些验证步骤是确保整个OpenVLA实验能够成功运行的基础前提条件。

重要限制与说明

  • 禁止使用虚拟机
  • 禁止使用云服务器(原因:云服务器通常为无头模式,显卡驱动为server版,缺少图形化库,导致Libero仿真环境出错)
  • 不要使用VNC,必须使用外接显示器
  • 推荐平台:gpulab(国内唯一支持可视化、带显卡的Ubuntu服务器)
    • 网址:https://youlika.gpulab.top/

云服务器无头模式原因:厂商为节省资源通常提供无头模式

二、OpenVLA 环境安装

始终保证目前所在的环境是 openvla 而不是 base 有的时候就是会突然自己变成了 base 环境,一定要注意!

1. 创建 conda 环境

conda create -n openvla python=3.10 -y
conda activate openvla
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia -y

这里需要区分使用 conda install 和使用 pip install 的区别

版本兼容性关键

  • 必须确保nvccpytorch-cuda版本完全一致,例如:pytorch-cuda 11.8 + nvcc 11.8
  • CUDA次要版本(如11.0和11.8)通常向后兼容
  • 例如:pytorch-cuda 11.8 可能兼容 11.0-11.8

2. 下载 OpenVLA-7B 模型

初始步骤

cd /mnt/home/youzeshun/models
git clone https://huggingface.co/openvla/openvla-7b

无梯子环境方案

方案一:使用modelscope

pip install modelscope
modelscope download --model zixiaoBios/openvla-7b
# 下载路径:~/.cache/modelscope/hub/models/zixiaoBios/openvla-7b
# 验证大小:du -sh ~/.cache/modelscope/hub/models/zixiaoBios/openvla-7b
# 正确大小应为15G

方案二:使用镜像

sudo apt-get install git-lfs
git clone https://hf-mirror.com/openvla/openvla-7b

3. 安装OpenVLA代码库

git clone https://github.com/openvla/openvla.git
cd openvla
pip install -e .

pip install -e . 的作用

  • pip install -e . = “我要开发这个包,修改代码后立即生效”
  • pip install -r requirements.txt = “我要安装这些现成的包,确保环境一致”

关键安装步骤

# 按照readme而不是requirement.txt安装
pip install packaging ninja
# 检查ninja:ninja --version; echo $? # 返回 exit 0 表示成功

# 关键步骤:flash-attn安装
pip install "flash-attn==2.5.5" --no-build-isolation

重要说明--no-build-isolation参数让flash-attn构建时能识别当前环境已安装的torch,没有此参数会报错找不到pytorch(此步骤极易出错)
难以安装:flash-attn 是非常难以安装的,会出现很多的问题,可以参考这里。

4. 测试OpenVLA

创建main.py文件,将openvla-7b模型下载路径拷贝到main.py的path变量后运行。

from transformers import AutoModelForVision2Seq, AutoProcessor
from PIL import Image
import torch

# path = '~/.cache/modelscope/hub/models/zixiaoBios/openvla-7b/' # 这个写法有问题
path = '/home/ubuntu/.cache/modelscope/hub/models/zixiaoBios/openvla-7b/'
image_path = r"./xxx.png"

processor = AutoProcessor.from_pretrained(path, trust_remote_code=True)
vla = AutoModelForVision2Seq.from_pretrained(
    path,
    attn_implementation="flash_attention_2",
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    trust_remote_code=True
).to("cuda:0")

image: Image.Image = Image.open(image_path)
prompt = "In: what action should the robot take to {<INSTRUCTION>}?\nout"

inputs = processor(prompt, image).to("cuda:0", dtype=torch.bfloat16)
action = vla.predict_action(**inputs, unnorm_key="bridge_orig", do_sample=False)

print(action)
Action输出格式详解
  • 输出:1×7向量
  • 前3个元素:机器人平移部分(x, y, z)
  • 中间3个元素:机器人旋转部分(axis-angle representation)
  • 最后1个元素:夹爪控制

三、LIBERO环境安装与复现

1. 安装LIBERO

环境说明:LIBERO是OpenVLA自带的仿真环境,官方在此环境上进行了微调

# 在conda openvla环境中安装
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git 
cd LIBERO
pip install -e .

# 返回openvla目录安装额外依赖
cd openvla
pip install -r experiments/robot/libero/libero_requirements.txt
# 必要情况下安装指定版本numpy:pip install numpy==1.24.4

2. 验证安装

python -m libero

3. 复现实验详情

实验规模

  • 4个套件,每个套件10个任务
  • 每个任务50轮推理
  • 每个任务结束后自动开启下一个任务推理

时间预估

  • A100上每个套件推理需要10小时
  • 4个套件总共需要40小时

四个套件名称

  • libero-spatial
  • libero-object
  • libero-goal
  • libero-10

4. 泛化能力对比

  • OpenVLA:每个套件需要使用对应的微调模型,套件与模型不匹配则得分为0
  • Pi0模型:一个模型运行在所有套件上,平均分高于OpenVLA
  • 结论:反映出OpenVLA泛化能力不足

5. libero-spatial套件复现步骤

# 下载微调模型
git clone https://hf-mirror.com/openvla/openvla-7b-finetuned-libero-spatial

# 运行评估
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint /mnt/home/youzeshun//.cache/modelscope/hub/models/zixiaoBios/openvla-7b-finetuned-libero-spatial/ \
--task_suite_name libero_spatial \
--center_crop True

上述指令中,pretrained_checkpoint 是本次使用的模型的本地路径,就是上一步中通过 git clone 下载到本地的模型;而 task_suite_name 则是指套件的名称,libero 中包含了四种不同的套件。这里需要注意的是 pretrained_checkpoint 必须和 task_suite_name 一一对应上。

关键要求

  • pretrained_checkpoint必须与task_suite_name一一对应(正如上面所说:每个套件需要使用对应的微调模型,套件与模型不匹配则得分为0)
  • 运行时间:A100上约10小时
  • 输出:生成500个文件

6. 结果文件分析

文件存储位置:文件名如同 rollouts/2025-03-12 的文件夹

文件名格式2025_06_11-16_12_45--episode=1--success=True--task=pick_up_the_black_bowl_between_the_plate_and_the_r.mp4

字段说明

  • episode=1:第一次推理的结果
  • success=True:任务成功标志
  • task=...:任务名称
  • .mp4:表明输出是一段视频

播放方式:ubuntu下需要将mp4文件拖拽到浏览器中播放

问题排查:如果LIBERO下载不完整,可能出现所有success=false

7. 其他套件复现

流程与libero-spatial类似:

  1. 下载对应的微调模型
  2. 修改启动指令中的pretrained_checkpointtask_suite_name,保证其能够一一对应

四、SimplerEnv安装和实验

SimplerEnv 的作用就是为了使程序的调试变得容易。

1. 安装步骤

git clone https://github.com/simpler-env/SimplerEnv --recurse-submodules

# 在conda openvla环境中安装依赖
pip install numpy==1.24.4

cd {this_repo}/ManiSkill2_real2sim  # {this_repo}表示SimplerEnv项目目录
pip install -e . # 这里的 this_repo 指的就是 SimplerEnv 所在的文件夹

cd {this_repo}
pip install -e .

2. Jupyter环境配置

pip install jupyter
jupyter notebook password  # 设置jupyter密码
jupyter notebook --no-browser --port 8080 --ip=0.0.0.0

3. 运行说明

最后运行相应代码即可(占空)

五、技术原理详解

1. OpenVLA与仿真环境交互流程

  1. 仿真环境提供当前摄像头拍摄的图像(image)
  2. OpenVLA根据image和prompt生成下一个action
  3. 仿真环境根据action移动机械臂
  4. 根据机械臂与环境的互动调整可乐罐的位置
  5. 生成新的image给模型
  6. 循环执行,最终每一步的照片组合生成操作视频

2. Action输出格式详解

  • 输出:1×7向量
  • 前3个元素:机器人平移部分(x, y, z)
  • 中间3个元素:机器人旋转部分(axis-angle representation)
  • 最后1个元素:夹爪控制

3. 部署架构

  • 分开部署:OpenVLA与仿真环境可以分开部署
  • API调用:OpenVLA只暴露API给仿真环境调用
  • 优点
    • 一次部署供多人使用
    • 显存效果只算单个人的量
    • 大模型部署的常用方式

六、关键问题与解决方案

  1. 版本兼容性:确保CUDA版本、PyTorch版本、驱动版本完全匹配
  2. 网络问题:无梯子环境下使用modelscope或镜像源
  3. 安装错误:flash-attn必须使用--no-build-isolation参数
  4. 模型匹配:套件与微调模型必须一一对应,否则性能为0
  5. 环境完整性:LIBERO下载不完整会导致所有任务失败

原始笔记:

1. 整个实验过程中不要额外修改源仓库拷贝下来的代码,否则会出现各种错误。
2. 使用 conda 创建一个名为 openvla 的环境。
conda create -n openvla python=3.10 -y
conda activate openvla
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia -y
需要确保 nvcc 和 pytorch-cuda 的版本完全一致,例如 pytorch-cuda 11.8 + nvcc 11.8.
cuda 的次要版本如 11.0 和 11.8 通常是向后兼容的,例如 pytorch-cuda 11.8 可能兼容 11.0-11.8.
3. apt list --installed | grep nvidia-driver
4. hw@T640$ uname -a
5. hw@T640$ nvidia-smi
6. 显存需要是 15.9GB 也就是说买一个 16GB 的显存是不够用的。
7. 环境必须使用 ubuntu 20.04。
8. 图形化仿真的显卡驱动要求:desktop version 其特点是能显示图形化桌面,支持 X11 等图形化库。不要使用 service 版,这个版本又称为服务器版或者无头版,其特征为驱动后面带有 --server 的后缀,如:nvidia-driver-XXX-server.
9. 查看显卡驱动的命令为:apy list --installed | grep nvidia-driver
10. 不要使用虚拟机、不要使用云服务器(云服务器不带图形界面,显卡的驱动版本为 server 版,缺少大量的图形化库,导致 Libero 仿真环境出现错误)。
11. 不要使用 VNC 而是用外接显示器。
12. 云服务器厂商基本上都是提供无头模式,为什么?
13. gpulab 是国内位移支持可视化、带显卡的 ubuntu 服务器,其网址为:https://youlika.gpulab.top/.

1. 安装 openvla 环境:
cd /mnt/home/youzeshun/models
git clone https://huggingface.co/openvla/openvla-7b

2. 没有梯子环境下:
方案一:
pip install modelscope
modelscope download --model zixiaoBios/openvla-7b
假设下载完毕之后的路径为:~/.cache/modelscope/hub/models/zixiaoBios/openvla-7b
我们需要查看其大小:du -sh ~/.cache/modelscope/hub/models/zixiaoBios/openvla-7b
如果是 15G 那就是正确的

方案二:
sudo apt-get install git-lfs
git clone https://hf-mirror.com/openvla/openvla-7b

3. 安装 openvla
git clone https://github.com/openvla/openvla.git
cd openvla
pip install -e .
安装 readme 而不是 requirement.txt 进行安装:
pip install packaging ninja
ninja --version; echo $?
pip install "flash-attn==2.5.5" --no-build-isolation # 这里的 --no-build-isolation 非常的关键,它让 flash-attn 构建是可以识别到当前环境已安装的 torch 如果没有这个参数会报错找不到 pytorch. (这一步非常容易出错)

4. 测试 openvla
创建一个文件 mian.py 将 openvla-7b 模型的下载路径拷贝到 main.py 的变量 path 后运行:
# main.py 的内容如下


5. openvla 每次输入的是 image 和 prompt 输出的是 action 其中 action 为 1*7 的向量,第 1-3 个元素表示机器人的平移部分(x,y,z)第 4-6 个元素表示的是机器人的旋转部分(axis-angle-representation),最后一个元素则表示的是夹爪的控制。


1. 安装 libero 环境
安装此环境的作用就是可视化 vla 的输出,libero 是 openvla 自带的,并且官方在这个环境上进行了微调。
还是在 conda openvla 环境中:
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git 
cd LIBERO
pip install -e .

来到 openvla 所在的环境
cd openvla
pip install -r experiments/robot/libero/libero_requirements.txt
# 必要情况下安装 numpy:pip install numpy==1.24.4

2. 检查 lebero 是否被正确安装
python -m libero

3. 在 libero 中的复现,复现4个套件。每个套件 10 个任务,每个任务 50 轮推理,每个任务结束之后自动开启下一个任务的推理;在 A100 上每个套件推理完成需要 10小时,那么 4 个套件需要 40 个小时。这四个套件分别是:libero-spatial libero-object libero_goal libero_10

4. 在泛化能力上对比 openvla 和 pi0 模型
每个套件都有预制对应的微调后的模型,如果套件与模型没有对应上,那么得分就会直接为 0,这是因为 openvla 的泛化能力不足;而 pi0 模型是一个模型运行在所有套件之上的,并且平均分还高于 openvla。如此可以反映出泛化能力的不足。

5. 复现 libero-spatial 套件中的效果
作者提供了libero环境下的微调后的模型,我们直接使用即可:
git clone https://hf-mirror.com/openvla/openvla-7b-finetuned-libero-spatial
然后启动即可:
python experiments/robot/libero/run_libero_eval.py \
--model_family openvla \
--pretrained_checkpoint /mnt/home/youzeshun//.cache/modelscope/hub/models/zixiaoBios/openvla-7b-finetuned-libero-spatial/ \
--task_suite_name libero_spatial \
--center_crop True

其中,pretrained_checkpoint 是本次使用的模型的本地路径,就是上一步中通过 git clone 下载到本地的模型;而 task_suite_name 则是指套件的名称,libero 中包含了四种不同的套件。这里需要注意的是 pretrained_checkpoint 必须和 task_suite_name 一一对应上。

启动之后大概需要在 A100 上运行 10 个小时,然后生成 500 个文件。需要注意的是如果 libero 下载的不完全,则有可能会出现所有 success=false 的出现。这 500 个文件储存在名为 rollouts/2025-03-12 的文件夹中,从文件名中就可以看出来是否成功。
2025_06_11-16_12_45--episode=1--success=True--task=pick_up_the_black_bowl_between_the_plate_and_the_r.mp4
其中 episode=1 表示的是第一次推理的结果;success=True表示的是成果;而task=pick_up_the_black_bowl_between_the_plate_and_the_r 则是任务名。

如果想要成功播放 mp4 文件,则需要将其拖拽到浏览器中。

6. 其他三个套件的复现与 libero-spatial 类似,流程都是先下载微调之后的模型,然后修改启动指令中的 pretrained_checkpoint 和 task_suite_name 即可。


1. SimplerEnv 的安装和实验
SimplerEnv 的作用就是为了使程序的调试变得容易。其流程如下:
git clone https://github.com/simpler-env/SimplerEnv --recurse-submodules
继续在 conda openvla 环境中安装所需要的依赖:
pip install numpy==1.24.4
cd {this_repo}/ManiSkill2_real2sim // {this_repo} 表示的是项目的目录
pip install -e .
cd {this_repo}
pip install -e .

2. 然后安装 jupyter
pip install jupyter
jupyter notebook password # 这里是设置了 jupyter 的密码
jupyter notebook --no-browser --port 8080 --ip=0.0.0.0

3. 最后运行下面的代码即可(占空)


1. openvla 的原理说明
openvla 与仿真环境的交互过程是仿真环境告诉 openvla 当前摄像头拍摄到的 image。openvla 根据 image 和 prompt 生成下个 action,仿真环境根据 action 移动机械臂,并根据机械臂与环境的互动调整可乐罐的位置,然后生成新的 image 给模型。这个过程经过循环后会得到一系列的 iamge 这些 image 组成了最终的操作视频。
2. 分开部署
openvla 可以与仿真环境分开部署,然后 openvla 只暴露 api 给仿真环境调用,这种大模型的部署方式非常的常用。优点是只需要一次部署就可以供多人使用,显存的效果只算单个人的量。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

04-26
<think>嗯,用户提到了OpenVLA,但之前的引用内容是关于OpenEMMA的,这可能是个混淆或者用户输入错误。需要确认用户真正想了解的是哪个项目。首先,根据用户提供的引用[1],OpenEMMA是一个自动驾驶领域的开源框架,而用户现在询问的是OpenVLA,这可能是一个不同的项目。 可能的情况有两种:一是用户可能将OpenVLA和OpenEMMA混淆了,需要澄清;二是OpenVLA确实存在,但不在当前的知识库中,需要告知用户无法提供相关信息。先检查是否有OpenVLA的相关信息,但根据现有资料,引用中并没有提到OpenVLA,所以可能属于未知项目。 接下来,应该礼貌地指出用户可能存在的混淆,并询问是否需要OpenEMMA的信息,或者提供进一步帮助。同时,根据用户要求生成相关问题,可能需要围绕OpenEMMA展开,假设用户可能对类似的开源项目感兴趣,比如自动驾驶的其他框架或技术文档。 需要确保回答结构清晰,分点说明可能的情况,并提供相关的问题引导用户进一步说明需求。同时,保持中文回答,避免使用Markdown格式,但根据用户之前的示例,可能需要使用特定的格式,但用户当前的指示是用户可见层的回答要结构清晰,所以可能使用列表形式。 另外,用户提到希望生成相关问题,因此需要围绕可能的项目(如OpenEMMA)生成问题,帮助用户深入探索。总结下来,回答应包括:指出可能的混淆,提供OpenEMMA的信息,生成相关问题,并邀请用户澄清需求。</think>根据您的提问和引用内容判断,可能存在项目名称混淆的情况。当前可确认的信息如下: **关于OpenEMMA项目**(引用[1]中描述): - 定位:自动驾驶领域的开源框架 - 核心特点: 1. 提供完整开源的框架、数据集和模型权重 2. 支持学术研究与产业开发的双向赋能 3. 采用社区驱动模式,目前处于早期发展阶段 - 技术优势: $$ P_{safety} = \prod_{i=1}^{n}(1-\epsilon_i) \quad \text{(系统安全概率模型)} $$ 通过模块化设计提升系统整体可靠性 **关于OpenVLA**: 目前无直接可验证信息,可能涉及以下技术方向: 1. 视觉-语言-动作模型(Vision-Language-Action) 2. 多模态机器人控制系统 3. 基于Transformer的端到端学习框架
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值