Volver a Learn

Cómo ajustar un modelo VLA para su robot

Guía paso a paso para ajustar bien OpenVLA o pi0 en su conjunto de datos de teleoperación <unk> preparación de datos, configuración de entrenamiento, evaluación y implementación.

Guía paso a paso para ajustar bien OpenVLA o pi0 en su conjunto de datos de teleoperación preparación de datos, configuración de entrenamiento, evaluación, cuantización y implementación en hardware real.

Avanzado 12 días Actualizado abril 2026

1. Prerequisitos 2. Instalar 3. Dataset 4. Configurar 5. Tren 6. Monitorear 7. Evaluación 8. Cuantificar 9. Despliegue 10. Iterar

Pre-requisitos

  • Un conjunto de datos de teleoperación con más de 300 episodios de alta calidad en formato RLDS (ver tutorial de recopilación de datos)
  • GPU NVIDIA con 24 GB+ VRAM (RTX 4090 para LoRA, A100/H100 para ajuste fino completo)
  • Python 3.10+ con CUDA 12.1+
  • Familiarización con PyTorch y HuggingFace Transformers
  • Cuenta de Pesos y Prejuicios (para la tala, obras gratuitas)
  • ROS2 instalado en su máquina robot (ver guía de configuración)

Lo que construirás

Tomará un modelo VLA pre-entrenado (OpenVLA-7B), lo ajustará a los datos de demostración de su robot, lo evaluará con experimentos de implementación, lo cuantificará para inferir en tiempo real y lo implementará como un servidor de acción ROS2 en su robot.

Línea de regulación de la VLA

Datos de RLDS Más de 300 episodios

¿Qué es esto?

OpenVLA / pi0 7B pre-entrenado

¿Qué es esto?

El tono fino LoRA o lleno

¿Qué es esto?

Evaluar Pruebas de despliegue

¿Qué es esto?

Despliegue ROS2 + INT4

1 de la Comisión

Verifique los requisitos previos y la configuración de la GPU

Verifique su GPU, versión CUDA y VRAM disponible antes de comenzar.

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

Copia# Verificar CUDA y GPU nvidia-smi python3 -c "importar antorcha; imprimir(f'CUDA: {torch.cuda.is_available() }, Dispositivo: {torch.cuda.get_device_name(0)}, VRAM: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f}GB')" # Verificar versión CUDA (necesita 12.1+ nvcc) --versión

** Consejo de presupuesto:** Utilice Vast.ai o Lambda Labs para alquilar GPU en la nube. Un A100 80GB cuesta $ 1.502.50/h. Una ejecución típica de ajuste fino de LoRA dura 612 horas, por lo que el presupuesto de $1030 solo para la GPU.

2 de la Comisión

Instalar dependiencias de OpenVLA

Clone OpenVLA e instale todos los paquetes necesarios.

Copia# Crea entorno virtual python3 -m venv ~/vla_env fuente ~/vla_env/bin/activar # Clone OpenVLA git clone T17 cd openvla # Instala dependencias pip instalar -e ".[all]" # Instala dependencias adicionales de entrenamiento pip instalar wandb acelerar peft bitsandbytes pip instalar flash-attn --no-build-isolation # Ingresa a wandb para el seguimiento del experimento wandb login #Descarga el punto de control OpenVLA pre-entrenado python3 -c "descarga desde abrazos_importación de snapshot_download; snap_(('openvla/openvla-7b',\dir_='checkpoints local/open-7b') "

3 El

Prepara tu conjunto de datos

OpenVLA espera datos en un formato específico. Convierta su conjunto de datos RLDS o conjunto de datos LeRobot al formato de capacitación OpenVLA.

Copia# Convierta tu conjunto de datos RLDS al formato OpenVLA python3 scripts/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\"# Verifique el conjunto de datos convertido "import json, osson = json.open.py.odes.exp.opener'dimen/action/arm_open_data_((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

** Verificación de formato de datos:** OpenVLA espera imágenes como 224x224 RGB (reajusta el tamaño internamente), acciones como vectores continuos 7D (6 DOF + pegamento), y una instrucción de lenguaje de texto por episodio.

4 de la Comisión

Configurar la formación

Crear una configuración de entrenamiento YAML. Estos hiperparámetros se ajustan para una corriente típica de ajuste fino de tarea única.

Copia# Guardar como configuración/finetune_openarm.yaml cat > configs/finetune_openarm.yaml << 'EOF' # OpenVLA Ajuste fino Config OpenArm Pick & Place modelo: pre-entrenado_checkpoint: checkpoints/openvla-7b use_lora: true # Set false for full-tune lora_rank: 32 lora_alpha: 64 lora\rate_dropout: 0.05 datos: Dataset_path: ~/datasets/open\arm_open task_yaml << 'EOF' # OpenVLA Ajuste fino Config OpenArm Pick & Place model: pre-trained_checkpoint: checkpoints/openvla-7b use_lora: true # Set false for full-tune lora_rank: 32 lora_alpha: 64 lora\rate_dropout: ~/datasets/open\arm_open task_description: "Pick up the red block and place it on the green target zone" image

