La matriz de entrenamiento de AY-Robots con cinco políticas como filas y cuatro brazos robóticos como columnas, cada celda un enlace a una guía de ajuste fino específica
Pi0.5Coincidencia de FlujoEntrenamiento VLALeRobotAjuste Fino

¿Cómo Entrenar Pi0.5 con tus Propios Datos de Robot?

AY-Robots ResearchAugust 23, 202616 min de lectura

Ajusta finamente Pi0.5, el VLA de coincidencia de flujo de Physical Intelligence, con tus propios datos de robot. Comandos reales para openpi y lerobot pi05, trampas de formato de conjunto de datos, límites de VRAM y latencia.

Pi0.5 es el modelo al que recurrir cuando una política tiene que funcionar en una habitación que nunca ha visto. También es la más complicada de las cinco políticas entrenables aquí para ajustar manualmente: el repositorio upstream prioriza JAX, el puerto de LeRobot movió el despliegue fuera de lerobot-record en la versión 0.6.0 e hizo que la instalación base fuera demasiado pequeña para entrenar, y un ajuste completo no cabe en una 4090. A continuación: lo que la coincidencia de flujo cuesta en inferencia, las dos rutas de comando y el número de 485 ms que decide si el resultado es utilizable.

Lo que necesita saber

  • Un VLA de coincidencia de flujo: un VLM PaliGemma de 3B más un experto en acciones de 300M que decodifica fragmentos de acciones continuas. Dos rutas para ajustarlo, openpi y LeRobot pi05, con una diferencia de 0.65 puntos en el promedio de LIBERO.
  • El ajuste completo requiere más de 70 GB de VRAM. openpi lista LoRA en 22.5 GB, solo en su ruta JAX.
  • El conjunto de datos debe ser LeRobotDataset v3.0 con cuantiles q01 y q99 en meta/stats.json, o el primer lote fallará.
  • Verifique su versión de lerobot primero: 0.6.0 hizo que el paquete base fuera ligero y movió el despliegue fuera de lerobot-record.
  • Aquí se ejecuta a 485 ms por paso de acción, requiere 50 episodios y cuesta entre 4 y 12 USD por ejecución.

Qué es realmente Pi0.5

Physical Intelligence publicó pi0 en octubre de 2024: un modelo de visión-lenguaje-acción de coincidencia de flujo basado en un VLM preentrenado: PaliGemma con 3 mil millones de parámetros más un experto en acciones de 300M inicializado desde cero, 3.3 mil millones en total. El artículo informa sobre el preentrenamiento con más de 10,000 horas de datos de robots en 7 configuraciones de robots y 68 tareas. Más información en el artículo de pi0.

Pi0.5 (arXiv 2504.16054, 22 de abril de 2025) mantiene ese esqueleto y cambia la dieta de entrenamiento: datos web, detección de objetos, instrucciones verbales de humanos que entrenan al robot, etiquetas de subtareas, datos de múltiples encarnaciones de robots en muchos hogares. El resultado es un robot limpiando cocinas en casas que no estaban en el conjunto de entrenamiento. El README de openpi añade un detalle que el título no menciona: el pi0.5 lanzado fue entrenado con aislamiento de conocimiento (arXiv 2505.23705).

Propiedadpi0pi0.5
Variante del backbone VLMgemma_2b (PaliGemma)gemma_2b (PaliGemma)
Variante del experto en accionesgemma_300mgemma_300m
action_dim3232
horizonte de acción predeterminado5050
max_token_len48200
entrada de estado discretofalsetrue, estado discretizado en compartimentos en el prompt
Punto de control basegs://openpi-assets/checkpoints/pi0_basegs://openpi-assets/checkpoints/pi05_base
Lo que es público no es el artículo completo

