SuperAPI AI 工具集

fine-tuning-openvla-oft

智能体与模型

查看项目

更新于 10-21 16:23

技能介绍

用途

OpenVLA-OFT 面向机器人动作生成任务,提供 OpenVLA-OFT 与 OpenVLA-OFT+ 的微调与评估工作流,来源于官方 openvla-oft 代码库。它适用于需要视觉与语言条件驱动的机器人动作生成、希望以 LoRA 方式适配 openvla/openvla-7b、并需要官方 LIBERO 或 ALOHA 流程的场景。

主要能力

  • 连续动作头:标准 OpenVLA 将连续动作分词为离散区间,损失精度;OFT 改用专用连续动作头(L1 回归或扩散),同时冻结 VLA 主干并通过 LoRA 适配。
  • LoRA 适配:在 VLA 主干上使用 rank-32 LoRA,无需全量微调。
  • FiLM 条件调制:Feature-wise Linear Modulation,用于 OFT+ 中更强的语言接地。
  • 多图像输入:通过 num_images_in_input 配置 2 或 3 路相机流。
  • 变体区分:OFT(FiLM 关闭、2 张图像,典型用于 LIBERO 仿真);OFT+(FiLM 开启、3 张图像,典型用于 ALOHA 真机)。

使用方式

环境搭建:创建 conda 环境(python=3.10),克隆仓库,安装 PyTorch 2.2.0、torchvision 0.17.0、torchaudio 2.2.0、robosuite 1.4.0,以可编辑模式安装包,并安装 FlashAttention2(flash-attn==2.5.5)。验证版本时预期 PyTorch 2.2.0、PEFT 0.11.1。

LIBERO 评估:安装 LIBERO 依赖后,选择检查点与任务套件,运行 run_libero_eval.py,例如:

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

LIBERO 微调:准备 RLDS 数据集(libero_spatial_no_noops 等),用 torchrun 启动 vla-scripts/finetune.py,设置 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、lora_rank 32 等参数。建议评估 50k、100k、150k 检查点,LIBERO-Goal 可能更早达到峰值,应以实际任务成功率而非仅训练损失选择最佳检查点。

LoRA 合并:使用 vla-scripts/merge_lora_weights_and_save.py,指定 base_checkpoint 与 lora_finetuned_checkpoint_dir。

ALOHA(OFT+):预处理原始演示数据、转换为 RLDS 并注册数据集配置(configs.py、transforms.py、mixtures.py),在 constants.py 设置 ALOHA 常量(NUM_ACTIONS_CHUNK=25、ACTION_DIM=14、PROPRIO_DIM=14、ACTION_PROPRIO_NORMALIZATION_TYPE="BOUNDS")。微调时 use_film True、num_images_in_input 3、batch_size 4。随后在 GPU 机器启动 VLA 服务器(vla-scripts/deploy.py,监听 http://<server-ip>:8777/act),再运行客户端评估 run_aloha_eval.py。

适用场景

  • 目标任务是视觉与语言条件驱动的机器人动作生成。
  • 希望以 LoRA 方式适配 openvla/openvla-7b。
  • 需要 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 评估约 1x A100/A40、~18 GB;LIBERO 微调约 8x A100、~27 GB/GPU;ALOHA 微调(OFT+)约 8x A100、~35 GB/GPU;LoRA 合并约 1x 任意 GPU、~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 fork 绑定。

关键一致性不变量:训练与推理之间必须保持一致,否则会静默失败——动作头(use_l1_regression 与 use_diffusion)、FiLM(use_film)、图像流数量(num_images_in_input)、本体状态(use_proprio)、LoRA rank(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 导入失败可安装 libffi;flash-attn 安装失败需将 TMPDIR 与 PIP_CACHE_DIR 指向同一文件系统并加 --no-cache-dir;EGL_NOT_INITIALIZED 通常为拆卸噪声,除非退出码非零。

HPC/集群:在 Slurm 集群上将缓存路由到 scratch,避免占满 /home 配额(HF_HOME、XDG_CACHE_HOME、PIP_CACHE_DIR、TMPDIR)。使用 conda 时避免叠加集群 Python 模块,通常 module load cuda 即可。

完整性要求:不得编造结果、参数、标识符、引用或统计;无法运行或验证时应明确说明。商业或公开发布前需检查模型与数据集许可。版本相关细节可能过时,应以已安装版本的官方文档为准。涉及费用、共享 GPU、云配额、个人或患者数据以及不可撤销操作前应先询问。

资源

  • 项目网站: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