
Ajuste fino de Pi0.5, o VLA de correspondência de fluxo da Physical Intelligence, com seus próprios dados de robô. Comandos reais para openpi e lerobot pi05, armadilhas de formato de conjunto de dados, limites de VRAM e latência.
Pi0.5 é o modelo a ser usado quando uma política precisa funcionar em um ambiente que nunca viu. É também a mais complicada das cinco políticas treináveis aqui para fazer fine-tuning manualmente: o repositório upstream é JAX primeiro, a porta LeRobot moveu a implantação para fora do lerobot-record na versão 0.6.0 e tornou a instalação base muito pequena para treinar, e um fine-tuning completo não cabe em uma 4090. Abaixo: o que correspondência de fluxo custa na inferência, as duas rotas de comando e o número de 485 ms que decide se o resultado é utilizável.
O que você precisa saber
- •Uma VLA de correspondência de fluxo: um VLM PaliGemma 3B mais um especialista em ação de 300M decodificando blocos de ação contínuos. Duas rotas para fazer fine-tuning, openpi e LeRobot pi05, com 0.65 pontos de diferença na média LIBERO.
- •O fine-tuning completo requer mais de 70 GB de VRAM. openpi lista LoRA em 22.5 GB, apenas em seu caminho JAX.
- •O conjunto de dados deve ser LeRobotDataset v3.0 com quantis q01 e q99 em meta/stats.json, ou o primeiro lote falha.
- •Verifique sua versão do lerobot primeiro: 0.6.0 tornou o pacote base leve e moveu a implantação para fora do lerobot-record.
- •Aqui ele executa a 485 ms por passo de ação, requer 50 episódios e custa cerca de 4 a 12 USD por execução.
O que Pi0.5 realmente é
Physical Intelligence publicou pi0 em outubro de 2024: um modelo de correspondência de fluxo de visão-linguagem-ação em um VLM pré-treinado: PaliGemma com 3 bilhões de parâmetros mais um especialista em ação de 300M inicializado do zero, 3,3 bilhões no total. O artigo relata o pré-treinamento em mais de 10.000 horas de dados de robôs em 7 configurações de robôs e 68 tarefas. Mais em o artigo sobre pi0.
Pi0.5 (arXiv 2504.16054, 22 de abril de 2025) mantém esse esqueleto e muda a dieta de treinamento: dados da web, detecção de objetos, instruções verbais de humanos treinando o robô, rótulos de subtarefas, dados de múltiplas encarnações de robôs em muitas casas. O resultado é um robô limpando cozinhas em casas que não estavam no conjunto de treinamento. O README do openpi adiciona um detalhe que o título não menciona: o pi0.5 lançado foi treinado com isolamento de conhecimento (arXiv 2505.23705).
| Propriedade | pi0 | pi0.5 |
|---|---|---|
| Variante do backbone VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Variante do especialista em ação | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| action_horizon padrão | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, estado discretizado em compartimentos no prompt |
| Checkpoint base | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
O README do openpi é explícito: o repositório suporta apenas o cabeçalho de correspondência de fluxo (flow matching head), tanto para treinamento quanto para inferência do pi0.5. O artigo descreve duas etapas e o código contém apenas a segunda: o pré-treinamento representa cada ação como tokens discretos através do tokenizador FAST, e na implantação o modelo infere uma subtarefa de alto nível antes de cada bloco de ação. Nenhuma dessas etapas está no repositório. O cartão lerobot/pi05_base fornece a mesma lista e adiciona RL, embora o artigo do pi0.5 não descreva nenhuma etapa de aprendizado por reforço. A porta LeRobot herda esse escopo, assim como todo treinador hospedado nela, incluindo o daqui. O licenciamento também é dividido: a página de documentação do pi05 diz Apache 2.0, o cartão lerobot/pi05_base é marcado com license: gemma.
O que a correspondência de fluxo muda no treinamento e inferência
Uma política que você pode treinar em um SO-100 ou regride ações diretamente (ACT) ou as tokeniza e decodifica autoregressivamente (pi0-FAST). O flow matching não faz nenhum dos dois: ele aprende um campo vetorial que transporta ruído para um chunk de ação limpo, e então o integra. O artigo pi0 usa 10 passos de integração com tamanho de passo 0.1; a configuração pi05 do LeRobot mantém o mesmo `num_inference_steps: int = 10`.
- Treinamento: a perda regride um chunk de ação ruidoso. Nenhum tokenizador para ajustar, nenhuma discretização dos seus ângulos de junta.
- Inferência: um chunk custa dez passagens para frente através do especialista em ação. Isso é estrutural, não um problema de ajuste.
- Saída: ações contínuas de dimensão 32, preenchidas internamente, perda calculada nas dimensões que seu robô possui. Um braço de 6-DoF mais garra usa 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 TrueO backbone PaliGemma, e o portão à sua frente
PaliGemma (arXiv 2407.07726) é um codificador de visão SigLIP-So400m em um modelo de linguagem Gemma-2B, com cerca de 3B de parâmetros. Pi0.5 herda seu tokenizador, e esse tokenizador reside em um repositório restrito. Esta é a forma mais comum de uma primeira execução falhar, antes do primeiro passo de treinamento.
A documentação do LeRobot pi05 afirma claramente: pi0.5 usa o tokenizador restrito google/paligemma-3b-pt-224, então aceite sua licença no Hub e execute hf auth login primeiro. O acesso é concedido manualmente, não instantaneamente. Ignore isso, inicie uma execução paga na nuvem, e você pagará por um pod que não consegue baixar um tokenizador.
Antes de começar: formato do conjunto de dados, episódios, hardware
Pi0.5 no LeRobot lê um conjunto de dados LeRobot no layout v3.0, que foi lançado com o lerobot 0.4.0 em outubro de 2025: muitos episódios por arquivo Parquet e MP4 em vez de um arquivo por episódio, com limites em meta/episodes/ em vez de nomes de arquivo. Grave com o cliente de desktop ou siga grave seu primeiro conjunto de dados e você o terá.
| Modo | Memória GPU necessária | Exemplo de GPU |
|---|---|---|
| Inferência | mais de 8 GB | RTX 4090 |
| Ajuste fino, LoRA | mais de 22,5 GB | RTX 4090 |
| Ajuste fino, completo | mais de 70 GB | A100 80 GB ou H100 |
Pi0.5 e SmolVLA exigem LeRobot v3.0. GR00T N1.7 e GR00T N1.5 exigem v2.0 ou v2.1 e falham em um conjunto de dados v3.0. Uma sessão de gravação não pode alimentar ambos sem uma conversão, e o erro não diz "versão errada do conjunto de dados". Veja conjunto de dados rejeitado: v3 necessário.
# 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 offsetsA plataforma exige pelo menos 50 episódios para Pi0.5, o mesmo mínimo que GR00T e ACT. O pré-treinamento faz o trabalho pesado, então 50 episódios limpos superam 200 desleixados. Novo nisso? Comece com o guia de coleta de dados.