El README de openpi es explícito: el repositorio solo soporta el cabezal de coincidencia de flujo, tanto para el entrenamiento como para la inferencia de pi0.5. El artículo describe dos etapas y el código solo implementa la segunda: el pre-entrenamiento representa cada acción como tokens discretos a través del tokenizador FAST, y en el despliegue el modelo infiere una subtarea de alto nivel antes de cada fragmento de acción. Ninguna de estas está en el repositorio. La tarjeta lerobot/pi05_base proporciona la misma lista y añade RL, aunque el artículo de pi0.5 no describe ninguna etapa de aprendizaje por refuerzo. El puerto de LeRobot hereda ese alcance, al igual que cada entrenador alojado en él, incluyendo el de aquí. La licencia también está dividida: la página de documentación de pi05 dice Apache 2.0, la tarjeta lerobot/pi05_base está etiquetada como license: gemma.

Qué cambia la coincidencia de flujo en el entrenamiento y la inferencia

Una política que puedes entrenar en un SO-100 o bien regresa acciones directamente (ACT) o las tokeniza y decodifica autorregresivamente (pi0-FAST). El ajuste de flujo no hace ninguna de las dos cosas: aprende un campo vectorial que transporta el ruido a un fragmento de acción, y luego lo integra. El artículo de pi0 utiliza 10 pasos de integración con un tamaño de paso de 0.1; la configuración pi05 de LeRobot mantiene el mismo num_inference_steps: int = 10.

  • Entrenamiento: la pérdida regresa un fragmento de acción ruidoso. Sin tokenizador que ajustar, sin discretización de tus ángulos de articulación.
  • Inferencia: un fragmento cuesta diez pasadas hacia adelante a través del experto en acciones. Esto es estructural, no un problema de ajuste.
  • Salida: acciones continuas de dimensión 32, rellenadas internamente, la pérdida se calcula sobre las dimensiones que tiene tu robot. Un brazo de 6-grados de libertad más pinza utiliza 7.
python
# openpi/src/openpi/models/pi0_config.py - the defaults every pi05 config inherits
@dataclasses.dataclass(frozen=True)
class Pi0Config(_model.BaseModelConfig):
    dtype: str = "bfloat16"
    paligemma_variant: _gemma.Variant = "gemma_2b"
    action_expert_variant: _gemma.Variant = "gemma_300m"

    action_dim: int = 32
    action_horizon: int = 50
    max_token_len: int = None      # 200 if pi05 else 48

    pi05: bool = False             # flips discrete_state_input to True
Leído de src/openpi/models/pi0_config.py en la rama principal de openpi, 23 de agosto de 2026.

El backbone de PaliGemma, y la puerta delante de él

PaliGemma (arXiv 2407.07726) es un codificador de visión SigLIP-So400m sobre un modelo de lenguaje Gemma-2B, de aproximadamente 3B de parámetros. Pi0.5 hereda su tokenizador, y ese tokenizador reside en un repositorio restringido. Esta es la forma más común en que una primera ejecución falla, antes del primer paso de entrenamiento.

Acepte la licencia restringida antes de alquilar una GPU

La documentación de LeRobot pi05 lo indica claramente: pi0.5 utiliza el tokenizador restringido google/paligemma-3b-pt-224, así que acepte su licencia en el Hub y ejecute hf auth login primero. El acceso se concede manualmente, no de forma instantánea. Omítalo, inicie una ejecución en la nube de pago y pagará por un pod que no puede descargar un tokenizador.

Antes de empezar: formato del conjunto de datos, episodios, hardware

Pi0.5 en LeRobot lee un conjunto de datos de LeRobot en formato v3.0, que llegó con lerobot 0.4.0 en octubre de 2025: muchos episodios por archivo Parquet y MP4 en lugar de un archivo por episodio, con límites en meta/episodes/ en lugar de nombres de archivo. Grabe con el cliente de escritorio o siga grabe su primer conjunto de datos y lo tendrá.

ModoMemoria de GPU requeridaGPU de ejemplo
Inferenciamás de 8 GBRTX 4090
Ajuste fino, LoRAmás de 22.5 GBRTX 4090
Ajuste fino, completomás de 70 GBA100 de 80 GB o H100
La trampa de versiones que cuesta un día

