OpenVLA-OFT 是针对 OpenVLA-OFT 与 OpenVLA-OFT+ 的微调与评估工作流,来自官方 openvla-oft 代码库。它面向机器人动作生成任务,提供从环境搭建到训练、评估、部署的完整流程。
用途 该工作流用于在视觉与语言条件下生成机器人动作。标准 OpenVLA 将连续动作分词为离散区间,会损失精度;OFT 用专用连续动作头(L1 回归或扩散)替代这一做法,同时保持 VLA 主干冻结,并通过 LoRA 进行适配。适用于需要官方 LIBERO 或 ALOHA 流程、希望使用连续动作头而非分词动作、并倾向以 LoRA 方式适配 openvla/openvla-7b 的场景。
主要能力
- 支持 OFT 与 OFT+ 两种变体:OFT 关闭 FiLM、使用 2 路图像(前视 + 腕部),典型用于 LIBERO 仿真;OFT+ 开启 FiLM、使用 3 路图像(高位 + 左腕 + 右腕),典型用于 ALOHA 真机。
- 关键架构选择:VLA 主干上使用 rank-32 LoRA(无需全量微调);连续动作头可选 L1 回归(默认)或扩散头;OFT+ 使用 FiLM(Feature-wise Linear Modulation)增强语言接地;通过 num_images_in_input 配置 2 或 3 路相机输入。
- 提供 LIBERO 预训练检查点评估、LIBERO 微调、ALOHA 数据预处理与 OFT+ 微调、VLA 服务器部署与客户端评估、LoRA 权重合并等流程。
使用方式
快速开始:克隆公开仓库并按官方步骤安装,然后评估预训练 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
环境搭建:创建 conda 环境(python=3.10)、安装 PyTorch 2.2.0 系列与 robosuite 1.4.0,以可编辑模式安装 openvla-oft 包,安装 FlashAttention2(flash-attn==2.5.5),并验证 PyTorch、Transformers、PEFT(预期 0.11.1)版本。
LIBERO 评估:安装 LIBERO 依赖,选择检查点与任务套件(spatial、object、goal、10 或组合),运行 run_libero_eval.py,并用正则解析日志中的每任务成功率。
LIBERO 微调:准备 RLDS 数据集(如 libero_spatial_no_noops 等),用 torchrun 以 8 进程启动 vla-scripts/finetune.py,设置 use_l1_regression、use_film、num_images_in_input、use_proprio、lora_rank 等参数;评估 50k、100k、150k 检查点,按实际任务成功率保留最佳检查点;必要时用 merge_lora_weights_and_save.py 合并 LoRA。
ALOHA(OFT+):预处理原始演示数据、转换为 RLDS 并注册数据集配置、在 constants.py 设置 ALOHA 常量(NUM_ACTIONS_CHUNK=25、ACTION_DIM=14、PROPRIO_DIM=14、归一化类型 BOUNDS),以 use_film=True、num_images_in_input=3 微调;在 GPU 机器上用 vla-scripts/deploy.py 启动 VLA 服务器(监听 http://<server-ip>:8777/act),再运行客户端评估脚本。
适用场景
- 目标任务是带视觉与语言条件的机器人动作生成。
- 需要官方 LIBERO 或 ALOHA 工作流。
- 希望使用连续动作头(L1 回归或扩散)而非分词动作。
- 需要 LoRA 方式适配 openvla/openvla-7b。
限制与注意事项
- 计算需求:LIBERO 评估约需 1x A100/A40、约 16 GB 显存;ALOHA 评估约 18 GB;LIBERO 微调为 8x A100、约 27 GB/GPU;ALOHA(OFT+)微调为 8x A100、约 35 GB/GPU;LoRA 合并约 16 GB。
- 官方基准(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 分支绑定。
- 训练与推理必须保持配置一致:动作头(use_l1_regression 与 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)、评估成功率异常偏低(检查配置一致性)、LIBERO 评估因数据集路径报 EOFError、ALOHA 客户端 ROS 导入 libffi 符号错误、flash-attn 安装失败、EGL 拆除日志噪声等。
- HPC/Slurm 用户可将缓存指向 scratch 以避免占满 /home 配额。
资源 项目网站:https://openvla-oft.github.io/ 论文:https://arxiv.org/abs/2502.19645 仓库:https://github.com/moojink/openvla-oft RLDS 构建器:https://github.com/moojink/rlds_dataset_builder