Rota A: ajuste fino com o repositório openpi
A implementação de referência: JAX primeiro, testada apenas no Ubuntu 22.04, impulsionada por objetos de configuração em vez de flags. Um caminho para PyTorch chegou em setembro de 2025, validado no LIBERO. Três etapas: converta seus dados, defina uma configuração, treine e sirva.
- 1Clonar e instalar
openpi usa uv. GIT_LFS_SKIP_SMUDGE é o que permite que LeRobot seja uma dependência sem 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 . - 2Converter seus dados para um conjunto de dados LeRobot
O upstream fornece conversores para LIBERO e DROID e espera que você adapte um. O trabalho é o mapeamento de chaves.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Adicionar uma configuração de treinamento
As configurações são entradas TrainConfig em src/openpi/training/config.py. Esta adapta pi05_droid_finetune, com o carregador de pesos apontado para 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 estatísticas de normalização
Executa contra o nome da configuração, não o conjunto de dados. Ignorá-lo é a primeira falha clássica aqui.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Treinar
A variável permite que o JAX use 90% da memória da GPU em vez dos 75% padrão. Em uma placa de 80 GB, isso decide se a execução sobrevive.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Servir
O servidor escuta na porta 8000 e responde a consultas de observação; seu tempo de execução do robô é o cliente.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
A implementação PyTorch da openpi não suporta pi0-FAST, precisão mista, FSDP, LoRA ou pesos EMA, então o LoRA que atinge 22.5 GB é apenas JAX, através das variantes gemma_2b_lora e gemma_300m_lora. Pior: a configuração copia arquivos corrigidos sobre seus transformers 4.53.2 instalados, e o README adverte que com o modo hardlink padrão do uv isso modifica permanentemente os transformers no cache do uv e pode vazar para outros projetos. Desfaça isso com uv cache clean transformers.
Rota B: ajuste fino com lerobot pi05
A porta LeRobot encapsula os mesmos pesos na CLI que você já usa para ACT e SmolVLA. Tudo abaixo foi verificado com lerobot 0.6.1, a versão desde 3 de agosto de 2026, e a documentação do pi05 em 23 de agosto de 2026. As versões importam aqui: os conjuntos de dados v3.0 chegaram com 0.4.0 em outubro de 2025, o blog 0.5.0 de 9 de março de 2026 apresenta pi0-FAST e Real-Time Chunking, e 0.6.0 em 6 de julho de 2026 tornou o pacote base leve e moveu a implantação para lerobot-rollout.
Uma coisa não mudou: lerobot-train e lerobot-record já eram pontos de entrada em 0.3.2, agosto de 2025. Um tutorial que ainda chama python -m lerobot.scripts.train é anterior a um ano de mudanças e também não é confiável no restante.
- 1Instalar com os extras corretos
Desde 0.6.0, a instalação base inclui apenas as dependências essenciais de ML, e o extra 'pi' não adiciona código de dataset ou treinamento, então um fine-tune também precisa do extra 'training'. Comandos de uma linha mais antigos falham aqui no momento da importação.
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
Aceite a licença paligemma-3b-pt-224 em um navegador e, em seguida, faça login na máquina que realiza o treinamento.
bashhf auth login - 3Adicionar estatísticas de quantis
O Pi0.5 normaliza STATE e ACTION com quantis, então meta/stats.json precisa de q01 e q99. Datasets mais antigos contêm apenas min, max, mean, std.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4Ajustar a partir de lerobot/pi05_base
Defina o tamanho do batch para o que sua placa suporta; a documentação usa 64 no LIBERO com 80 GB. Passe bfloat16 explicitamente, o padrão da configuração é 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 - 5Executar no braço
Em 0.6.x, isso é lerobot-rollout: lerobot-record recusa uma política e rejeita nomes de datasets eval_. Base controla o braço, sentry registra o rollout.
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
| Flag | O que faz | Nota |
|---|---|---|
| --policy.type=pi05 | seleciona Pi0.5 | obrigatório com pretrained_path, omitir com --policy.path |
| --policy.pretrained_path | carrega apenas os pesos | nomes de features do seu dataset, configurações armazenadas são redefinidas |
| --policy.path | pesos mais o config.json do checkpoint | configurações armazenadas, como n_action_steps, são herdadas |
| --policy.n_action_steps | passos consumidos por chunk | retorna a 50, nunca acima de chunk_size (padrão 50) |
| --policy.train_expert_only | congela o VLM, treina o especialista | padrão falso, menos memória, algum custo no sucesso |
| --policy.gradient_checkpointing | recomputa em vez de armazenar ativações | padrão falso, a primeira alavanca quando uma execução não se encaixa |
| --peft.method_type=LORA | adaptadores LoRA em vez de pesos completos | precisa do extra peft, exemplo documentado é SmolVLA |
| --policy.rtc_training_max_delay | condicionamento de prefixo de ação para RTC | apenas na branch principal, não em 0.6.1, deve permanecer abaixo de chunk_size |
| --rename_map | mapeia colunas do dataset para features da política | necessário quando suas chaves de câmera diferem |
Sem quantis, você receberá ValueError: QUANTILES normalization mode requires q01 and q99 stats no primeiro batch. Recalcule as estatísticas, mas o resultado será salvo em $HF_LEROBOT_HOME/your_dataset, não no cache que --dataset.repo_id lê, então treine com --dataset.root apontando para lá ou faça push para o Hub. Ou ignore os quantis com --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', como faz o comando de referência do LIBERO.
Três conjuntos de padrões, e quais deles chegam ao treinador
A TrainConfig da openpi é a referência, a PI05Config da LeRobot é o que o lerobot-train usa quando você não especifica nada, e o formulário aqui envia um terceiro conjunto. A surpresa é a taxa de aprendizado: ambos os padrões upstream atingem o pico de 2.5e-5, enquanto a própria configuração pi05_libero da openpi e esta plataforma a elevam para 5e-5.
| Configuração | openpi TrainConfig | lerobot pi05 e lerobot-train | AY-Robots envia |
|---|---|---|---|
| Tamanho do lote | 32 | 8 | 1 |
| Taxa de aprendizado de pico | 2.5e-5, cosine decay | optimizer_lr 2.5e-5 | 5e-5 |
| Passos de treinamento | 30,000 | 100,000 | 30,000 |
| Intervalo de checkpoint | 1,000 steps | 20,000 steps | não no formulário |
| Semente | 42 | 1,000 | no formulário |
| Fragmento de ação | action_horizon 50 | chunk_size 50, n_action_steps 50 | não no formulário |
| Tipo de dado do peso | bfloat16 | float32 until you pass --policy.dtype | não no formulário |
| Acumulação de gradiente | no such knob, fsdp_devices instead | absent from every release so far | 16, and it is dropped |
A portabilidade é fiel? A equipe LeRobot ajustou o modelo base LIBERO por mais 6k passos e comparou com os números de referência da openpi em quatro suítes: 97.5 por cento de média contra 96.85, à frente no Libero 10, atrás no Spatial. A rota é uma escolha de ferramenta, não de qualidade.
- Mais de 10,000 horas de pré-treinamento de robôs por trás, então 50 episódios da sua tarefa podem ser suficientes.
- Ações contínuas: nenhum tokenizador para ajustar, nenhum limite de discretização nos seus ângulos de junta.
- A portabilidade LeRobot atinge 97.5 por cento na média LIBERO contra 96.85 da openpi, então a CLI mais amigável não custa nada mensurável.
- Caminhos eficientes em parâmetros em ambos os lados: variantes JAX LoRA da openpi, integração PEFT da LeRobot.
- O ajuste fino completo requer mais de 70 GB. O valor de 22.5 GB para LoRA é o número JAX da openpi; nenhum é publicado para pi05 sob PEFT.
- 485 ms por passo de ação, o mais lento dos cinco aqui: o dobro de SmolVLA, vinte e quatro vezes ACT.
- LeRobot v3.0 é necessário, então um conjunto de dados gravado para uma execução de GR00T precisa ser convertido, e vice-versa.
- Novas opções chegam primeiro no main: RTC e memória MEM em tempo de treinamento não estão na versão 0.6.1, então a documentação mais recente pode significar instalar do git.
A realidade de 485 ms, e onde deixa de ser utilizável
Isso decide o seu projeto, por isso vem antes da tabela de custos. A por passo de ação medida aqui para Pi0.5 é de 485 ms. Contra os outros quatro:
| Política | Inferência por passo de ação | Parâmetros | Nível de GPU | Episódios 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 |