Pi0.5 y SmolVLA requieren LeRobot v3.0. GR00T N1.7 y GR00T N1.5 requieren v2.0 o v2.1 y fallan con un conjunto de datos v3.0. Una sesión de grabación no puede alimentar a ambos sin una conversión, y el error no indica "versión de conjunto de datos incorrecta". Ver conjunto de datos rechazado: se requiere v3.

bash
# v2.1 -> v3.0, run against a dataset already on the Hub
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>

# aggregates episode-0000.parquet, episode-0001.parquet, ... -> file-0000.parquet
# aggregates episode-0000.mp4, episode-0001.mp4, ...         -> file-0000.mp4
# rewrites meta/episodes/* with per-episode lengths, tasks and offsets
De la documentación de LeRobotDataset v3.0.

La plataforma requiere al menos 50 episodios para Pi0.5, el mismo mínimo que GR00T y ACT. El preentrenamiento hace el trabajo pesado, por lo que 50 episodios limpios superan a 200 descuidados. ¿Eres nuevo en esto? Comienza con la guía de recolección de datos.

La página de políticas de AY-Robots que compara las cinco políticas entrenables por parámetros, nivel de GPU, latencia y episodios mínimos
Pi0.5 se sitúa en el nivel A100 y H100 con 485 ms por paso de acción, con un mínimo de 50 episodios.

Ruta A: ajuste fino con el repositorio openpi

La implementación de referencia: JAX primero, probada solo en Ubuntu 22.04, impulsada por objetos de configuración en lugar de flags. Una ruta de PyTorch llegó en septiembre de 2025, validada en LIBERO. Tres pasos: convertir sus datos, definir una configuración, entrenar y servir.

  1. 1
    Clonar e instalar

    openpi utiliza uv. GIT_LFS_SKIP_SMUDGE es lo que permite que LeRobot se incluya como dependencia sin blobs LFS.

    bash
    git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git
    cd openpi
    
    GIT_LFS_SKIP_SMUDGE=1 uv sync
    GIT_LFS_SKIP_SMUDGE=1 uv pip install -e .
  2. 2
    Convertir sus datos a un conjunto de datos de LeRobot

    El upstream proporciona convertidores para LIBERO y DROID y espera que usted adapte uno. El trabajo consiste en el mapeo de claves.

    bash
    uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data
  3. 3
    Añadir una configuración de entrenamiento

    Las configuraciones son entradas de TrainConfig en src/openpi/training/config.py. Esta adapta pi05_droid_finetune, con el cargador de pesos apuntando a pi05_base.

    python
    TrainConfig(
        name="pi05_so100",
        model=pi0_config.Pi0Config(
            pi05=True,
            action_dim=32,        # pi05 is trained with 32-dim actions
            action_horizon=16,
        ),
        # Copy LeRobotLiberoDataConfig in the same file and rewrite the key
        # mapping for your camera names, then reference your copy here.
        data=LeRobotLiberoDataConfig(
            repo_id="your_hf_username/my_so100_dataset",
            base_config=DataConfig(prompt_from_task=True),
        ),
        weight_loader=weight_loaders.CheckpointWeightLoader(
            "gs://openpi-assets/checkpoints/pi05_base/params"
        ),
        batch_size=32,
        num_train_steps=20_000,
    )
  4. 4
    Calcular estadísticas de normalización

    Se ejecuta contra el nombre de la configuración, no contra el conjunto de datos. Omitirlo es el primer fallo clásico aquí.

    bash
    uv run scripts/compute_norm_stats.py --config-name pi05_so100
  5. 5
    Entrenar

    La variable permite a JAX usar el 90 por ciento de la memoria de la GPU en lugar del 75 por ciento predeterminado. En una tarjeta de 80 GB, esto decide si la ejecución sobrevive.

    bash
    XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \
        --exp-name=my_experiment \
        --overwrite
  6. 6
    Servirlo

    El servidor escucha en el puerto 8000 y responde a las consultas de observación; el tiempo de ejecución de su robot es el cliente.

    bash
    uv run scripts/serve_policy.py policy:checkpoint \
        --policy.config=pi05_so100 \
        --policy.dir=checkpoints/pi05_so100/my_experiment/20000