Guía de hiperparámetro: La tasa de aprendizaje 2e-5 es una opción segura para LoRA. Para el ajuste fino completo, utilice 1e-5. Si la pérdida de entrenamiento no disminuye después de 500 pasos, pruebe 5e-5.

5 El

Lanza el ajuste

Para una GPU única, se utiliza T0; para múltiples GPUs, se utiliza T1.

Copia# GPU único (RTX 4090 / A100) python3 scripts/finetune.py \ --config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # Multi-GPU (2x A100) torchrunnproc-per-node=2 scripts/finetune.py \ config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # Expectado de salida: # 10/5000 \ Loss: 2.34 \ LR: 2.0e-6\ DATA: 1.2s/paso # 100/5000 \ Loss: 0.87 \ LR: 1.1e-5 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \

Estimativas de tiempo de formación:

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

6

Monitorear la formación

Observe las normas de la curva de pérdida y gradiente en Pesos y Prejuicios.

  • Las pérdidas deben disminuir constantemente para los primeros 1.0002.000 pasos, luego la meseta
  • La norma de gradiente debe permanecer entre 0,1 y 10,0 picos superiores a 50 indican inestabilidad
  • Los puntos de control se guardan cada 500 pasos puedes reanudar desde cualquier punto de control si el entrenamiento se estrella

Copia # Abre el tablero de control de la barra en el navegador abre la barra # O revise los registros de entrenamiento directamente cola -f ejecuciones/abrebrazo-pick-place-v1/training.log # Lista de puntos de control guardados ls -la ejecuciones/abrebrazo-pick-place-v1/ puntos de control/

Si las placas de pérdida son superiores a 1.0: Su conjunto de datos puede tener problemas de calidad. Compruebe si hay episodios mal etiquetados, escalas de acción inconsistentes o imágenes corruptas. Trate de aumentar la tasa de aprendizaje a 5e-5 o reducir el tamaño del lote a 4.

7

Evaluar el punto de control

Ejecutar una evaluación de implementación en su robot (o en simulación) para medir la tasa de éxito del modelo ajustado.

Copia# Evalúa el mejor punto de control (bajo valor de pérdida) python3 scripts/evaluate.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --robot-type=openarm \ --robot-port=/dev/ttyUSB0 \ --num-rollouts=20 \ --task="Pick up the red block and place it on the green target zone" # Resultado esperado: # Rollout 1/20: SUCCES (14.2s) # Rollout 2/20: SUCCES (12.8s) # Rollout 3/20: FAILURE objeto abandonado en el paso 45 # ... # Rate de éxito: 14/20 (70.0%) # Avg tiempo de finalización: 13.5s

Caso de éxito: 6080% en su primera ejecución de ajuste fino es un resultado fuerte. Por debajo del 50% se sugieren problemas de calidad de datos o pocos episodios. Por encima del 80% se indica que su modelo está listo para su implementación con mejoras iterativas.

8 El

Cuantiza para el despliegue

Los modelos VLA de precisión completa funcionan a 25 Hz, lo que es demasiado lento para el control en tiempo real.

Copie# Cuantice a INT4 usando bitsandbytes python3 scripts/quantize.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --quantization=int4 \ --output-dir=runs/openarm-pick-place-v1/quantized # Velocidad de inferencia de referencia python3 scripts/benchmark_inference.py \ --checkpoint=runs/openarm-pick-place-v1/quantized \ num-steps=100 # Resultado esperado: # tamaño del modelo: 4.2 GB (bajo de 14.8 GB) # velocidad de inferencia: 18.3 Hz (±1.2 Hz) # Latencia: 54.6 ms por paso

Precisión 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

9

Despliegue en Robot a través de ROS2

Crear un servidor de acción ROS2 que ejecuta el modelo VLA cuantizado y envía comandos al robot a 1020 Hz.

Copia# Copiar un paquete ROS2 para el nodo de inferencia VLA cd ~/ros2_ws/src ros2 pkg crear --build-type ament_python vla_inference \ --dependencies rclpy sensor_msgs std_msgs # Copia el guión de inferencia (versión simplificada a continuación) cat > ~/ros2_ws/srcvla_inference/vla_inference/inference\self_node.py.py 'PYEOF' importa rpy de rpy.node.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py Imagen de importación conjunta, de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red de la red.ms

Copia# Construir y ejecutar el nodo de inferencia cd ~/ros2_ws columna construir --paquetes-seleccionar vla_inferencia fuente de instalación/configuración.bash # Lanzar robot + cámaras + VLA inferencia ros2 lanzar brazo abierto_traer brazo abierto.lanzamiento.py & ros2 ejecutar vla_inferencia inferencia_node

10

Iterar: Recoger más datos, Reentrenar

El primer modelo tendrá modos de fallas. La forma más efectiva de mejorar es recopilar demostraciones específicas sobre los casos de fallas y retrenar.