O loop de controle nesses cinco modelos executa de 20 a 485 ms por etapa de ação. Viagens de ida e volta pela internet pública, somadas aos 485 ms, transformam uma política funcional em uma hesitante. A inferência remota é viável para operações lentas de pegar e colocar (pick-and-place), não para movimentos reativos rápidos. Preferimos dizer isso a vender uma demonstração que só funciona em uma LAN. Se o seu braço pausar entre os blocos, comece em política congela no meio do movimento.
O upstream tem uma resposta, e metade dela já está na versão que você pode instalar. O Real-Time Chunking gera o próximo bloco enquanto o braço ainda está executando o atual, e então guia os passos sobrepostos do novo bloco para permanecerem próximos à parte já executada, para que o braço não pare ou engasgue na junção. A forma de tempo de inferência foi incluída no changelog 0.4.2 para Pi0, Pi0.5 e SmolVLA e é uma flag de rollout, não um retreinamento:
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=60Isso não torna o modelo mais rápido. Ele esconde a lacuna: os 485 ms ainda são gastos, mas fora do caminho crítico, para que a fila não se esgote entre os blocos. A variante de tempo de treinamento do arXiv 2512.05964 vai além: o modelo aprende a condicionar-se a um prefixo de ação limpo, de modo que na inferência a sobreposição é preenchida (hard-inpainted) com timesteps de fluxo por ação em vez de guiada, e a passagem de retropropagação da guia desaparece. Durante o treinamento, ele amostra um comprimento de prefixo por exemplo e calcula a perda de fluxo no postfix restante. Essa flag existe apenas na versão principal (main), não na 0.6.1, e o atraso para o qual você treina deve permanecer abaixo de chunk_size.
Duas formas de obter um checkpoint Pi0.5
Você aluga ou possui uma placa de 80 GB, instala uma das stacks acima, converte seu dataset e supervisiona a execução. Você mantém todos os controles: JAX LoRA do openpi, adaptadores PEFT do LeRobot, ações relativas, mapeamentos de teclas personalizados. Você também mantém todas as falhas.
- Hardware: A100 80 GB ou H100, ou uma placa de 24 GB no caminho JAX LoRA do openpi.
- Configuração: uma tarde para a primeira execução, principalmente mapeamento de teclas e o tokenizer restrito.
- Não no formulário hospedado: adaptadores PEFT, ações relativas, RTC em tempo de treinamento, memória 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=1000Você escolhe o modelo e o dataset no formulário de treinamento, o backend aluga uma GPU em um mercado spot pela VRAM necessária, executa o treinador e escreve checkpoints para armazenamento de objetos. Pi0.5 é apenas na nuvem aqui. Guias existem para SO-100, SO-101, Koch v1.1 e LeKiwi.
| Configuração | O que a plataforma envia para Pi0.5 |
|---|---|
| Checkpoint base | lerobot/pi05_base |
| Tipo de política | pi05 |
| Tamanho do batch | 1 |
| Taxa de aprendizado | 5e-5 |
| Máximo de passos | 30000 |
| Acumulação de gradiente | 16, mas veja o aviso abaixo |
| Controles extras no formulário | seed, logFreq |
| Formato do dataset | LeRobot v3.0 |
| Tier de GPU | A100 80 GB ou H100 80 GB |
O treinador envia um valor de acumulação de gradiente de 16 e o lerobot 0.5.1 não possui uma flag para recebê-lo, então ele é descartado. Nenhum lerobot lançado possui um: o controle existe apenas no main, como --accelerator.gradient_accumulation.steps. O tamanho efetivo do batch aqui é 1, contra os 256 que a configuração pi05_libero do openpi usa. Vale a pena saber antes de ler uma curva de perda. O controle se aplica nas execuções de GR00T N1.7 e GR00T N1.5.
A inferência funciona da mesma forma: um pod é provisionado para servir a política e seu cliente local se comunica com ele. O pod possui um watchdog de inatividade e se autodestrói, para que uma aba esquecida não gere cobranças silenciosamente. A ressalva da latência se aplica, e é por isso que ACT a 20 ms frequentemente vence uma tarefa rápida.
Quando não funciona
| Sintoma | Causa mais provável |
|---|---|
| Execução rejeitada antes de iniciar | Dataset v2.1 mas Pi0.5 quer v3.0, ou o inverso para GR00T |
| ImportError, pacote datasets ausente | lerobot 0.6.x sem o extra de treinamento |
| ValueError sobre q01 e q99 no batch um | Nenhum quantil em meta/stats.json; recalcule ou use MEAN_STD |
| CUDA sem memória no passo 0 | Fine-tune completo abaixo de 70 GB; tente checkpointing ou train_expert_only |
| Erro 401 ou de repositório restrito | Licença do tokenizer PaliGemma não aceita |
| A perda cai, o robô não faz nada | Incompatibilidade de normalização, ou a política copia o estado |
| Braço pausa entre os chunks | Latência por passo mais ida e volta; a fila de chunks esgota |
| Funciona em uma configuração, falha em outra | Poucos episódios, ou todos em uma única configuração |
- Conjunto de dados rejeitado: v3 necessário
- Sem memória durante o treinamento
- A perda diminui, mas a política não faz nada
- A política congela no meio do movimento
- A política só funciona em uma configuração
- Tarefa de treinamento presa na fila
Quanto custa uma execução
Pi0.5 está na camada mais cara porque precisa de uma placa de 80 GB, e os preços spot variam, então o valor é uma faixa em vez de um preço. Para muitas tarefas SO-100, treine SmolVLA ou ACT na camada de 24 GB primeiro, confirme se a tarefa é aprendível, e só então dedique horas de A100 a ela. Treine sua primeira política descreve esse ciclo mais barato, e preços contém as camadas atuais.
| Camada | Políticas | Execução típica | Preço por hora | Custo por execução |
|---|---|---|---|---|
| A100 80 GB ou H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 a 6 horas | 1.20 a 2.00 USD | cerca de 4 a 12 USD |
| RTX 4090 ou qualquer placa de 24 GB | SmolVLA, ACT | 2 a 5 horas | 0.30 a 0.60 USD | cerca de 1 a 3 USD |