La ruta de PyTorch no es la ruta de JAX

La implementación de PyTorch de openpi no es compatible con pi0-FAST, precisión mixta, FSDP, LoRA o pesos EMA, por lo que el LoRA que alcanza los 22.5 GB es solo para JAX, a través de las variantes gemma_2b_lora y gemma_300m_lora. Peor aún: la configuración copia archivos parcheados sobre su instalación de transformers 4.53.2, y el README advierte que con el modo de enlace duro predeterminado de uv, esto modifica permanentemente transformers en la caché de uv y puede filtrarse a otros proyectos. Deshaga esto con uv cache clean transformers.

Ruta B: ajuste fino con lerobot pi05

El puerto de LeRobot envuelve los mismos pesos en la CLI que ya utiliza para ACT y SmolVLA. Todo lo siguiente fue verificado con lerobot 0.6.1, la versión desde el 3 de agosto de 2026, y la documentación de pi05 del 23 de agosto de 2026. Las versiones importan aquí: los conjuntos de datos v3.0 llegaron con la 0.4.0 en octubre de 2025, el blog 0.5.0 del 9 de marzo de 2026 presenta pi0-FAST y Real-Time Chunking, y la 0.6.0 del 6 de julio de 2026 hizo que el paquete base fuera ligero y trasladó la implementación a lerobot-rollout.

Una cosa no cambió: lerobot-train y lerobot-record ya eran puntos de entrada en la versión 0.3.2, agosto de 2025. Un tutorial que todavía llama a python -m lerobot.scripts.train es anterior a un año de cambios y también es digno de desconfianza en el resto.

  1. 1
    Instalar con los extras correctos

    Desde la versión 0.6.0, la instalación base solo incluye las dependencias principales de ML, y el extra `pi` no añade código de conjunto de datos o entrenamiento, por lo que un ajuste fino también necesita el extra de entrenamiento. Las líneas de comando antiguas fallan aquí al importar.

    bash
    # policy dependencies plus the training stack
    pip install 'lerobot[pi,training]'
    
    # from a source checkout
    pip install -e ".[pi,training]"
    
    # driving an SO-100 afterwards needs the robot extras too
    pip install 'lerobot[core_scripts,feetech]'
  2. 2
    Autenticar

    Acepte la licencia de paligemma-3b-pt-224 en un navegador, luego inicie sesión en la máquina que entrena.

    bash
    hf auth login
  3. 3
    Añadir estadísticas de cuantiles

    Pi0.5 normaliza STATE y ACTION con cuantiles, por lo que meta/stats.json necesita q01 y q99. Los conjuntos de datos más antiguos solo contienen min, max, mean, std.

    bash
    lerobot-edit-dataset \
        --repo_id your_dataset \
        --new_repo_id your_dataset \
        --operation.type recompute_stats \
        --operation.overwrite true
  4. 4
    Ajuste fino desde lerobot/pi05_base

    Ajuste el tamaño del lote a lo que su tarjeta pueda soportar; la documentación usa 64 en LIBERO con 80 GB. Pase bfloat16 explícitamente, el valor predeterminado de la configuración es float32.

    bash
    lerobot-train \
        --dataset.repo_id=${HF_USER}/my_so100_dataset \
        --policy.type=pi05 \
        --policy.pretrained_path=lerobot/pi05_base \
        --policy.gradient_checkpointing=true \
        --policy.dtype=bfloat16 \
        --policy.device=cuda \
        --policy.push_to_hub=false \
        --output_dir=./outputs/pi05_so100 \
        --job_name=pi05_so100 \
        --batch_size=4 \
        --num_workers=8 \
        --steps=30000 \
        --save_freq=5000 \
        --seed=1000
  5. 5
    Ejecutarlo en el brazo

    En 0.6.x esto es lerobot-rollout: lerobot-record rechaza una política y los nombres de conjuntos de datos `eval_`. `Base` controla el brazo, `sentry` registra el despliegue.

    bash
    lerobot-rollout \
        --strategy.type=base \
        --policy.path=${HF_USER}/my_policy \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM1 \
        --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
        --task="Put lego brick into the transparent box" \
        --duration=60
    
    # same run, recorded into an eval_ dataset
    lerobot-rollout \
        --strategy.type=sentry \
        --policy.path=${HF_USER}/my_policy \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM1 \
        --dataset.repo_id=${HF_USER}/eval_so100 \
        --dataset.single_task="Put lego brick into the transparent box" \
        --duration=600
