
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).
| Propiedad | pi0 | pi0.5 |
|---|---|---|
| Variante del backbone VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Variante del experto en acciones | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| horizonte de acción predeterminado | 50 | 50 |
| max_token_len | 48 | 200 |
| entrada de estado discreto | false | true, estado discretizado en compartimentos en el prompt |
| Punto de control base | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
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.
# 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 TrueEl 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.
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á.
| Modo | Memoria de GPU requerida | GPU de ejemplo |
|---|---|---|
| Inferencia | más de 8 GB | RTX 4090 |
| Ajuste fino, LoRA | más de 22.5 GB | RTX 4090 |
| Ajuste fino, completo | más de 70 GB | A100 de 80 GB o H100 |
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.
# 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 offsetsLa 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.

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.
- 1Clonar e instalar
openpi utiliza uv. GIT_LFS_SKIP_SMUDGE es lo que permite que LeRobot se incluya como dependencia sin blobs LFS.
bashgit 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 . - 2Convertir 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.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Añ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.
pythonTrainConfig( 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, ) - 4Calcular 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í.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Entrenar
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.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Servirlo
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.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
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.
- 1Instalar 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]' - 2Autenticar
Acepte la licencia de paligemma-3b-pt-224 en un navegador, luego inicie sesión en la máquina que entrena.
bashhf auth login - 3Añ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.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4Ajuste 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.
bashlerobot-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 - 5Ejecutarlo 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.
bashlerobot-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
| Bandera | Qué hace | Nota |
|---|---|---|
| --policy.type=pi05 | selecciona Pi0.5 | requerido con pretrained_path, omitir con --policy.path |
| --policy.pretrained_path | carga solo los pesos | nombres de características de su conjunto de datos, la configuración almacenada se restablece |
| --policy.path | pesos más el archivo config.json del punto de control | se heredan las configuraciones almacenadas, como n_action_steps |
| --policy.n_action_steps | pasos consumidos por fragmento | vuelve a 50, nunca por encima de chunk_size (predeterminado 50) |
| --policy.train_expert_only | congela el VLM, entrena al experto | predeterminado falso, menos memoria, cierto costo en el éxito |
| --policy.gradient_checkpointing | recalcula en lugar de almacenar activaciones | predeterminado falso, la primera palanca cuando una ejecución no cabe |
| --peft.method_type=LORA | adaptadores LoRA en lugar de pesos completos | necesita el extra `peft`, el ejemplo documentado es SmolVLA |
| --policy.rtc_training_max_delay | condicionamiento de prefijo de acción para RTC | solo en la rama principal, no en 0.6.1, debe permanecer por debajo de chunk_size |
| --rename_map | mapea las columnas del conjunto de datos a las características de la política | necesario cuando las claves de su cámara difieren |
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ón | openpi TrainConfig | lerobot pi05 y lerobot-train | AY-Robots envía |
|---|---|---|---|
| Tamaño del lote | 32 | 8 | 1 |
| Tasa de aprendizaje máxima | 2.5e-5, decaimiento coseno | optimizer_lr 2.5e-5 | 5e-5 |
| Pasos de entrenamiento | 30,000 | 100,000 | 30,000 |
| Intervalo de puntos de control | 1,000 pasos | 20,000 pasos | no en el formulario |
| Semilla | 42 | 1,000 | en el formulario |
| Fragmento de acción | action_horizon 50 | chunk_size 50, n_action_steps 50 | no en el formulario |
| Tipo de dato de peso | bfloat16 | float32 hasta que pases --policy.dtype | no en el formulario |
| Acumulación de gradiente | no existe tal ajuste, fsdp_devices en su lugar | ausente en todas las versiones hasta ahora | 16, 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.
- 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.
- 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ítica | Inferencia por paso de acción | Parámetros | Nivel de GPU | Episodios mínimos |
|---|---|---|---|---|
| ACT | 20 ms | ~80 M | RTX 4090 or any 24 GB card | 50 |
| GR00T N1.7 | 152 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | 165 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | 245 ms | ~450 M | RTX 4090 or any 24 GB card | 30 |
| Pi0.5 | 485 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |

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:
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=60No 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.
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=1000Eliges el modelo y el conjunto de datos en el formulario de entrenamiento, el backend alquila una GPU en un mercado spot según la VRAM requerida, ejecuta el entrenador y escribe checkpoints en el almacenamiento de objetos. Pi0.5 es solo en la nube aquí. Existen guías para SO-100, SO-101, Koch v1.1 y LeKiwi.
| Configuración | Lo que la plataforma envía para Pi0.5 |
|---|---|
| Checkpoint base | lerobot/pi05_base |
| Tipo de política | pi05 |
| Tamaño de lote | 1 |
| Tasa de aprendizaje | 5e-5 |
| Pasos máximos | 30000 |
| Acumulación de gradiente | 16, pero ver la advertencia a continuación |
| Controles adicionales en el formulario | seed, logFreq |
| Formato del conjunto de datos | LeRobot v3.0 |
| Nivel de GPU | A100 80 GB o H100 80 GB |
El entrenador envía un valor de acumulación de gradiente de 16 y lerobot 0.5.1 no tiene una flag para recibirlo, por lo que se ignora. Ningún lerobot lanzado tiene una: el control existe solo en la rama principal, como --accelerator.gradient_accumulation.steps. El tamaño de lote efectivo aquí es 1, en contraste con los 256 que usa la configuración pi05_libero de openpi. Es importante saberlo antes de leer una curva de pérdida. El control sí se aplica en las ejecuciones de GR00T N1.7 y GR00T N1.5.
La inferencia funciona de la misma manera: se aprovisiona un pod para servir la política y tu cliente local se comunica con él. El pod tiene un watchdog de inactividad y se autodestruye, por lo que una pestaña olvidada no factura en silencio. Se aplica la advertencia de latencia, razón por la cual ACT a 20 ms a menudo gana una tarea rápida.
Cuando no funciona
| Síntoma | Causa más probable |
|---|---|
| Ejecución rechazada antes de empezar | Conjunto de datos v2.1 pero Pi0.5 requiere v3.0, o viceversa para GR00T |
| ImportError, falta el paquete datasets | lerobot 0.6.x sin el extra de entrenamiento |
| ValueError sobre q01 y q99 en el lote uno | No hay cuantiles en meta/stats.json; recalcular o usar MEAN_STD |
| CUDA sin memoria en el paso 0 | Ajuste fino completo por debajo de 70 GB; intentar checkpointing o train_expert_only |
| Error 401 o de repositorio restringido | Licencia del tokenizador PaliGemma no aceptada |
| La pérdida cae, el robot no hace nada | Desajuste de normalización, o la política copia el estado |
| El brazo se detiene entre fragmentos | Latencia por paso más ida y vuelta; la cola de fragmentos se agota |
| Funciona en una configuración, falla en otra | Muy pocos episodios, o todos en una sola configuración |
- Conjunto de datos rechazado: se requiere v3
- Memoria insuficiente durante el entrenamiento
- La pérdida disminuye pero la política no hace nada
- La política se congela a mitad de movimiento
- La política solo funciona en una configuración
- Trabajo de entrenamiento atascado en cola
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.
| Nivel | Políticas | Ejecución típica | Precio por hora | Costo por ejecución |
|---|---|---|---|---|
| A100 80 GB or H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 a 6 horas | 1.20 to 2.00 USD | aproximadamente 4 a 12 USD |
| RTX 4090 o cualquier tarjeta de 24 GB | SmolVLA, ACT | 2 a 5 horas | 0.30 to 0.60 USD | aproximadamente 1 a 3 USD |

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.
Sources
- Physical-Intelligence/openpi: open-source models and packages for robotics
- openpi training configs, including pi05_libero and pi05_droid_finetune
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- pi0.5: a Vision-Language-Action Model with Open-World Generalization
- Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better
- PaliGemma: A versatile 3B VLM for transfer
- Training-Time Action Conditioning for Efficient Real-Time Chunking
- LeRobot pi05 documentation on the main branch, including training-time RTC
- LeRobot documentation: parameter efficient fine-tuning with PEFT
- LeRobotDataset v3.0 format documentation
- LeRobot release notes: v0.3.2 through v0.6.1, with the v0.6.0 breaking changes
- LeRobot v0.5.0: Scaling Every Dimension
- lerobot/pi05_base model card
- LeRobot documentation: Real-Time Chunking (RTC)
- openpi Pi0Config: the model defaults pi0 and pi05 inherit
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started