Antes de dedicar uma noite: GR00T N1.7 contra Pi0.5 e Pi0.5 contra SmolVLA apresentam os mesmos números lado a lado. A Arena contém 85 modelos VLA com 332 resultados de benchmark, cada um ligado à sua fonte, e o histórico da família está em nossa visão geral de VLA.
Treine Pi0.5 sem construir a stack
Escolha o conjunto de dados e os hiperparâmetros num formulário. O backend aluga uma placa de 80 GB no mercado spot, executa o treinador e escreve os checkpoints para o armazenamento de objetos. Guias para SO-100, SO-101, Koch v1.1 e LeKiwi.
Abrir os guias de treinoPosso fazer fine-tuning de Pi0.5 numa RTX 4090?▾
Não é um fine-tuning completo: openpi lista mais de 70 GB para isso, então uma A100 de 80 GB ou uma H100. O seu valor de 22.5 GB para LoRA pertence ao caminho JAX; a implementação PyTorch não tem LoRA. A integração PEFT do LeRobot existe, mas o seu exemplo documentado é SmolVLA e nenhum valor de VRAM é publicado para pi05.
Quantos episódios preciso?▾
Cinquenta, o mesmo mínimo que GR00T e ACT; apenas SmolVLA vai mais baixo, com 30. O checkpoint base carrega mais de 10.000 horas de pré-treino, então o fine-tuning adapta-se em vez de aprender do zero: 50 episódios limpos e variados superam duzentos de uma única configuração.
Qual é a diferença entre --policy.path e --policy.pretrained_path?▾
--policy.path carrega pesos e o config.json do checkpoint, então configurações armazenadas como n_action_steps são herdadas e --policy.type deve ser omitido. --policy.pretrained_path carrega apenas os pesos: os nomes das features vêm do seu conjunto de dados, as configurações armazenadas são redefinidas, --policy.type é obrigatório. É por isso que o comando LIBERO passa n_action_steps=10 e empty_cameras=1 explicitamente; caso contrário, eles voltam para 50 e 0.
A versão aberta me dá o Pi0.5 completo do artigo?▾
Não. Ambos suportam apenas o cabeçalho de ação de flow matching. A fase de pré-treino de token discreto com o tokenizador de ação FAST e a previsão de subtarefas de alto nível não foram lançadas, e o cartão lerobot/pi05_base adiciona RL a essa lista, embora o artigo pi0.5 não descreva nenhuma fase de aprendizado por reforço. Você treina uma política de baixo nível condicionada a uma string de linguagem que você fornece, não um modelo que decompõe uma tarefa longa por si só.
Contra quais versões este guia foi escrito?▾
openpi no main e lerobot 0.6.1, o lançamento desde 3 de agosto de 2026, ambos lidos em 23 de agosto de 2026. Os conjuntos de dados v3.0 chegaram com 0.4.0 em outubro de 2025. 0.6.0 tornou o pacote base leve, então lerobot[pi] sozinho não instala mais uma stack de treino, e moveu a implantação para lerobot-rollout. O RTC em tempo de treino está apenas no main; o treinador hospedado aqui executa 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