BanderaQué haceNota
--policy.type=pi05selecciona Pi0.5requerido con pretrained_path, omitir con --policy.path
--policy.pretrained_pathcarga solo los pesosnombres de características de su conjunto de datos, la configuración almacenada se restablece
--policy.pathpesos más el archivo config.json del punto de controlse heredan las configuraciones almacenadas, como n_action_steps
--policy.n_action_stepspasos consumidos por fragmentovuelve a 50, nunca por encima de chunk_size (predeterminado 50)
--policy.train_expert_onlycongela el VLM, entrena al expertopredeterminado falso, menos memoria, cierto costo en el éxito
--policy.gradient_checkpointingrecalcula en lugar de almacenar activacionespredeterminado falso, la primera palanca cuando una ejecución no cabe
--peft.method_type=LORAadaptadores LoRA en lugar de pesos completosnecesita el extra `peft`, el ejemplo documentado es SmolVLA
--policy.rtc_training_max_delaycondicionamiento de prefijo de acción para RTCsolo en la rama principal, no en 0.6.1, debe permanecer por debajo de chunk_size
--rename_mapmapea las columnas del conjunto de datos a las características de la políticanecesario cuando las claves de su cámara difieren
El error que la mayoría de las primeras ejecuciones encuentran

Sin cuantiles, obtendrá ValueError: QUANTILES normalization mode requires q01 and q99 stats en el primer lote. Recalcule las estadísticas, pero el resultado se guarda en $HF_LEROBOT_HOME/your_dataset, no en la caché que lee --dataset.repo_id, así que entrene con --dataset.root apuntando allí o suba al Hub. O salte los cuantiles con --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', como hace el comando de referencia de LIBERO.

Tres conjuntos de valores predeterminados, y cuáles llegan al entrenador

TrainConfig de openpi es la referencia, PI05Config de LeRobot es lo que usa lerobot-train cuando no se especifica nada, y el formulario aquí envía un tercer conjunto. La sorpresa es la tasa de aprendizaje: ambos valores predeterminados upstream alcanzan un máximo de 2.5e-5, mientras que la propia configuración pi05_libero de openpi y esta plataforma la elevan a 5e-5.

Configuraciónopenpi TrainConfiglerobot pi05 y lerobot-trainAY-Robots envía
Tamaño del lote3281
Tasa de aprendizaje máxima2.5e-5, decaimiento cosenooptimizer_lr 2.5e-55e-5
Pasos de entrenamiento30,000100,00030,000
Intervalo de puntos de control1,000 pasos20,000 pasosno en el formulario
Semilla421,000en el formulario
Fragmento de acciónaction_horizon 50chunk_size 50, n_action_steps 50no en el formulario
Tipo de dato de pesobfloat16float32 hasta que pases --policy.dtypeno en el formulario
Acumulación de gradienteno existe tal ajuste, fsdp_devices en su lugarausente en todas las versiones hasta ahora16, y se elimina

