返回Learn

如何在自己的机器人数据集上调整OpenVLA

通过LoRA微调OpenVLA-7B在您自己的RLDS机器人数据集上.

开放VLA-7B是最受欢迎的开放视觉语言行动模型. 这本教程通过基于LoRA的细节调整您自己的RLDS数据集:硬件尺寸,PEFT配置,数据加载器设置,训练和评估在一个持续的事件或真正的机器人.

总时间:大约3小时 (加上训练时间) 难度:高级更新2026年4月

你将实现什么

通过在本教程的结束,你将有一个LoRA精细调节的OpenVLA-7B检查点, 洛拉 (Low-Rank Adaptation) 是大多数团队的最佳选择:它将VRAM需求从100GB减少到24GB左右,快速融合到适度的数据集 (几百集),并产生一个很容易分配的小型适配器.

开放VLA由斯坦福 IRIS实验室和合作伙伴维护.基础7B模型在Open X-Embodiment上进行了预训练,该数据集包含近100万条轨迹,遍及22个实施方案.精细调度将此前的知识集中在您的特定机器人,对象和指示上.

条件

  • **A24GB+VRAM GPU.**A100 40/80GB,H100,RTX 4090或L40S都能工作.RTX 309024GB的功能很强,但紧张.
  • 至少50集 (200+推) 的RLDS数据集,包含图像观测,自感和自然语言任务说明.
  • 熟悉PyTorch,HuggingFace变压器,以及模仿学习的基础知识.
  • Ubuntu 22.04或 20.04,有 CUDA 12.1+ 驱动程序.
  • 免费200GB的磁盘,用于模型重量,检查站和数据集.

如果您还没有数据集,请先收集一个. 查看我们的 [LeRobot录音教程]T18) 或在RCSV数据集中心浏览 [开放数据集]T19.

步骤

  1. 检查硬件和环境

检查你的GPU和CUDA:

```
nvidia-smi
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.version.cuda)"
```

如果你想要T8,你的GPU名称,以及一个匹配PyTorch的CUDA版本.

```
conda create -n openvla python=3.10 -y
conda activate openvla
```
  1. ###安装OpenVLA和依赖

安装OpenVLA代码库和PEFT堆. 查看 [github.com/openvla/openvla]T20) 的上游备用程序,查看最新的安装目标.

```
git clone https://github.com/openvla/openvla.git
cd openvla
pip install -e .
pip install peft bitsandbytes accelerate wandb
```

通过 PEFT 实现LoRA. bitsandbytes 提供了8位定量化,以便在 24 GB 中适合.

  1. 准备您的数据集在RLDS格式中

开放VLA使用RLDS (Reinforcement Learning Datasets) ,这是Google Research支持的TFDS格式.每个集包含一个步骤序列,每个步骤都有T9 (图像,状态),T10,T11T12.

如果您的数据已经在LeRobot或HDF5中,则需要转换.开放的X-Embodiment存储库包含可以调整的参考转换器.一个最小的RLDS构建器看起来像:

```
import tensorflow_datasets as tfds

class MyRobotDataset(tfds.core.GeneratorBasedBuilder):
    VERSION = tfds.core.Version('1.0.0')

    def _info(self):
        return tfds.core.DatasetInfo(
            builder=self,
            features=tfds.features.FeaturesDict({
                'steps': tfds.features.Dataset({
                    'observation': tfds.features.FeaturesDict({
                        'image': tfds.features.Image(shape=(224, 224, 3)),
                        'state': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
                    }),
                    'action': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
                    'language_instruction': tfds.features.Text(),
                    'is_terminal': tfds.features.Scalar(dtype=tf.bool),
                }),
            })
        )
```

编写这个构建器到您的集档中,并将数据集名称注册在OpenVLA数据集配置中. 操作正常化统计数据 (每维度平均/std) 必须计算和存储.

  1. 根据"VLA-7B"的基本重量下载

拉出从 HuggingFace Hub 的基模型:

```
huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b
```

选择将其存储在T13下,以便在项目中重复使用.

  1. 设置LORA

默认开端点是LoRA排名32针对注意力模块.在PEFT中,这看起来像:

```
from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
    r=32,
    lora_alpha=16,
    target_modules="all-linear",
    lora_dropout=0.0,
    bias="none",
    task_type="CAUSAL_LM",
)
```

排名32是50至500集的合理默认. VRAM紧张时降至16;较大的数据集则升至64 . T14的目标符合OpenVLA参考配方;如果内存是限制,则可以限制仅关注的投影.

  1. 启动细调

使用OpenVLA备用程序的参考细节脚本. 精确的入口点在版本中移动. 查看备用程序的 README. 总调用模式是:

```
torchrun --standalone --nnodes 1 --nproc-per-node 1 \
  vla-scripts/finetune.py \
  --vla_path ./openvla-7b \
  --data_root_dir /path/to/rlds \
  --dataset_name my_robot_dataset \
  --run_root_dir ./runs \
  --adapter_tmp_dir ./adapter-tmp \
  --lora_rank 32 \
  --batch_size 16 \
  --grad_accumulation_steps 1 \
  --learning_rate 5e-4 \
  --image_aug True \
  --wandb_project openvla-finetune
```

