LeRobot documentation
FineART-VLA
FineART-VLA
FineART-VLA é construído sobre o π0.5 da Physical Intelligence e sua implementação openpi, por meio da política Pi05 do LeRobot. Ele estende essa base com uma cabeça de linguagem PaliGemma treinável e um runtime que alterna entre a geração de linguagem e a geração de ações. Um único checkpoint pode prever uma subtarefa de baixo nível, atualizar opcionalmente a memória ou responder a perguntas visuais, e condicionar seu especialista de ações de flow-matching nesse texto.
Use Pi05 quando você precisar apenas de ações condicionadas à tarefa. Use FineART-VLA quando a política precisar gerar ou consumir linguagem intermediária durante um rollout.
Como o FineART-VLA difere do Pi05
| Capacidade | Pi05 | FineART-VLA |
|---|---|---|
| Modelo de ação | Prefixo de visão-linguagem do PaliGemma + especialista de ação do Gemma | Mesma arquitetura base |
| Cabeça de idioma | Não treinado para geração em tempo de execução | Reativado e treinado com entropia cruzada de texto |
| Condição de ação | Tarefa do episódio | Subtarefa de baixo nível ativa mais estado do robô normalizado |
| Alvos de treinamento | Ações de flow-matching | Ações de fluxo, texto selecionado pela receita e tokens opcionais de ação FAST |
| Requisito do conjunto de dados | Imagens padrão, estado, ações e tarefa | Os mesmos campos, além de anotações de idioma para cada capacidade de idioma que você treina |
| Rollout | Política direta de tarefa para ação | Loop hierárquico de tarefa → subtarefa → ação, com memória e VQA opcionais |
O FineART-VLA pode ser inicializado a partir de um checkpoint do Pi05. A arquitetura da política permanece compatível, enquanto o FineART-VLA constrói seus próprios processadores para que os rótulos de receita e os rótulos FAST não sejam substituídos silenciosamente pela pilha de processadores do Pi05.
Instalar
Instale o LeRobot com as dependências do FineART-VLA:
git clone https://github.com/huggingface/lerobot.git
cd lerobot
python -m venv .venv
source .venv/bin/activate
pip install -e ".[fineart_vla]"O extra fineart_vla inclui as dependências do PaliGemma/FAST. Para os kernels de treinamento fundidos opcionais em Linux com GPU CUDA, instale ".[fineart_vla_kernels]" no lugar. Ele adiciona o liger-kernel e o pacote kernels do Hugging Face usado pelos backends do FlashRT. O Liger é opt-in com --policy.use_liger_kernels=true: ele aplica patches no RoPE/GeGLU do PaliGemma dos transformers para o processo inteiro, de modo que outras políticas baseadas em PaliGemma carregadas no mesmo processo também executam com os kernels fundidos.
Prepare dados anotados com idioma
O FineART-VLA não infere subtarefas supervisionadas de um dataset LeRobot normal durante o treinamento. O dataset deve conter os alvos de linguagem usados pela receita selecionada nas colunas opcionais language_persistent e language_events.
No mínimo, anote uma linha do tempo de subtask contínua para que cada quadro de treinamento tenha uma instrução de baixo nível ativa. Adicione anotações de memory, VQA, interjeições e fala apenas se a receita treinar essas capacidades.
FineART-VLA incorpora sua receita padrão em FineARTVLAConfig, assim como o EO-1. Ele amostra
30% de previsão de tarefa de alto nível → subtarefa e 70% de treinamento de ação
condicionada a subtarefa de baixo nível. Cada configuração possui seu próprio dicionário de receita, e os
checkpoints salvos carregam esse dicionário para a inferência.
Use --policy.recipe_path=/path/to/custom.yaml para substituir o padrão.
As receitas compartilhadas em src/lerobot/configs/recipes/ mantêm a semântica da main;
o FineART-VLA não as substitui. Para treinamento apenas de objetivo, use uma receita inline com
uma única mensagem de usuário de baixo nível contendo ${task}, ou defina recipe=None e
desative as perdas de texto/FAST para o pipeline PI05 simples.
O padrão fatora a inferência como π(a|o, subtask)·π(subtask|o, task). Uma receita de sequência conjunta personalizada requer um processador de runtime correspondente que renderize a tarefa e o trecho gerado pelo assistente com as mesmas marcas causais do treinamento. O antigo construtor de prompt conjunto do lado da política não é mais usado pelo rollout.
O Rollout controla a cadência de planejamento (--autosteer_interval_s=3), os comandos interativos e a programação síncrona/RTC. O FineART-VLA apenas gera texto quando consultado; as chamadas de ação comuns nunca geram outro subtask às escondidas do runtime.
Os rascunhos combinados de memória/subtarefa não são o padrão e exigem um procedimento personalizado, além de um controlador de runtime consciente da memória. Mantenha memory_scratchpad=false para a geração comum de subtarefas; os checkpoints de rascunho mais antigos mantêm sua guarda explícita contra a passagem de respostas combinadas diretamente para o controle de ação.
Use lerobot-annotate para gerar essas colunas. O repositório inclui um launcher do Hugging Face Jobs que você pode editar para os seus conjuntos de dados de origem e de destino. Para uma execução local de anotação, primeiro instale pip install -e ".[annotations]":
HF_TOKEN=hf_... uv run python examples/annotations/run_hf_job.py
Antes de uma longa execução de treinamento, inspecione vários episódios e verifique se as subtarefas estão temporalmente corretas e cobrem toda a demonstração. Consulte Pipeline de Anotação para geração e validação, e Colunas de Linguagem e Receitas para o esquema e o resolvedor de receitas.
If a dataset has no language columns, recipe rendering becomes a no-op and FineART-VLA falls back to the plain Pi05 prompt path. This is useful for compatibility but does not train the language planner.
Treinar FineART-VLA
Este exemplo inicializa o FineART-VLA a partir de lerobot/fineart_vla_base, o checkpoint treinado no meio do processo no FineART para prever seu próprio próximo subtask, e treina a receita de subtask 70/30 embutida. --policy.path carrega a própria configuração do checkpoint base, de modo que o fine-tuning mantém o layout de tokens FAST (fast_skip_tokens) e a receita com a qual a base foi treinada; as outras flags --policy.* sobrescrevem essa configuração.
lerobot-train \
--dataset.repo_id=${HF_USER}/my_language_annotated_dataset \
--policy.path=lerobot/fineart_vla_base \
--policy.tokenizer_max_length=256 \
--policy.dtype=bfloat16 \
--policy.device=cuda \
--policy.freeze_vision_encoder=false \
--policy.gradient_checkpointing=true \
--batch_size=8 \
--steps=30000 \
--output_dir=outputs/fineart_vla \
--job_name=fineart_vla \
--trackio.enable=trueComece com uma execução pequena e confirme no dashboard do Trackio que as perdas se comportam como esperado antes de aumentar a escala.
Para começar a partir do checkpoint simples do PI0.5, mantenha a configuração padrão do FineART-VLA e aponte --policy.pretrained_path para ele: --policy.type=fineart_vla --policy.pretrained_path=lerobot/pi05_base. Os pesos no formato OpenPI são convertidos no carregamento, e as perdas de texto e FAST começam a partir da cabeça de linguagem do PaliGemma, em vez de a partir do treinamento intermediário do FineART.
Principais controles de treinamento
| Opção | Padrão | Propósito |
|---|---|---|
policy.recipe_path | None | Substituição opcional da receita de subtarefas 70/30 incorporada |
policy.text_loss_weight | 1.0 | Peso da entropia cruzada da cabeça de idioma; 0 desativa o treinamento de texto |
policy.flow_loss_weight | 10.0 | Peso da perda de fluxo de ação contínua |
policy.enable_fast_action_loss | true | Adiciona supervisão de tokens de ação FAST discretos |
policy.fast_action_loss_weight | 1.0 | Peso da entropia cruzada FAST |
policy.knowledge_insulation | true | Bloqueia os gradientes da ação-perda através do caminho K/V do VLM |
policy.flow_num_repeats | 5 | Reutiliza um prefixo de VLM para alvos de desruido independentes |
policy.lm_head_lr_scale | 1.0 | Escala a taxa de aprendizado da cabeça de linguagem; 1.0 usa a taxa base |
policy.fast_skip_tokens | 1152 | FAST id offset; ignora <seg>+<loc> para que VQA e FAST nunca conflitem |
fast_skip_tokens=1152 posiciona os códigos FAST abaixo da faixa de <loc> do PaliGemma.
A convenção do pi0-FAST do openpi é 128 (os FAST ocupam os ids de <loc>); use esse
valor apenas para manter compatibilidade de pesos com checkpoints treinados dessa forma, e
evite combiná-lo com a receita VQA, cujos alvos de <loc> compartilhariam
linhas de incorporação com os códigos FAST.
Os pesos de perda são pontos de partida, não constantes independentes do conjunto de dados. Acompanhe a perda de fluxo e as perdas de texto/FAST separadamente e inspecione as subtarefas geradas, em vez de selecionar um checkpoint com base apenas na perda total.
Tokenizador FAST específico para o conjunto de dados
Por padrão (--policy.auto_fit_fast_tokenizer=true), o treinamento ajusta um tokenizer FAST no conjunto de dados de treinamento, partindo de --policy.action_tokenizer_name, e o faz em cache em --policy.fast_tokenizer_cache_dir. Isso também se aplica ao fazer fine-tuning a partir de um checkpoint, como lerobot/fineart_vla_base, para que os alvos FAST correspondam à distribuição de ações do novo robô. O tokenizer ajustado é salvo dentro dos artefatos do processador do checkpoint, para que a inferência o reutilize. Defina --policy.auto_fit_fast_tokenizer=false para usar action_tokenizer_name sem alterações.
Desempenho do treinamento
O FineART-VLA usa caminhos de treinamento otimizados por padrão:
- lotes repetidos de alvos de fluxo e projeções de sufixo, em vez de reproduzir pequenas operações em Python;
- caches máscaras de ação constantes e calcula as posições RoPE uma vez por forward;
- seleciona a implementação de entropia cruzada de texto/FAST a partir da forma e da esparsidade do alvo;
- pula o backward matematicamente morto do VLM/visão em lotes isolados por conhecimento, apenas de fluxo;
- usa checkpointing nativo de camadas SigLIP não reentrantes quando o checkpointing de gradientes está habilitado; e
- mantém os kernels Liger RoPE/GeGLU, evitando o patch de LayerNorm mais lento em formatos SigLIP.
Os backends de treinamento opcionais estão desativados por padrão:
| Opção | Quando testá-lo |
|---|---|
policy.use_flashrt_adarms=true | RMSNorm adaptável fundida e resíduos com gate em GPUs CUDA compatíveis |
policy.use_compiled_text_ce=true | Buckets de CE de logits materializados compilados |
policy.use_compiled_vision=true | Visão compilada apenas quando a passagem de visão não possui gradientes |
policy.use_flex_attention=true | Configurações de CUDA com isolamento de conhecimento e flow_num_repeats > 1; caso contrário, o SDPA é utilizado |
policy.use_manual_attention=true | Formas explicitamente perfisadas em que a atenção materializada é mais rápida |
policy.manual_attention_scope=action | Restringe a atenção manual às consultas de ação |
Não ative todos os backends de forma cega. Flex e atenção manual são mutuamente exclusivos, e as alternativas de atenção/AdaRMS exigem isolamento de conhecimento. A configuração com melhor desempenho nos benchmarks usou CE de texto compilado e FlashRT AdaRMS, com Flex/atenção manual e visão compilada desativados.
Desempenho de inferência
O FineART-VLA possui dois loops de inferência, e ambos evitam codificar repetidamente o prefixo multimodal de alto custo:
- Action denoising codifica o prefixo de imagem/linguagem uma única vez, reutiliza seu cache de KV entre as etapas de fluxo, constrói máscaras de sufixo de ação no dispositivo e recorta o K/V temporário do sufixo em vez de clonar o cache do prefixo. Ele cria o agendamento de timestep no dispositivo uma vez por chunk, preservando a aritmética histórica de timestep. Esse detalhe de implementação não estabelece uma aceleração de ponta a ponta sem benchmarking.
- Decodificação de linguagem usa cache de KV autoregressivo, de modo que cada novo token processa apenas o token amostrado contra as chaves de imagem/linguagem em cache, em vez de reexecutar o prefixo completo.
O runtime compartilhado executa a linguagem e as ações em taxas diferentes. Aumente --autosteer_interval_s quando uma subtarefa permanecer válida por mais tempo, ou use /subtask para fornecer uma instrução diretamente, sem geração de linguagem. Um intervalo mais longo reduz o custo de geração, mas também diminui a velocidade de replanejamento.
Executar um checkpoint
Use o lerobot-rollout com a configuração de robô/câmera correspondente ao checkpoint, --interactive=true e --autosteer_interval_s=3. Escolha --inference.type=sync ou --inference.type=rtc. No terminal interativo, /autosteer <goal> habilita subtarefas geradas, /subtask <instruction> fornece uma manualmente e /start inicia o controle do robô. Consulte Controle de linguagem interativo para a configuração completa do hardware, o comportamento de segurança e os controles de gravação. As opções de CLI do adaptador anteriores, --sim, --mode e --high_level_hz, não fazem parte desta interface.
Solução de problemas
- Gradientes de perda de fluxo elevados: O FineART-VLA executa a atenção conjunta de prefixo/ação com KI-off no backend matemático do SDPA do PyTorch com aritmética de atenção em FP32, convertendo sua saída de volta para o dtype do modelo (o PI0.5 padrão mantém sua atenção eager). Isso evita a atenção de precisão reduzida, que pode desestabilizar os gradientes em passos de fluxo baixos com ativações de consulta/chave grandes. Os checkpoints existentes e as camadas de normalização permanecem inalterados; o KI-off ainda treina através das chaves e valores do VLM. Monitore a norma do gradiente pré-clipping separada de
flow_loss,text_lossem vez de confiar apenas na perda total finita. - Sem perda de texto ou subtarefas geradas: confirme que a receita selecionada pode vincular as anotações nos quadros amostrados e que
policy.text_loss_weight > 0. - Subtarefas parecem plausíveis, mas as ações falham: verifique as fronteiras das subtarefas, as estatísticas normalizadas de estado/ação e a presença de amostras de receita de baixo nível.
- O texto colapsa em tokens repetidos ou de localização: inspecione a cobertura do alvo de texto, a taxa de aprendizado da cabeça de idioma e o equilíbrio entre as perdas de fluxo, FAST e texto.
- Falta de memória: reduza primeiro o tamanho do lote e, em seguida, ative o checkpointing de gradiente. Não ative backends de atenção compilados ou alternativos sem perfilar sua memória com base na contagem de câmeras.
- Implantação lenta: separe a latência de ação da latência de linguagem e, em seguida, ajuste
--autosteer_interval_s(com que frequência um novo subtarefa é gerado) e--policy.num_inference_steps(etapas de desruidamento do fluxo).
Citação
Se você usar FineART-VLA ou o conjunto de dados FineART, por favor, cite:
@misc{choghari2026fineart,
title = {FineART: Fine-Grained Annotated Robotic Trajectory Dataset and Vision-Language-Action Model for Bimanual Manipulation},
author = {Choghari, Jade and Kooijmans, Pepijn and Agarwal, Mansi and Ciftci, Yusuf Umut and Doriwala, Aseem and Weaver, Catherine and Sivapurapu, Mouli and Yang, Kai and Lee, Jackson and Wolf, Thomas and Mannam, Pragna},
year = {2026},
}FineART-VLA é construído com base em π₀.₅ e knowledge insulation da Physical Intelligence.
Licença
Este modelo segue a Apache 2.0 License, em conformidade com o repositório original OpenPI, do qual o backbone PI0.5 foi adaptado.
Update on GitHub