¿Es fiel la adaptación? El equipo de LeRobot ajustó el modelo base LIBERO durante 6k pasos adicionales y lo comparó con los números de referencia de openpi en cuatro conjuntos: 97.5 por ciento de promedio frente a 96.85, por delante en Libero 10, por detrás en Spatial. La ruta es una elección de herramientas, no de calidad.

Ajuste fino de Pi0.5 con tus propios datos
Ventajas
  • Más de 10,000 horas de preentrenamiento de robots lo respaldan, por lo que 50 episodios de tu tarea pueden ser suficientes.
  • Acciones continuas: sin tokenizador que ajustar, sin límite de discretización en tus ángulos de articulación.
  • La adaptación de LeRobot obtiene un 97.5 por ciento en el promedio de LIBERO frente al 96.85 de openpi, por lo que la CLI más amigable no tiene un costo medible.
  • Rutas eficientes en parámetros en ambos lados: variantes JAX LoRA de openpi, integración PEFT de LeRobot.
Compromisos
  • El ajuste fino completo requiere más de 70 GB. La cifra de 22.5 GB para LoRA es el número JAX de openpi; no se ha publicado ninguno para pi05 bajo PEFT.
  • 485 ms por paso de acción, el más lento de los cinco aquí: el doble que SmolVLA, veinticuatro veces ACT.
  • Se requiere LeRobot v3.0, por lo que un conjunto de datos grabado para una ejecución de GR00T necesita ser convertido, y viceversa.
  • Las nuevas opciones llegan primero a main: la memoria RTC y MEM en tiempo de entrenamiento no están en 0.6.1, por lo que la documentación más reciente puede implicar instalar desde git.

La realidad de 485 ms, y dónde deja de ser utilizable

Esto decide tu proyecto, por lo que va antes de la tabla de costos. La por paso de acción medida aquí para Pi0.5 es de 485 ms. Frente a las otras cuatro:

PolíticaInferencia por paso de acciónParámetrosNivel de GPUEpisodios mínimos
ACT20 ms~80 MRTX 4090 or any 24 GB card50
GR00T N1.7152 ms~3 BA100 80 GB or H100 80 GB50
GR00T N1.5165 ms~3 BA100 80 GB or H100 80 GB50
SmolVLA245 ms~450 MRTX 4090 or any 24 GB card30
Pi0.5485 ms~3 BA100 80 GB or H100 80 GB50
La página de comparación de AY-Robots para GR00T N1.7 contra Pi0.5, con parámetros, nivel de GPU, latencia y formato del conjunto de datos
Mismo nivel de GPU, mismo umbral de episodios, diferente versión del conjunto de datos, triple brecha de latencia.
La inferencia debe estar junto a los servos

El bucle de control en estos cinco modelos se ejecuta de 20 a 485 ms por paso de acción. Los viajes de ida y vuelta por internet público, además de los 485 ms, convierten una política funcional en una dubitativa. La inferencia remota es viable para operaciones lentas de recogida y colocación, no para movimientos reactivos rápidos. Preferimos decir eso antes que vender una demostración que solo funciona en una LAN. Si su brazo se detiene entre fragmentos, comience en la política se congela a mitad de movimiento.

Upstream tiene una respuesta, y la mitad ya está en la versión que puede instalar. El Chunking en Tiempo Real (Real-Time Chunking) genera el siguiente fragmento mientras el brazo aún está ejecutando el actual, luego guía los pasos superpuestos del nuevo fragmento para que se mantengan cerca de la parte ya ejecutada, de modo que el brazo no se detenga ni se sacuda en la unión. La forma de tiempo de inferencia se incluyó en el registro de cambios 0.4.2 para Pi0, Pi0.5 y SmolVLA y es un flag de despliegue, no un reentrenamiento:

bash
lerobot-rollout \
    --strategy.type=base \
    --policy.path=${HF_USER}/my_policy \
    --inference.type=rtc \
    --inference.rtc.execution_horizon=10 \
    --inference.rtc.max_guidance_weight=10.0 \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM1 \
    --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
    --task="Put lego brick into the transparent box" \
    --duration=60
