返回Learn

如何调整机器人VLA模型

步骤指南对您的远程操作数据集进行微调的OpenVLA或pi0 数据准备,培训配置,评估和部署.

步骤指南对您的远程操作数据集进行微调的OpenVLA或pi0 数据准备,培训配置,评估,量化和部署在现实硬件上.

预先 12天 更新于2026年4月

1. 前提条件 2. 安装3. 数据集 4. 配置5. 列车6. 监控7. 评估8. 定量9. 部署10. 复制

条件

  • 具有300多个高质量的RLDS格式的远程操作数据集 ([见数据收集教程](T10))
  • 带24GB+VRAM的NVIDIA GPU (LoRA的RTX 4090,A100/H100的完整调整)
  • 配备了310+的 Python,并使用了CUDA 12.1+
  • 熟悉PyTorch和脸变压器
  • 权重与偏差账户 (用于伐木,免费的工业)
  • 在机器人机器上安装ROS2 ([见设置指南](T11))

你将建造什么

您将采用预先训练的VLA模型 (OpenVLA-7B),根据机器人示范数据进行细节调整,通过推广实验评估,量化以实时推断,并将其部署为机器人上的ROS2行动服务器.

维拉细调管道

关于RLDS数据集 300多集

其他

开放VLA / pi0 预训练的7B

其他

或满

其他

评估 部署测试

其他

部署

其他

检查先决条件和GPU设置

在开始之前,请检查您的GPU,CUDA版本和可用的VRAM.

Method Min VRAM GPU Cost Estimate
LoRA fine-tune 24 GB RTX 4090, A5000 $50–150
Full fine-tune 40 GB A100 40GB $150–300
Full fine-tune (multi-GPU) 2x 40 GB 2x A100 $250–400

复制# 验证CUDA和GPU nvidia-smi python3 -c "进口火;打印(f'CUDA: {torch.cuda.is_available() },设备: {torch.cuda.get_device_name(0)},VRAM: {torch.cuda.get_device_properties(0).总_mem / 1e9:.1f}GB') " # 验证CUDA版本 (需要12.1+ nvcc) --版本

**预算提示:**使用Vast.aiLambda Labs 云GPU租.A100 80GB的成本是1.502.50/小时.典型的LoRA细调运行需要612小时,所以仅为GPU而言,预算是1030美元.

其他

安装OpenVLA依赖性

我们建议一个干净的虚拟环境.

复制# 创建虚拟环境 python3 -m venv ~/vla_env源 ~/vla_env/bin/activate # 克隆OpenVLA git 克隆 T17 cd openvla # 安装依赖性 pip 安装 -e ".[all]" # 安装额外的训练依赖性 pip 安装 wandb 加快 peft bitsandbytes pip 安装 flash-attn --no-build-isolation # 登录 wandb 进行实验跟踪 wandb 登录 # 下载预训练的 OpenVLA 检查点 python3 -c "从拥抱_进口快照_下载;快照_((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

其他

准备你的数据集

转换RLDS数据集或LeRobot数据集到OpenVLA训练格式.

复制#将您的RLDS数据集转换为OpenVLA格式 python3脚本/convert_rlds_to_openvla.py \ --input-dir=/datasets/openarm_pick_place_rlds \ --output-dir=/datasets/openarm_openvla \ --image-key="observation/image" \ --state-key="observation/state" \ --action-key="action" \ --language-key="language_instruction" \ \"meta\"#\" 查看转换的数据集\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"

**数据格式检查:**OpenVLA预计图像为224x224RGB (它内部改大小),作为7D连续向量 (6DOF+抓住器) 和每个集中的文本语言指令.

其他

配置训练

创建一个训练配置YAML. 这些超参数为典型的单任务细调运行调整.

复制#保存为配置/finetune_openarm.yaml cat > configs/finetune_openarm.yaml << 'EOF' # OpenVLA 精细调节配置 OpenArm 选择和放置模型:预训练_检查点:检查点/openvla-7b使用_lora: true # 设置为全细调节lora_rank: 32 lora_alpha: 64 lora_dropout: 0.05数据集:数据集_path: ~/datasets/open\_arm_open任务_names: "挑取红块并将其放在绿色目标区"图像_size: 224_dim: 7 # 6 标准连接点 + 1 抓取器_split: 0.9 _lap: 精确_lap: _lap: 4 _lap: _lap: _lap: _lap: _lap: _lap: _lap: _lap: _lap:

**高参数指导:**学习率2e-5是LoRA的安全默认.为了实现完整的细调,使用1e-5.如果500步后训练损失不减少,试用5e-5.位数4的批量8与梯度积累为32个有效批量,这对300500集数据集都很好.

其他

启动精细调节

启动训练运行. 对于单个GPU使用T0;对于多GPU使用T1.

复制#单个GPU (RTX 4090 / A100) python3脚本/finetune.py \ --config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # 多GPU (2x A100) 火运行nproc-per-node=2脚本/finetune.py \ config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # 预期输出: # 10/5000 输出: 2.34 损失: LR: 2.0e-6 时间: 1.2 秒/步骤 # 100/5000 损失: 0.87 步骤: 1.1e-5 步骤 / 步骤 # 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失: 损失:

培训时间估计:

Setup Steps/sec Time for 5K steps GPU Cost
RTX 4090 (LoRA) ~0.8 ~1.7 hours $5–10
A100 40GB (LoRA) ~1.5 ~55 min $2–4
A100 80GB (Full) ~0.6 ~2.3 hours $5–8
2x A100 (Full) ~1.0 ~1.4 hours $6–10

其他

监督培训

在"权重与偏差"中观察损失曲线和梯度规范.

  • ** 损失应该稳步下降** 在第一千二千步,然后是高原
  • 度标准应保持在0.1至10.0之间
  • 任何检查点都能从任何检查点恢复,

复制# 在浏览器中打开 wandb仪表板或直接查看训练日志尾巴-f运行/开臂-选择-位置-v1/training.log # 保存的检查点列表 ls -la运行/开臂-选择-位置-v1/检查点/

如果损失高原超过1.0: 您的数据集可能存在质量问题.检查是否有错误标签的事件,不一致的行动尺度或腐败的图像.试图将学习速度提高到5e-5或减少批量量到4.

其他

评估检查点

在机器人上进行部署评估 (或模拟) 来测量精细调整模型的成功率.

复制# 评估最好的检查点 (最低值损失) python3脚本/evaluate.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --robot-type=openarm \ --robot-port=/dev/ttyUSB0 \ --num-rollouts=20 \ --task="拾起红块,将其放在绿色目标区" # 预期输出: # Rollout 1/20: SUCCESS (14.2s) # Rollout 2/20: SUCCESS (12.8s) # Rollout 3/20: FAILURE 落的对象在步骤 45 # ... # 成功率: 14/20 (70.0%) # Avg完成时间: 13.5s

成功率基准: 6080%在您的第一次细调运行是一个强大的结果.50%以下的数据质量问题或过少的集.80%以上的模型意味着您的模型已经准备好使用,并且可以进行反复改进.

其他

部署量量

完全精确的VLA模型运行在25Hz,这对于实时控制来说太慢.

复制# 量化到INT4使用位数和字节 python3脚本/量化.py \ --checkpoint=run/openarm-pick-place-v1/checkpoints/step-4500 \ --quantization=int4 \ --output-dir=run/openarm-pick-place-v1/quantized \ # 基准推理速度 python3脚本/benchmark_inference.py \ --checkpoint=run/openarm-pick-place-v1/quantized \ --num-steps=100 \ # 预期输出: # 模型大小: 4.2 GB (下降于 14.8 GB) # 传输速度: 18.3 Hz (±1.2 Hz) # 延迟: 54.6 ms 每一步

精度 Model Size Inference Hz Min GPU
FP16 (baseline) 14.8 GB 3–5 Hz 24 GB VRAM
INT8 7.4 GB 8–15 Hz 12 GB VRAM
INT4 4.2 GB 15–25 Hz 8 GB VRAM

其他

通过ROS2在机器人上部署

创建一个ROS2行动服务器,运行量化VLA模型,并以1020Hz发送命令给机器人.

复制# 复制对VLA推理节点的ROS2包 cd ~/ros2_ws/src ros2 pkg 创建--构建类型的修改_python vla_inference \ --dependencies rclpy sensor_msgs std_msgs # 复制推理节点 (简体版下面) cat > ~/ros2_ws/srcvla_inference/vla_inference/vla_inference\self_node.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.

