(新手必看)超级详细!!!手把手带你复现OPENVLA(微调+仿真)

参考资料:

参考了如下教程,再结合自己的经历,励志做最好的教程!!

Model 复现系列(一)OpenVLA_openvla复现-CSDN博客

openvla/openvla: OpenVLA: An open-source vision-language-action model for robotic manipulation.

junnannie/OpenVLA: 多模态具身智能大模型 OpenVLA 的复现以及在 LIBERO 数据集上的微调改进

如何快速下载huggingface模型------全方法总结 - 知乎

记录openVLA的LIBERO评估复现过程介绍 OpenVLA

上代理后的检查:

复制代码
 curl ipinfo.io
 env | grep proxy

清除代理:

复制代码
unset http_proxy https_proxy ftp_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY

1. 拉取仓库

shell 复制代码
git clone https://github.com/openvla/openvla.git

仓库/项目文件树的高级概述:

  • prismatic- 封装源;提供模型加载、训练、数据预处理等核心工具
  • vla-scripts/- 用于训练、微调和部署 VLA 的核心脚本。
  • experiments/- 用于评估机器人环境中OpenVLA策略的代码。
  • LICENSE- 所有代码均以MIT许可证发布;祝你黑客愉快!
  • Makefile- 顶层 Makefile(默认支持线条处理------检查和自动修复);根据需要扩展。
  • pyproject.toml- 完整的项目配置细节(包括依赖关系),以及工具配置。

2. 创建conda虚拟环境

什么??如果你告诉我你连conda虚拟环境都不知道是什么的话,请先下载一个conda再来看本教程吧!

最新版最详细Anaconda新手安装+配置+环境创建教程_anaconda配置-CSDN博客

然后终端输入:

bash 复制代码
conda create -n openvla python=3.10 -y
conda activate openvla

3.准备环境

OPENVLA官方所提供的环境如下:

  • PyTorch 2.2.0, torchvision 0.17.0, transformers 4.40.1, tokenizers 0.19.1, timm 0.9.10, and flash-attn 2.5.5

为了遵循官方,我们也采用同样的配置。

首先查看自己电脑的CUDA版本,在这里我的CUDA版本为12.1

去官方下载对应的PYtorch版本吧!点击这里下载

找到官方对应的版本V2.2.0 ,选择对应的CUDA版本号

复制代码
pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu121

cd openvla
pip install -e .

!CAUTION

如果你没有按照官方的版本下,或者说你原本的电脑就存在pytorch的其他版本。同样没关系,不过需要注释掉pyproject.toml中对应的部分

如果你需要进行训练或者微调还需要安装 Flash Attention 2

!CAUTION

Flash Attention 2 是需要硬件支持的,必须是Nvidia 30系列及其以上的显卡才可以

bash 复制代码
pip install packaging ninja
pip install "flash-attn==2.5.5" --no-build-isolation

我在下载flash-attn==2.5.5的时候一直卡住,等了很久直接报错:

说明网络超时,你还得用代理来pip这个链接。这才能安装上flash-attn。(注意自己的torch版本和cuda版本哦!!)

复制代码
pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.5/flash_attn-2.5.5+cu122torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

全部按照好后,我们来进行一下小小的测试看看我们安装是否正确

**测试 Ninja **

复制代码
$ ninja --version; echo $?  

正常输出如下:

测试pytorch

复制代码
python 
import torch 
torch.__version__
print('CUDA可用:', torch.cuda.is_available())

4.下载模型

Huggingface下载地址:openvla (OpenVLA Collaboration)

你可以选择下载预训练模型自行进行微调或者是下载已经微调好的模型进行测试。

这里我选择进行微调所以使用预训练模型openvla-7b

下载模型的方式有很多,由于我使用huggingface的cli工具包下载,并且想在后台默认下载,所以我使用了这个指令

复制代码
# 下载cli工具包
pip install -U huggingface_hub
#添加国内镜像源(建议写道bashrc里面,记得source)
export HF_ENDPOINT=https://hf-mirror.com  
export HF_HUB_DOWNLOAD_TIMEOUT=30
# 下载
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download --resume-download openvla/openvla-7b --local-dir model --local-dir-use-symlinks False 
(或者下载已调好的模型)
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download --resume-download openvla/openvla-7b-finetuned-libero-spatial --local-dir model --local-dir-use-symlinks False 

你可以通过tail -f download.log查看日志,可以通过ps aux | grep huggingface-cli 查看任务进程

5.下载数据集

论文上说数据集有128G比较大,所以下的可能很慢。但是实际去下的时候发现BridgeDataV2竟然变成442G了。