execution_horizon es la cantidad de pasos del fragmento anterior con los que el nuevo debe coincidir; la documentación de RTC indica que de 8 a 12 es el rango habitual. El backend de inferencia predeterminado es --inference.type=sync.

No hace que el modelo sea más rápido. Oculta la brecha: los 485 ms aún se gastan, pero fuera de la ruta crítica, por lo que la cola no se agota entre fragmentos. La variante de tiempo de entrenamiento de arXiv 2512.05964 va más allá: el modelo aprende a condicionar un prefijo de acción limpio, por lo que en la inferencia la superposición se "pinta" con pasos de tiempo de flujo por acción en lugar de ser guiada, y el paso hacia atrás de la guía desaparece. Durante el entrenamiento, muestrea una longitud de prefijo por ejemplo y toma la pérdida de flujo en el sufijo restante. Ese flag solo está en main, no en 0.6.1, y el retraso para el que entrena debe permanecer por debajo de chunk_size.

Dos formas de obtener un checkpoint de Pi0.5

Alquilas o posees una tarjeta de 80 GB, instalas una de las pilas anteriores, conviertes tu conjunto de datos y supervisas la ejecución. Conservas todos los controles: JAX LoRA de openpi, adaptadores PEFT de LeRobot, acciones relativas, mapeos de teclas personalizados. También conservas cada fallo.

  • Hardware: A100 80 GB o H100, o una tarjeta de 24 GB en la ruta JAX LoRA de openpi.
  • Configuración: una tarde para la primera ejecución, principalmente mapeo de teclas y el tokenizador con acceso restringido.
  • No disponible en el formulario alojado: adaptadores PEFT, acciones relativas, RTC en tiempo de entrenamiento, memoria MEM.
bash
lerobot-train \
    --dataset.repo_id=${HF_USER}/my_so100_dataset \
    --policy.type=pi05 \
    --policy.pretrained_path=lerobot/pi05_base \
    --policy.rtc_training_max_delay=10 \
    --policy.gradient_checkpointing=true \
    --policy.dtype=bfloat16 \
    --batch_size=4 --steps=30000 --seed=1000
El comando que ningún formulario alojado ejecuta, y pip no puede instalar: el RTC en tiempo de entrenamiento es una flag de la rama principal.

Cuando no funciona

SíntomaCausa más probable
Ejecución rechazada antes de empezarConjunto de datos v2.1 pero Pi0.5 requiere v3.0, o viceversa para GR00T
ImportError, falta el paquete datasetslerobot 0.6.x sin el extra de entrenamiento
ValueError sobre q01 y q99 en el lote unoNo hay cuantiles en meta/stats.json; recalcular o usar MEAN_STD
CUDA sin memoria en el paso 0Ajuste fino completo por debajo de 70 GB; intentar checkpointing o train_expert_only
Error 401 o de repositorio restringidoLicencia del tokenizador PaliGemma no aceptada
La pérdida cae, el robot no hace nadaDesajuste de normalización, o la política copia el estado
El brazo se detiene entre fragmentosLatencia por paso más ida y vuelta; la cola de fragmentos se agota
Funciona en una configuración, falla en otraMuy pocos episodios, o todos en una sola configuración

Cuánto cuesta una ejecución

Pi0.5 se encuentra en el nivel costoso porque necesita una tarjeta de 80 GB, y los precios spot varían, por lo que la cifra es un rango en lugar de un precio. Para muchas tareas SO-100, entrene SmolVLA o ACT en el nivel de 24 GB primero, confirme que la tarea es aprendible, y luego dedique horas de A100 a ella. Entrene su primera política describe ese ciclo más económico, y precios contiene los niveles actuales.

NivelPolíticasEjecución típicaPrecio por horaCosto por ejecución
A100 80 GB or H100Pi0.5, GR00T N1.7, GR00T N1.53 a 6 horas1.20 to 2.00 USDaproximadamente 4 a 12 USD
RTX 4090 o cualquier tarjeta de 24 GBSmolVLA, ACT2 a 5 horas0.30 to 0.60 USDaproximadamente 1 a 3 USD
La tabla de costes de AY-Robots que muestra qué GPU necesita cada política, el tiempo de ejecución y el precio típicos, y cuántos episodios se necesitan antes de que una política sea útil
Los mismos dos niveles en la página del producto: Pi0.5 alquila la tarjeta de 80 GB, SmolVLA y ACT caben en una 4090.

Antes de comprometer una tarde: GR00T N1.7 contra Pi0.5 y Pi0.5 contra SmolVLA presentan los mismos números cara a cara. La Arena contiene 85 modelos VLA con 332 resultados de benchmark, cada uno vinculado a su fuente, y los antecedentes de la familia se encuentran en nuestra visión general de VLA.

Entrene Pi0.5 sin construir la pila

Seleccione el conjunto de datos y los hiperparámetros en un formulario. El backend alquila una tarjeta de 80 GB en el mercado spot, ejecuta el entrenador y escribe los puntos de control en el almacenamiento de objetos. Guías para SO-100, SO-101, Koch v1.1 y LeKiwi.

Abrir las guías de entrenamiento
¿Puedo ajustar Pi0.5 en una RTX 4090?

No es un ajuste completo: openpi lista más de 70 GB para eso, por lo que se necesita una A100 de 80 GB o una H100. Su cifra de 22.5 GB para LoRA pertenece a la ruta JAX; la implementación de PyTorch no tiene LoRA. La integración PEFT de LeRobot existe, pero su ejemplo documentado es SmolVLA y no se publica ninguna cifra de VRAM para pi05.

¿Cuántos episodios necesito?

Cincuenta, el mismo mínimo que GR00T y ACT; solo SmolVLA es más bajo, con 30. El punto de control base lleva más de 10,000 horas de preentrenamiento, por lo que el ajuste se adapta en lugar de aprender desde cero: 50 episodios limpios y variados superan a doscientos de una sola configuración.

¿Cuál es la diferencia entre --policy.path y --policy.pretrained_path?

--policy.path carga los pesos y el config.json del punto de control, por lo que se heredan las configuraciones almacenadas como n_action_steps y --policy.type debe omitirse. --policy.pretrained_path carga solo los pesos: los nombres de las características provienen de su conjunto de datos, las configuraciones almacenadas se restablecen, --policy.type es obligatorio. Por eso el comando LIBERO pasa n_action_steps=10 y empty_cameras=1 explícitamente; de lo contrario, vuelven a 50 y 0.

¿La versión abierta me da el Pi0.5 completo del artículo?

No. Ambos solo admiten el cabezal de acción de coincidencia de flujo. La etapa de preentrenamiento de tokens discretos con el tokenizador de acción FAST y la predicción de subtareas de alto nivel no se lanzaron, y la tarjeta lerobot/pi05_base añade RL a esa lista a pesar de que el artículo de pi0.5 no describe ninguna etapa de aprendizaje por refuerzo. Se entrena una política de bajo nivel condicionada a una cadena de lenguaje que usted proporciona, no un modelo que descompone una tarea larga por sí mismo.

¿Contra qué versiones está escrita esta guía?

openpi en main y lerobot 0.6.1, la versión desde el 3 de agosto de 2026, ambas leídas el 23 de agosto de 2026. Los conjuntos de datos v3.0 llegaron con 0.4.0 en octubre de 2025. La versión 0.6.0 hizo que el paquete base fuera ligero, por lo que lerobot[pi] por sí solo ya no instala una pila de entrenamiento, y movió la implementación a lerobot-rollout. El RTC en tiempo de entrenamiento está solo en main; el entrenador alojado aquí ejecuta 0.5.1.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started