复制# 构建并运行推理节点 cd ~/ros2_ws 列构建 --packages-select vla_inference source install/setup.bash # 启动机器人 +摄像头 + VLA推理 ros2 启动开臂_bringup openarm.launch.py & ros2 运行 vla_inference推理_node

其他

复制:收集更多数据,重新训练

您的第一款模型将有故障模式. 最有效的改进方法是收集针对故障情况的示范,

复制#1. 从评估推广中识别故障模式###常见故障:边缘位置的对象,不寻常的方向,灯光变化,模型未见的对象#2. 收集50-100个针对失败情况的目标示范机器人记录 \ --robot-type=openarm \ --task="pick_red_block_edge_positions" \ --num-episodes=50 \ --output-dir=~/datasets/openarm_pick_place_v2 # 3. 合并与原始数据集 python3脚本/合并_datasets.py \ --datasets ~/datasets/openarm_pick_place ~/datasets/openarm_pick_place_v2 \ --output /datasets/openarm_pick_place_merged # 4. 复制 (从最好的前一个检查点) python3脚本/finetune.py \ --config=configs/finetune_openarm.yaml \ --resume-from=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --output-dir=runs/openarm-pick-place-v2 \ --data.dataset_path=/datasets/openarm_pick_place_merged

转换循环

据证据,DAgger (数据集结) 循环可以提高每个周期的政策性能:部署 →识别故障 →收集目标演示 →重新训练 →评估.大多数团队每次代表的成功率提高了515%,在34周期内达到8595%.

解决问题

训练期间的 CUDA 失记 (OOM)

减少T2到4或2.通过添加T3到配置,启用梯度检查点.对于LoRA,将T4从32降至16.作为最后的手段,使用DeepSpeed ZeRO-3来卸载CPU.

训练损失是NAN

这通常意味着学习率太高或数据腐败.将学习率降低到1e-5.用T5检查数据集中的NaN值. T6的代价可调试数值问题.

模型产生常态/相同的操作

模型可能已经崩到预测平均行动. 检查你的行动空间正常化 (零平均,单元差异). 检查任务描述是否匹配数据收集过程中使用的情况. 尝试增加训练步骤或学习速度.

传导速度太慢,无法实时控制

应用INT4量化 (步骤8).使用T8以实现2030%的速度.考虑在单独的机器上运行推理和通过网络流动操作.手臂操纵的最低目标是10Hz.

量化模型的成功率要低得多

预计有一些质量损失 (15%下降).如果下降超过10%,请试用INT8而不是INT4. 量化时使用校准数据:T9.

相关教程

现在,

收集机器人训练数据

设置远程操作和构建一个质量数据集.

T14) [

雷罗特快速启动

在解决VLA模式之前,要制定更简单的政策 (ACT,传播政策).

T15)

系统安装指南

设置ROS2用于机器人部署和推断节点开发.

常见的问题

修改VLA模型需要多少钱?

典型的细调运行成本为Lambda Labs或Vast.ai等云提供商的GPU计算150400美元.这假设12A100GPU为1248小时.使用LoRA将通过需要更少的内存和更少的训练步骤降低到50150美元.

OpenVLA 和 pi0 之间有什么区别?

开放VLA是一个来自斯坦福的开源7B参数视觉语言行动模型,它将摄像头图像和语言说明作为输入和输出机器人操作. pi0 (来自物理智能) 是基于流量匹配的VLA,它擅长巧妙的操纵.OpenVLA更容易调整; pi0通常在复杂任务上实现更高的成功率.

我需要多少次演示节目来调整VLA?

对于单一任务,300500个高质量的示范是一个好起点.更复杂的任务或多任务细节调节可能需要8001,200+个集.质量比数量更重要.300个清洁的示范比1000个有噪音的更高性能.

我可以在消费者GPU上调整VLA模型吗?

是的,使用LoRA (低级调整) 您可以在RTX 4090 (24 GB VRAM) 或 RTX 3090 上调整OpenVLA. 完全调整需要4080 GB VRAM (A100或多GPU设置).LoRA通常实现了8595%的完全调整性能.

如何获得成功?

对于在分类中的任务 (相同的对象,与训练数据类似的位置),预计在您的第一次细调运行中成功率为6080%.通过反复数据收集和重训 (DAgger式),您可以将这一比例推至8595%.

这篇教程有什么帮助?

👍是的

保持机器人技术的前进

获取最新的机器人部署,数据收集和物理人工智能 到您的收件箱.