SuperAPI AI 工具集

fine-tuning-openvla-oft

智能体与模型

查看项目

更新于 10-30 06:47

技能介绍

用途

OpenVLA-OFT 技能用于微调和评估 OpenVLA-OFT 与 OpenVLA-OFT+ 策略,面向机器人动作生成任务。它基于官方 openvla-oft 代码库,覆盖从空白机器环境搭建到 LoRA 适配、连续动作预测头、FiLM 条件以及多图像输入的完整工作流。

主要能力

  • 连续动作头:标准 OpenVLA 将连续动作分词为离散区间,损失精度;OFT 用专用连续动作头(L1 回归或扩散)替代,同时保持 VLA 主干冻结并通过 LoRA 适配。
  • OFT 与 OFT+ 变体:OFT 关闭 FiLM、使用 2 路图像(前视 + 腕部),典型用于 LIBERO 仿真;OFT+ 开启 FiLM、使用 3 路图像(高位 + 左右腕部),典型用于 ALOHA 真机。
  • 关键架构选择:VLA 主干上 Rank-32 LoRA(无需全量微调);连续动作头默认 L1 回归,可选扩散头;FiLM(Feature-wise Linear Modulation)增强语言 grounding;通过 num_images_in_input 配置 2 或 3 路相机流。
  • 官方基准:在论文设置(seed=7,每任务 50 次试验)下,LIBERO-Spatial 任务特定 97.2%、组合策略 96.8%;LIBERO-Object 97.4%/97.0%;LIBERO-Goal 95.8%/95.4%;LIBERO-10 98.0%/98.0%;平均 97.1%/96.8%。复现结果与 Python 3.10.14、PyTorch 2.2.0、NVIDIA A100 及定制 Transformers fork 绑定。

使用方式

快速开始:克隆公开仓库,按官方步骤安装,然后评估预训练 LIBERO 检查点:

git clone https://github.com/moojink/openvla-oft.git cd openvla-oft python experiments/robot/libero/run_libero_eval.py
--pretrained_checkpoint moojink/openvla-7b-oft-finetuned-libero-spatial
--task_suite_name libero_spatial
--center_crop True
--num_trials_per_task 50
--seed 7

工作流 1:环境搭建

conda create -n openvla-oft python=3.10 -y conda activate openvla-oft git clone https://github.com/moojink/openvla-oft.git cd openvla-oft pip3 install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pip3 install robosuite==1.4.0 pip install -e . pip install packaging ninja pip install "flash-attn==2.5.5" --no-build-isolation

验证版本:PyTorch 期望 2.2.0,PEFT 期望 0.11.1。

工作流 2:在 LIBERO 上评估预训练检查点

安装 LIBERO:

git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git pip install -e LIBERO pip install -r experiments/robot/libero/libero_requirements.txt

可选检查点包括 moojink/openvla-7b-oft-finetuned-libero-spatial、-object、-goal、-10 以及组合版 spatial-object-goal-10。运行评估后可用正则解析日志中的每任务成功率。

工作流 3:在 LIBERO 上微调

使用 RLDS 数据集(libero_spatial_no_noops 等),通过 torchrun 启动训练:

torchrun --standalone --nnodes 1 --nproc-per-node 8 vla-scripts/finetune.py
--vla_path openvla/openvla-7b
--data_root_dir /PATH/TO/RLDS/DATASETS/
--dataset_name libero_spatial_no_noops
--run_root_dir /YOUR/CHECKPOINTS/
--use_l1_regression True
--use_diffusion False
--use_film False
--num_images_in_input 2
--use_proprio True
--batch_size 8
--learning_rate 5e-4
--num_steps_before_decay 100000
--max_steps 150005
--save_freq 10000
--save_latest_checkpoint_only False
--image_aug True
--lora_rank 32
--wandb_entity YOUR_WANDB_ENTITY
--wandb_project YOUR_WANDB_PROJECT

建议评估 50k、100k、150k 检查点,LIBERO-Goal 可能更早达到峰值。合并 LoRA:

python vla-scripts/merge_lora_weights_and_save.py
--base_checkpoint openvla/openvla-7b
--lora_finetuned_checkpoint_dir /PATH/TO/CHECKPOINT_DIR

工作流 4:在 ALOHA 上训练与评估 OFT+

预处理原始数据、注册 RLDS 数据集配置、以 FiLM 和 3 路图像微调 OFT+,然后在 GPU 机器启动 VLA 服务器(监听 http://<server-ip>:8777/act),最后运行客户端评估。ALOHA 常量默认 NUM_ACTIONS_CHUNK=25、ACTION_DIM=14、PROPRIO_DIM=14、归一化类型 BOUNDS。

适用场景

  • 目标任务是带视觉与语言条件的机器人动作生成;
  • 偏好对 openvla/openvla-7b 进行 LoRA 适配;
  • 需要 OpenVLA-OFT 论文的官方 LIBERO 或 ALOHA 工作流;
  • 希望使用连续动作头(L1 回归或扩散)而非分词动作。

替代方案:需要不同 VLA 架构(pi0/pi0.5)时用 fine-tuning-serving-openpi;需要 NVIDIA Cosmos Policy 栈时用 evaluating-cosmos-policy;需要无机器人动作头的通用 LLM 微调时另选。

限制与注意事项

计算需求:LIBERO 评估 1x A100/A40 约 16 GB;ALOHA 评估约 18 GB;LIBERO 微调 8x A100 约 27 GB/GPU;ALOHA 微调(OFT+)8x A100 约 35 GB/GPU;LoRA 合并 1x 任意 GPU 约 16 GB。

关键不变量:训练与推理之间必须保持一致,否则会静默失败——动作头(use_l1_regression vs use_diffusion)、FiLM、图像流数量、proprio、LoRA rank、裁剪(训练 image_aug=True 对应评估 center_crop=True)、动作块(num_open_loop_steps ≈ NUM_ACTIONS_CHUNK)、unnorm_key。

常见问题:跨 GPU 类型迁移检查点后动作质量下降需重新合并 LoRA;动作尺度错误需检查 unnorm_key;评估成功率异常低多因缺少 center_crop=True;LIBERO 评估 EOFError 需设置 LIBERO_CONFIG_PATH;ALOHA 客户端 ROS 导入失败需 conda install -c conda-forge libffi;flash-attn 安装失败需统一 TMPDIR 与 PIP_CACHE_DIR;EGL_NOT_INITIALIZED 通常为拆除噪声。HPC/Slurm 用户应将缓存指向 scratch。