下载指令:

复制代码
wget -c -r -nH --cut-dirs=4 --reject="index.html*" \
https://rail.eecs.berkeley.edu/datasets/bridge_release/data/tfds/bridge_dataset/ \
2>&1 | tee "$LOG_FILE"

6.开始训练

调整好openvla/vla-scripts/finetune.py中的参数

注意数据集存放路径,如果你的GPU显存比较小,应该减少和增加批量

复制代码
python vla-scripts/finetune.py

启动Libero评估

1.安装环境

复制代码
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git
cd LIBERO
pip install -e .

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

!CAUTION

这里有一步操作需要注意:在下载pip install -r experiments/robot/libero/libero_requirements.txt的时候,会自动把numpy升级成2.x版本这会导致与深度学习库不兼容,在运行评估脚本的时候出现报错。简单的解决办法就是,再运行一次,它会帮你下载会原来1.x的numpy

复制代码
cd openvla
pip install -e .

2.下载数据集

openvla/modified_libero_rlds · Datasets at Hugging Face

注意数据集存放的位置,后面需要用到

复制代码
huggingface-cli download --repo-type dataset --resume-download openvla/modified_libero_rlds --local-dir ./ --local-dir-use-symlinks False 

3.启动评估

在experiments/robot/libero/run_libero_eval.py中,修改对应的检查点,以及任务名称

复制代码
@dataclass
class GenerateConfig:
    # fmt: off

    #################################################################################################################
    # Model-specific parameters
    #################################################################################################################
    model_family: str = "openvla"                    # Model family
    pretrained_checkpoint: Union[str, Path] = "/mnt/nvme1n1p1/zzh/openvla/model/openvla-7b-finetuned-libero-spatial"     # Pretrained checkpoint path
    load_in_8bit: bool = False                       # (For OpenVLA only) Load with 8-bit quantization
    load_in_4bit: bool = False                       # (For OpenVLA only) Load with 4-bit quantization

    center_crop: bool = True                         # Center crop? (if trained w/ random crop image aug)

    #################################################################################################################
    # LIBERO environment-specific parameters
    #################################################################################################################
    task_suite_name: str = "libero_spatial"          # Task suite. Options: libero_spatial, libero_object, libero_goal, libero_10, libero_90
    num_steps_wait: int = 10                         # Number of steps to wait for objects to stabilize in sim
    num_trials_per_task: int = 5                     # Number of rollouts per task

    #################################################################################################################
    # Utils
    #################################################################################################################
    run_id_note: Optional[str] = None                # Extra note to add in run ID for logging
    local_log_dir: str = "./experiments/logs"        # Local directory for eval logs

    use_wandb: bool = False                          # Whether to also log results in Weights & Biases
    wandb_project: str = "YOUR_WANDB_PROJECT"        # Name of W&B project to log to (use default!)
    wandb_entity: str = "YOUR_WANDB_ENTITY"          # Name of entity to log under

    seed: int = 7                                    # Random Seed (for reproducibility)

    # fmt: on

然后运行,第一次运行会让你填写你数据集存放的地方,填写数据集所下载的位置即可

复制代码
#链接 libero
export PYTHONPATH="/mnt/nvme1n1p1/zzh/openvla/LIBERO:$PYTHONPATH"
python experiments/robot/libero/run_libero_eval.py

4.实验结果评估

等待运行,装在模型至少需要16G的GPU显存,或者可以使用8bit量化后的模型,官方论文中指到的是8bit量化后模型占用下显存为8G。

如何使用量化后的模型进行加载??

复制代码
pip install bitsandbytes 

但是最新的bitsandbytes 要求pytorch至少>2.3

由于我们之前下载的pytorch版本是2.2.0,所以直接使用该指令会导致系统帮你下载更新的pytorch来满足要求。我尝试寻找旧版本来适配我的pytorch,我尝试了所有适配2.2.0版本pytorch的bitsandbytes,在运行时都会报错。网上提供不少解决方案。除了升级bitsandbytes都试过了,都以失败告终hhhh。

运行结束后,就可以看到结果了。在我设置的参数中num_trials_per_task=5也就是说在libero中的spatial任务中,一共有10个任务,每个任务分别执行5次。最后也就会有50个实验结果。

根据测试日志给出的结果发现

复制代码
# episodes completed so far: 50
# successes: 42 (84.0%)
Current task success rate: 1.0
Current total success rate: 0.84

50次任务中,成功了42次,失败了8次。这与论文中的数据相符

并且在rollout目录中可以看到测试结果: