如何在自己的机器人数据集上调整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的磁盘,用于模型重量,检查站和数据集.
如果您还没有数据集,请先收集一个.
步骤
- 检查硬件和环境
检查你的GPU和CUDA:
```
nvidia-smi
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.version.cuda)"
```
如果你想要
```
conda create -n openvla python=3.10 -y
conda activate openvla
```
- ###安装OpenVLA和依赖
安装OpenVLA代码库和PEFT堆
```
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 中适合.
准备您的数据集在RLDS格式中
开放VLA使用RLDS (Reinforcement Learning Datasets)
如果您的数据已经在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) 必须计算和存储.
- 根据"VLA-7B"的基本重量下载
拉出从 HuggingFace Hub 的基模型:
```
huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b
```
选择将其存储在
- 设置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 .
- 启动细调
使用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步骤中融合.
随机产量和颜色的
- 监视训练
观察WandB或
- 合并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) 扩展到更多数据
如果您的数据集是通过LeRobot收集的,我们的 LeRobot录音教程 涵盖了捕获侧面.
常见故障模式
启动时OOM: 启用8位量化,使用
** 动作MSE不会降低:** 检查您的动作正常化统计数据是否正确.一个常见的错误是错误分区的计算统计数据.
**政策将机器人推到联合限制:**数据集中的语言指令分布太窄;模型是记忆而不是学习的.
** 推移速度很慢:** 合并LORA后,总是使用
入深度:洛拉vs完整的细调vs从零开始
频谱上有三个选择. ** 完整调整** 更新了7B模型的每个参数. 通常在拥有足够的数据 (500+集) 和80GB的GPU时,它产生了最佳任务成功率,因为模型可以将每个表示适应您的实施. ** LORA** 将低级的适配器添加到一个子组层,
第四个一直在获得引力的路径是 DoRA (重量分解低级调整),它将重量分解成大小和方向组件.DoRA在LoRA上添加了少量的参数,并经常将空隙缩小到更进一步的细调.PEFT支持DoRA.
深度潜水:数据集质量超过数据集规模
团队经常在剧集数量上投入太多,在剧集多样性上投入太少. 200 个剧集在 20 个照明和对象姿势变化中超过了 1000 个剧集. 原因是模型理论:VLA细调不是首先学习什么_做
具体的配方是有效的:在200集内,在20厘米×20厘米的格格上改变对象的初始位置 (最低10个位置),在3种照明条件下记录,并通过同一说明的5个自然语言短语旋转.这在收集过程中大约增加了50%的工作,但显著改善了细调.
入深度:评估是团队错误的地方
最常见的错误是仅仅在同一录音会话中进行的延续节目进行评估. 实际评估有三个层次: (1) 从同一会议中被取消
常见问题
我需要多少集? 50是不小的结果的最低值. 200是个好目标. 500+为大多数单项任务来说
** 关于Pi-Zero或Octo?** Pi-Zero是物理智能的相应流量VLA
** 推理延迟对我的应用很重要.** 开放VLA-7B推理在单个A100上大约是200ms. 如果这太慢,请看看更小的VLA,量化或行动碎片策略.