在单个A10080GB上,每10k步骤预计约1小时.典型的200集数据集在20至40k步骤中融合.

随机产量和颜色的变在50集数据集中会产生真正的差异.

  1. 监视训练

观察WandB或子板中的三个信号: action MSE (您的初始损失), gradient norm (应稳定,不要), per-dimensional action accuracy (代币化行动头的代币准确性).如果行动 MSE平原超过0.1后5k步骤,则您的数据集太小,或者您的语言指令不匹配政策头的培训分布.

  1. 合并LORA并评估

在训练结束时,将LoRA适配器合到基础模型中,以便更快地推断:

```
from peft import PeftModel
from transformers import AutoModelForVision2Seq

base = AutoModelForVision2Seq.from_pretrained('./openvla-7b', torch_dtype=torch.bfloat16)
model = PeftModel.from_pretrained(base, './runs/my_robot_dataset/adapter')
merged = model.merge_and_unload()
merged.save_pretrained('./openvla-7b-my-robot')
```

现在评估:在一个持续的事件上运行合并模型,将预测的行动与基础真相进行比较,或者将其部署到真实机器人,并测量20次实验中任务成功率.对于真实机器人部署,请使用处理图像预处理和行动异常化的OpenVLA推理包裹.

接下来要做什么?

一旦LoRA适配器工作,自然会进行三个后续: (1) 扩展到更多数据添加[Open X-Embodiment]T21) 或其他公共数据集,以为模型提供更广泛的前景, (2) 尝试在80GB的GPU上进行全面的细节调整,如果您有一个,这通常增加了2到5个任务成功百分点,以及 (3) 与其他[VLA模型]T22) Pi-Zero,Octo和RT-2变体都有不同的优势.

如果您的数据集是通过LeRobot收集的,我们的 LeRobot录音教程 涵盖了捕获侧面.

常见故障模式

启动时OOM: 启用8位量化,使用T16或下降批量大小.

** 动作MSE不会降低:** 检查您的动作正常化统计数据是否正确.一个常见的错误是错误分区的计算统计数据.

**政策将机器人推到联合限制:**数据集中的语言指令分布太窄;模型是记忆而不是学习的.

** 推移速度很慢:** 合并LORA后,总是使用T17和bfloat16运行.

入深度:洛拉vs完整的细调vs从零开始

频谱上有三个选择. ** 完整调整** 更新了7B模型的每个参数. 通常在拥有足够的数据 (500+集) 和80GB的GPU时,它产生了最佳任务成功率,因为模型可以将每个表示适应您的实施. ** LORA** 将低级的适配器添加到一个子组层,结基,并快速 konverges 在较小的数据集. 在我们对中型操作数据集的实验中,LoRA在计算的四分之一时达到90到95%的完整调整性能. 从零开始几乎从来没有对VLA尺度模型来说有意义.

第四个一直在获得引力的路径是 DoRA (重量分解低级调整),它将重量分解成大小和方向组件.DoRA在LoRA上添加了少量的参数,并经常将空隙缩小到更进一步的细调.PEFT支持DoRA.

深度潜水:数据集质量超过数据集规模

团队经常在剧集数量上投入太多,在剧集多样性上投入太少. 200 个剧集在 20 个照明和对象姿势变化中超过了 1000 个剧集. 原因是模型理论:VLA细调不是首先学习什么_做 基模型已经知道粗略的操纵先例 它正在学习将政策根植于_你的_摄像头内在,_你的_工作空间,和_你的_语言指令.这些变量中的多样性给了政策更多的自由度,以分离实施与任务.

具体的配方是有效的:在200集内,在20厘米×20厘米的格格上改变对象的初始位置 (最低10个位置),在3种照明条件下记录,并通过同一说明的5个自然语言短语旋转.这在收集过程中大约增加了50%的工作,但显著改善了细调.

入深度:评估是团队错误的地方

最常见的错误是仅仅在同一录音会话中进行的延续节目进行评估. 实际评估有三个层次: (1) 从同一会议中被取消 能力的下限, (2) 从不同的天/照明 实世界强度检查中被取消, (3) 在一个新型任务表达或略新型对象 中进行零截图,这将可用 VLA 与仅进行演示区分开.

常见问题

我需要多少集? 50是不小的结果的最低值. 200是个好目标. 500+为大多数单项任务来说和了LoRA容量.

,通常有助. 7B OpenVLA 背骨有空间吸收每个适配器的多项任务.

** 关于Pi-Zero或Octo?** Pi-Zero是物理智能的相应流量VLA不同的训练配方,通常每集的成功率更高,但需要专有权重.Octo是一个较小的开放模型,可用于研究.

** 推理延迟对我的应用很重要.** 开放VLA-7B推理在单个A100上大约是200ms. 如果这太慢,请看看更小的VLA,量化或行动碎片策略.

相关教程和资源