Identificar los modos de falla de los despliegues de evaluación Los fallos comunes: objetos en posiciones de borde, orientaciones inusuales, cambios de iluminación, objetos que el modelo no ha visto. Recoger 50-100 demostraciones específicas para los casos de fallas lerobot registro \ --robot-type=openarm \ --task="pick_red_block_edge_positions" \ --num-episodes=50 \ --output-dir=~/datasets/openarm_pick_place_v2 # 3. Fusión con el conjunto de datos original python3 scripts/merge_datasets.py \ --datasets ~/datasets/openarm_pick_place ~/datasets/openarm_pick_place_v2 \ --output /datasets/openarm_pick_place_merged # 4. Fine-tune otra vez (desde el mejor punto de control anterior) python3 scripts/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

Circuito de iteración

El bucle de DAgger (agregación de Datasets) ha demostrado mejorar el rendimiento de las políticas con cada ciclo: desplegar → identificar fallos → recoger demos dirigidos → Reentrenar → Evalua. La mayoría de los equipos ven una mejora del 515% en la tasa de éxito por iteración, alcanzando el 8595% en 34 ciclos.

Solución de problemas

CUDA Out of Memory (OOM) durante el entrenamiento

Reducir T2 a 4 o 2. Habilitar el punto de control de gradiente agregando T3 a su configuración. Para LoRA, reducir T4 de 32 a 16. Como último recurso, utilizar la descarga de CPU con ZeRO-3 de DeepSpeed.

La pérdida de entrenamiento es NaN

Esto generalmente significa una tasa de aprendizaje que es demasiado alta o los datos están corruptos. Reducir la tasa de aprendizaje a 1e-5. Compruebe los valores NaN en su conjunto de datos con T5. Habilitar T6 en lugar de T7 para deshabilitar los problemas numéricos.

El modelo produce acciones constantes/identes

El modelo puede haber colapsado para predecir la acción media. Verifique si su espacio de acción está normalizado (cero media, variación unitaria). Compruebe si la descripción de tareas coincide con lo que se usó durante la recopilación de datos. Trate de aumentar los pasos de entrenamiento o la tasa de aprendizaje.

La interferencia es demasiado lenta para el control en tiempo real

Aplicar cuantización INT4 (paso 8). Utilice T8 para 2030% de aceleración. Considere ejecutar inferencias en una máquina separada y acciones de transmisión a través de la red. El objetivo mínimo es 10 Hz para la manipulación del brazo.

El modelo cuantizado tiene una tasa de éxito mucho menor

Se espera una cierta pérdida de calidad (15% de caída). Si la caída es más del 10%, pruebe INT8 en lugar de INT4. Utilice datos de calibración durante la cuantización: T9.

Tutoriales relacionados

¿Qué es esto?

Recopilar datos de entrenamiento de robots

El tutorial de pre-requisitos configurar la teleoperación y construir un conjunto de datos de calidad.

[T14] [

LeRobot Quickstart

En el caso de las empresas de la Unión Europea, el objetivo de la política de difusión es el de mejorar la calidad de la información y la calidad de la información.

[T15] [

Guía de configuración de ROS2

Configurar ROS2 para el despliegue de robots y desarrollo de nodos de inferencia.

[T16]

Preguntas frecuentes

¿Cuánto cuesta ajustar un modelo VLA?

Un funcionamiento típico de ajuste fino cuesta $ 150400 en computación de GPU en proveedores de nube como Lambda Labs o Vast.ai. Esto supone 12 GPU A100 durante 1248 horas. El uso de LoRA reduce esto a $ 50150 al requerir menos memoria y menos pasos de entrenamiento.

¿Cuál es la diferencia entre OpenVLA y pi0?

OpenVLA es un modelo de acción de parámetro 7B de código abierto de Stanford que toma imágenes de la cámara y instrucciones de lenguaje como entrada y salidas de acciones de robots. pi0 (de la Inteligencia Física) es un VLA basado en flujo que se destaca en la manipulación hábil. OpenVLA es más fácil de ajustar; pi0 a menudo logra tasas de éxito más altas en tareas complejas.

¿Cuántos episodios de demostración necesito para ajustar el VLA?

Para una sola tarea, 300500 demostraciones de alta calidad son un buen punto de partida. Las tareas más complejas o la ajuste de multitarea pueden necesitar 8001,200+ episodios. La calidad importa más que la cantidad 300 demostraciones limpias superan a las 1.000 ruidosas.

¿Puedo ajustar un modelo VLA en una GPU de consumo?

Sí, utilizando LoRA (Low-Rank Adaptation) se puede ajustar bien OpenVLA en un RTX 4090 (24 GB VRAM) o incluso un RTX 3090.

¿Qué tasa de éxito debería esperar de un modelo de VLA ajustado?

Para las tareas de distribución (los mismos objetos, posiciones similares a los datos de entrenamiento), espere una tasa de éxito de 6080% en su primera carrera de ajuste fino.

¿Fue útil este tutorial?

👍 Sí No

Manténgase al frente en robótica

Obtenga las últimas noticias sobre las implementaciones de robots, la recopilación de datos y la IA física entregadas a su bandeja de entrada.