
Treine um Action Chunking Transformer do zero em um SO-100 com lerobot: a configuração act, chunk_size e n_action_steps, o cronograma de 100000 passos, inferência de 20 ms.
ACT é a exceção entre as políticas SO-100. GR00T N1.7 e N1.5 começam de nvidia/GR00T-N1.7-3B e nvidia/GR00T-N1.5-3B, Pi0.5 de lerobot/pi05_base. ACT começa do zero: não há checkpoint base, porque não é um modelo de fundação. É um transformador de aproximadamente 80 milhões de parâmetros que você treina do zero em uma única tarefa, no seu braço, sob sua iluminação.
É também por isso que ele executa uma etapa de controle em 20 ms, enquanto um VLA de 3 bilhões de parâmetros precisa de 152 a 485 ms, e custa de 1 a 3 USD por execução em vez de 4 a 12. Este guia percorre o caminho manual com lerobot em um SO-100: gravação, a configuração act, o que chunk_size e n_action_steps controlam, o cronograma de 100000 etapas, o rollout. Em seguida, o mesmo trabalho em AY-Robots, incluindo onde a plataforma não ajuda.
O que você precisa saber
- •ACT treina do zero: sem modelo base, sem pré-treinamento, sem entrada de linguagem. Um checkpoint, uma tarefa.
- •O artigo: cerca de 80 M parâmetros, aproximadamente 5 horas em uma RTX 2080 Ti de 11 GB, 0.01 s de inferência.
- •Padrões do lerobot: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
- •Em AY-Robots: 20 ms por etapa, o mais rápido dos cinco. Mínimo de 50 episódios, LeRobot v3.0, uma placa de 24 GB, 1 a 3 USD por execução.
- •Ele vence em uma tarefa que já viu e perde no momento em que você deseja condicionamento de linguagem.
Verificado em 23 de agosto de 2026 contra lerobot 0.6.x: pyproject.toml on main reads version = "0.6.2", newest tag v0.6.1, 3 August 2026. Um tutorial começando com python lerobot/scripts/train.py antecede os pontos de entrada de console lerobot-train, lerobot-record e lerobot-rollout.
O que ACT realmente é
Action Chunking with Transformers vem do artigo ALOHA, Aprendizagem de Manipulação Bimanual Detalhada com Hardware de Baixo Custo, por Zhao, Kumar, Levine e Finn, arXiv, 23 de abril de 2023. O equipamento grava a 50 Hz com quatro webcams transmitindo 480x640 a 30 fps: duas nas garras, uma superior, uma frontal. O resumo afirma seis habilidades com 80 a 90 por cento de sucesso, entre elas abrir um copo de condimento translúcido e encaixar uma bateria, a partir de 10 minutos de demonstrações.
O corpo é mais útil ao planejar uma sessão de gravação: 50 demonstrações por tarefa, exceto Thread Velcro com 100, o que representa 10 a 20 minutos de dados e 30 a 60 minutos de tempo real (wall-clock time) uma vez que as reinicializações são contabilizadas. O sucesso também não é uniforme: Thread Velcro termina em 20 por cento, Put On Shoe em 92, Cup Open 84, Prep Tape 64.
| Hiperparâmetro | Artigo ALOHA, Tabela III | lerobot no main |
|---|---|---|
| taxa de aprendizado | 1e-5 | optimizer_lr = 1e-5 |
| tamanho do lote | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| camadas do codificador / decodificador | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| tamanho do chunk k | 100 | chunk_size = 100 |
| dimensão latente de z | ausente; Fig. 11 mostra uma projeção de 32 para 512 | latent_dim = 32 |
| agregação temporal | ausente; --temporal_agg no código de referência | temporal_ensemble_coeff = None |
O artigo lista 7 camadas de decodificador, o lerobot envia 1, deliberadamente. O comentário em configuration_act.py diz que a implementação original tem um bug que significa que apenas a primeira camada é usada, citando o problema 25 em tonyzhaozh/act: o cabeçalho de ação lê hs[0], então todas as sete camadas são executadas, mas apenas a primeira saída atinge a previsão. Esse problema está aberto e sem resposta desde 23 de abril de 2024. O lerobot corresponde ao comportamento que produziu os resultados publicados, não ao número impresso. Aumente --policy.n_decoder_layers e você treinará um modelo que o artigo nunca avaliou.
O agrupamento de ações é a ideia principal
A clonagem comportamental comum mapeia uma observação para uma ação, e os erros se acumulam: um desvio coloca o braço fora da distribuição, produzindo uma ação pior, e trinta passos depois a garra não está nem perto do objeto. Agrupamento de ações prevê k ações de uma vez e as executa, diminuindo o horizonte efetivo por um fator de k. Também lida com um incômodo específico de dados humanos: teleoperadores pausam, e uma política markoviana de passo único não consegue modelar uma pausa que depende do que veio antes.
O artigo abla k em vez de afirmá-lo. Com o agrupamento temporal desativado, em média em quatro configurações, o sucesso aumenta de 1 por cento em k = 1 para 44 por cento em k = 100, depois diminui em 200 e 400 à medida que a política se aproxima do controle em malha aberta. Essa curva é o motivo pelo qual o padrão é 100.
- chunk_size: quantas ações futuras o decodificador prevê por passagem direta. Padrão 100.
- n_action_steps: quantas delas você executa antes de consultar novamente. Padrão 100, então o lerobot executa o chunk inteiro em loop aberto.
- O lerobot valida
n_action_steps <= chunk_sizee levanta umValueErrorse você inverter a ordem.
O que importa operacionalmente é o chunk_size dividido pela taxa de quadros. A 30 fps, que os exemplos SO-100 do lerobot usam, um chunk de 100 compromete cerca de 3,3 segundos a partir de uma observação. Se a tarefa precisar de uma correção dentro dessa janela, diminua n_action_steps, não chunk_size: você mantém a previsão longa e reobserva com mais frequência.
# predict 100 actions, re-query after 25 of them (about 0.8 s at 30 fps)
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--policy.chunk_size=100 \
--policy.n_action_steps=25 \
--policy.device=cudaDefina --policy.temporal_ensemble_coeff e o lerobot exigirá n_action_steps = 1, levantando um NotImplementedError caso contrário. O ensembling consulta a política a cada passo de tempo e combina as previsões sobrepostas para esse passo de tempo com pesos w_i = exp(-m * i), sendo w_0 atribuído ao mais antigo. O artigo indica 3,3 por cento para ACT: real, mas modesto, e multiplica a contagem de inferências pelo comprimento do chunk. Acessível a 20 ms por passo, não a 485 ms. Veja latência de inferência.
Quando o ACT supera um modelo de base
As cinco políticas treináveis lado a lado, com os números que a AY-Robots mede e usa para dimensionar a GPU que aluga.
| Política | Família | Parâmetros | Por passo | Nível de GPU | Mín. episódios | Conjunto de dados |
|---|---|---|---|---|---|---|
| ACT | Transformer de fragmentação, do zero | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | VLA Compacto | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | Base VLA, cabeça de difusão | ~3 B (~40 M treinados) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | Base VLA, predecessor | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA de correspondência de fluxo, ver correspondência de fluxo | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- 20 ms por passo de ação, o mais rápido dos cinco, em uma placa de 24 GB, não uma A100.
- 1 a 3 USD por execução contra 4 a 12 para a classe 3 B.
- Preciso em trabalhos com muito contato que ele viu: 88 e 96 por cento em Slide Ziploc e Slot Battery, onde métodos anteriores nunca passaram da primeira fase.
- Sem condicionamento de linguagem: a string da tarefa é ignorada, então um checkpoint é uma tarefa.
- Sem conhecimentos prévios semânticos: tudo o que ele sabe veio dos seus 50 episódios.
- Generalização restrita: mova uma câmera e você estará retreinando.
- Falha silenciosamente: a perda diminui, o braço não faz nada, os logs não dizem nada.
- A vantagem de velocidade só ajuda se a inferência estiver próxima dos servos.
Escolha ACT quando a tarefa e a cena são fixas e o movimento deve ser rápido e preciso. Escolha um modelo de visão-linguagem-ação quando um checkpoint deve cobrir várias instruções. Duas páginas abordam a decisão diretamente: ACT vs SmolVLA e ACT vs GR00T N1.7. Para benchmarks publicados, a entrada da arena ACT vincula cada número à sua fonte.
O que você precisa antes de começar
Um braço seguidor, um braço líder para teleoperação, pelo menos uma câmera, uma GPU de 24 GB. ACT lê apenas imagens e posições de juntas. Duas câmeras é o ideal: uma visão frontal fixa para onde as coisas estão, uma câmera de pulso para o que o efetor final está prestes a tocar, como no ALOHA.
| Braço | Servos | Tensão | Custo das peças | Status |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | Suporte completo, braço de referência |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | Suporte completo |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | Compatível |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | Compatível |
Os SO-100 e SO-101 utilizam servos Feetech STS3215 em um trilho de 7.4 V. Alimentá-los com 12 V os destrói, silenciosamente o suficiente para que as pessoas culpem o software primeiro, e uma fonte de 12 V da Koch se encaixa fisicamente em uma placa SO-100. Verifique a etiqueta. Sintomas: servo não responde, braço treme e depois cede. Veja também SO-100 vs SO-101.
Do braço nu ao conjunto de dados gravado
O fluxo abaixo é lerobot 0.6.x. Ignore-o se você já tiver um braço calibrado e um conjunto de dados. Caso contrário, o guia de primeiros passos do SO-100 cobre a montagem, o passo a passo de gravação cobre a captura e a documentação do conjunto de dados o formato.
- 1Instalar o lerobot com os extras corretos
A gravação requer `core_scripts`, o treinamento `training`, os servos Feetech `feetech`. Python 3.12+.
bashconda create -y -n lerobot python=3.12 conda activate lerobot conda install ffmpeg -c conda-forge pip install 'lerobot[core_scripts,training,feetech]' lerobot-info - 2Encontrar a porta USB de cada braço
Execute-o com ambos os braços conectados, desconectando um quando solicitado. No Linux, pode ser necessário abrir as permissões do nó.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3Definir os IDs dos motores e a taxa de transmissão
No SO-100, isso acontece antes da montagem: ao contrário do SO-101, os conectores ficam inacessíveis depois de montado. O script percorre o barramento um motor de cada vez a partir da garra, escrevendo IDs na EEPROM.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4Calibrar ambos os braços
Defina cada junta para o meio de seu alcance, pressione Enter e, em seguida, mova cada uma por todo o seu alcance. A calibração permite que uma política treinada em um braço seja executada em outro. Reutilize o mesmo
id.bashlerobot-calibrate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower lerobot-calibrate \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader - 5Teleoperar uma vez com as câmeras ligadas
A regra geral do lerobot: você deve ser capaz de realizar a tarefa olhando apenas para as imagens da câmera. Se você não conseguir, o ACT também não conseguirá. Isso detecta mais conjuntos de dados ruins do que a depuração posterior.
bashlerobot-teleoperate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --display_data=true - 6Gravar 50 episódios
50 é o mínimo da AY-Robots e o que o ALOHA usava por tarefa. O lerobot aconselha 10 por localização de objeto, câmeras fixas, agarre consistente.
nencerra um episódio,rregrava,qpara e codifica.bashHF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}') lerobot-record \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --dataset.repo_id=${HF_USER}/so100_cube \ --dataset.num_episodes=50 \ --dataset.single_task="Grab the black cube and put it in the bin" \ --display_data=true

O ACT não tem conhecimentos prévios para recorrer, então cada inconsistência se torna permanente. As três mais custosas: uma câmera ligeiramente movida entre o episódio 20 e 21, luz que mudou porque você gravou metade do conjunto à tarde, um agarre feito de duas maneiras. Cada uma resulta em uma curva de perda com aparência perfeita e um braço que vai para o lugar errado. Veja a perda diminui, a política não faz nada, a política só funciona em uma configuração e coleta de dados de treinamento de alta qualidade.
Antes do treinamento, reproduza pelo menos cinco episódios. O formato de conjunto de dados LeRobot armazena fluxos de câmera, estados de junta e ações por episódio, e a reprodução empurra essas ações de volta para o braço. Se a reprodução não realizar a tarefa, os dados não a contêm e o treinamento não a inventará.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0Treinando a política ACT
Este é o comando completo. Tudo o que é específico do ACT já é um padrão, e é por isso que a página ACT do lerobot recomenda começar com eles.
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--output_dir=outputs/train/act_so100_cube \
--job_name=act_so100_cube \
--policy.device=cuda \
--wandb.enable=true \
--policy.repo_id=${HF_USER}/act_so100_cube--policy.type=act carrega o ACTConfig, que se adapta ao número de motores e câmeras que seu conjunto de dados registrou, então você nunca declara o formato da observação. --wandb.enable=true é opcional e vale a pena: a curva de perda é o único sinal barato em uma execução de 100000 passos. O agendamento vem da configuração de treinamento do lerobot, não do ACTConfig: 100000 passos, lote 8, seed 1000, um checkpoint a cada 20000 passos, com registro a cada 200.
Uma execução completa deixa cinco diretórios de checkpoint, de 020000 a 100000, mais um último symlink. Mantenha todos eles: a melhor política muitas vezes não é a última.
| Configuração | Padrão lerobot | Formulário ACT AY-Robots | Comentário |
|---|---|---|---|
| tamanho do lote | 8 | 8 | Diminua-o primeiro se atingir os limites da VRAM. |
| taxa de aprendizado | 1e-5 | 1e-5 | O mesmo que no artigo ALOHA. |
| passos máximos | 100000 | 100000 | Aproximadamente onde um conjunto de 50 episódios para de melhorar. |
| acumulação de gradiente | 1 | 1, não se aplica | Altere o tamanho do lote em vez disso. |
| semente | 1000 | exposto | O ponto de entrada tyro do GR00T não tem semente; as execuções ACT são as reproduzíveis. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editável | Horizonte de previsão e execução. Diminua o segundo, não o primeiro. |
| frequência de checkpoint | 20000 | não exposto | saveSteps é um controle do GR00T aqui. |
ACT com tamanho de lote 8 e duas câmeras 640x480 se encaixa confortavelmente em 24 GB. Ele para de se encaixar quando as pessoas aumentam o tamanho do lote para velocidade, ou o alimentam com os quadros 1920x1080 que um exemplo de gravação do lerobot mostra. Dois backbones ResNet-18 a 1080p têm um perfil de memória muito diferente. Reduza --batch_size para 4 antes de alugar uma placa maior. Veja falta de memória no treinamento.
Duração: cerca de 5 horas em uma RTX 2080 Ti de 11 GB no artigo, algumas horas para 100 mil passos por página ACT do lerobot, 2 a 5 horas na camada de 24 GB da AY-Robots. Não o interrompa. O README do repositório de referência diz que uma política instável ou com pausas geralmente só precisa de mais treinamento, porque o sucesso e a suavidade continuam a melhorar depois que a perda se estabiliza: para dados do mundo real, são necessários pelo menos 5000 épocas, ou 3 a 4 vezes o comprimento novamente após o platô.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueExecutando a política treinada no braço
A implantação usa lerobot-rollout. As chaves da câmera devem corresponder às gravadas: uma política treinada em front e wrist não aceitará cam0 e cam1, e rename_map não ajuda, pois precisa de um checkpoint pré-treinado. A string da tarefa pode ser omitida; o próprio exemplo do lerobot a marca como opcional para ACT.
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/act_so100_cube \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
--display_data=true \
--duration=60A avaliação costumava ser executada através de lerobot-record --policy.path=.... Na versão 0.6.x, é lerobot-rollout com um seletor --strategy.type: base, sentry (gravação com upload automático), highlight (buffer circular salvo por tecla), dagger (humano no loop) e episodic. Em 23 de agosto de 2026, a página de documentação do ACT ainda diz "usando o comando lerobot-record" diretamente acima de um bloco que executa lerobot-rollout. Siga o comando, não a frase.
Para fixar um checkpoint em vez do modelo final, adicione --policy.pretrained_revision. Isso exige que a execução tenha começado com --save_checkpoint_to_hub=true, desativado por padrão: sem ele, o lerobot envia o modelo final e nada mais. Com ele, cada checkpoint é marcado com seu passo preenchido com zeros, então --policy.pretrained_revision=060000 recupera o de 60000 passos. Compará-lo com o de 100000 no braço real é o experimento mais barato disponível.
Duas rotas para o mesmo checkpoint
Tudo acima é a rota manual e funciona. A rota da plataforma troca controle por não possuir uma GPU ou um ambiente Python.
- Instale o lerobot 0.6.x com
core_scripts,training,feetech, ffmpeg. - Encontre portas, defina IDs de motor, calibre ambos os braços, grave 50 episódios.
- Reproduza alguns episódios para confirmar que os dados contêm a tarefa.
- Alugue ou possua uma GPU de 24 GB, combine CUDA e PyTorch, execute
lerobot-train --policy.type=act. - Espere algumas horas, depois execute
lerobot-rolloutna máquina junto ao braço.
# the two commands that matter, end to end
lerobot-record --robot.type=so100_follower --robot.port=/dev/ttyACM0 \
--teleop.type=so100_leader --teleop.port=/dev/ttyACM1 \
--dataset.repo_id=${HF_USER}/so100_cube --dataset.num_episodes=50 \
--dataset.single_task="Grab the black cube"
lerobot-train --dataset.repo_id=${HF_USER}/so100_cube --policy.type=act \
--output_dir=outputs/train/act_so100_cube --policy.device=cudaControle total: edite configuration_act.py, adicione uma câmera, faça um fork do treinador. Para pesquisa, em vez de entregar uma tarefa, uma plataforma é uma distração.
- Grave com o cliente de desktop, ou traga um ID de repositório Hugging Face ou um conjunto de dados local.
- Abra o guia ACT no SO-100 e escolha o modelo e o conjunto de dados. Os padrões são os do lerobot; chunkSize, nActionSteps, seed e logFreq são editáveis.
- O backend aluga uma GPU dimensionada pela VRAM e grava checkpoints no armazenamento de objetos.
/api/inference/podentão serve a política para o cliente robô local. Um watchdog ocioso destrói o pod, para que nada seja cobrado silenciosamente.- As mesmas operações existem na CLI, no servidor MCP e na documentação de treinamento.
Não corrige seus dados: um conjunto de dados com uma câmera movida treina exatamente tão mal aqui, e o formulário não consegue detectá-lo. Nem remove o problema de latência. O loop de controle é de 20 a 485 ms por etapa de ação, com viagens de ida e volta pela internet pública adicionais, e o ACT é o mais prejudicado porque sua etapa é a mais curta: 60 ms é uma desaceleração de 12 por cento nos 485 ms do Pi0.5, mas quatro vezes a etapa nos 20 ms do ACT. A inferência remota é adequada para operações lentas de pegar e colocar, não para movimentos reativos rápidos.

O que realmente dá errado
Quase nenhuma da dificuldade está no comando de treinamento. Ela está nas coisas ao redor, ordenadas pela frequência com que causam problemas na primeira vez.
| Sintoma | Causa comum | Página |
|---|---|---|
| lerobot-find-port não mostra nada | Permissões de driver, cabo ou nó | braço não detectado |
| Câmera ausente no momento da gravação | Índice alterado na reinicialização, ou duas câmeras em um controlador USB | câmera não detectada |
| Treinamento rejeita o conjunto de dados | ACT requer v3.0, GR00T precisa de v2.1 | conjunto de dados rejeitado como v3 |
| CUDA sem memória | Tamanho do lote aumentado, ou quadros 1080p em vez de 480p | sem memória no treinamento |
| A perda parece ótima, o braço não faz nada | Os dados não contêm a tarefa, ou uma câmera se moveu | a perda diminui, a política não faz nada |
| Movimento irregular ou uma pausa no meio do episódio | Subtreinado, uma paralisação na fronteira do chunk, ou uma chamada de inferência com tempo esgotado | política congela no meio do movimento |
Duas linhas merecem destaque. O ACT treina no LeRobot v3.0, enquanto o carregador do GR00T falha nele e precisa da v2.1, então um conjunto de dados que treina o ACT pode falhar em uma execução do GR00T. E a última linha tem duas soluções: os autores do ACT respondem ao movimento irregular com mais treinamento, enquanto com n_action_steps em 100, uma paralisação genuína ocorre em um limite de chunk, uma pausa visível a cada 3.3 seconds a 30 fps. Mais duas coisas a saber: uma única junta morta é geralmente um ID de servo que nunca foi escrito, e uma garra que se aproxima mas nunca fecha significa pouca amplitude da garra nas demonstrações. Índice completo: as páginas de modos de falha.
O custo de uma execução
| Nível | Modelos | Tempo de execução | Preço por hora | Custo por execução |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
Este é o argumento para começar com ACT mesmo que você queira um VLA mais tarde. Uma execução ACT falha custa o preço de um café e informa em poucas horas se seu conjunto de dados contém a tarefa. Uma execução GR00T falha custa quatro vezes mais pela mesma lição. Passar para GR00T N1.7 ou SmolVLA depois é uma mudança de forma, não uma reconstrução. Contexto: modelos de visão-linguagem-ação, o guia completo do SO-100, treine sua primeira política e aprendizagem por imitação. Sem braço? A página ao vivo transmite um SO-100 real para operar sem precisar se inscrever.
Treine ACT no seu SO-100
O guia para esta combinação exata: padrões, nível de GPU e o custo de uma execução. Escolha o conjunto de dados, o backend aluga a placa e grava os checkpoints.
Abrir o guia de treinamentoExiste um modelo ACT pré-treinado que eu possa ajustar em vez disso?▾
Não. ACT não tem modelo base; ele só existe depois que você o treina. Isso não é uma falha nas ferramentas, é o que ACT é: o artigo treina uma política do zero por tarefa. Para um checkpoint de fornecedor, use GR00T N1.7 ou Pi0.5.
Quantos episódios eu realmente preciso?▾
50: o que ALOHA registrou por tarefa (100 para Thread Velcro, a mais difícil) e o mínimo da AY-Robots. lerobot aconselha cerca de 10 por localização de objeto, câmeras fixas, agarre consistente. Cinquenta episódios limpos superam cem onde a câmera se moveu.
Devo mudar chunk_size de 100?▾
Geralmente não. A ablação sobe de 1 por cento em k = 1 para 44 por cento em k = 100 e diminui depois, então 100 fica perto do topo. Se o braço se comprometer por muito tempo, diminua n_action_steps em vez disso: a 30 fps, 25 reconsultas a cada 0,8 segundos.
Quanto tempo leva uma execução de treinamento e posso pará-la antes?▾
Duas a cinco horas em uma placa de 24 GB para 100000 passos. Checkpoints são salvos a cada 20000 passos e --resume=true retoma uma execução, então parar antes é seguro. Apenas não na primeira parte plana: a suavidade melhora depois que a perda se estabiliza.
A perda diminuiu e o braço ainda falha. E agora?▾
Quase sempre o conjunto de dados. Reproduza os episódios gravados no braço: se a reprodução não executa a tarefa, os dados não a contêm. Em seguida, verifique se algo se moveu, especialmente uma câmera. ACT não tem priors, então um empurrão no episódio 21 é permanente.
Sources
- Zhao, Kumar, Levine, Finn: Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT), arXiv 2304.13705
- ALOHA / ACT project page
- tonyzhaozh/act, the reference implementation and its training-length advice
- tonyzhaozh/act issue 25: the action head reads only the first decoder layer
- huggingface/lerobot
- lerobot ACTConfig: chunk_size, n_action_steps, n_decoder_layers and the rest of the defaults
- lerobot TrainPipelineConfig: steps, batch_size, seed, save_freq, log_freq, save_checkpoint_to_hub
- lerobot train_utils: zero-padded checkpoint dirs, the last symlink and checkpoint push tagging
- lerobot v0.6.1 release, 3 August 2026
- LeRobot docs: ACT
- LeRobot docs: imitation learning on real robots (record, replay, train, rollout)
- LeRobot docs: SO-100 setup, motor ids and calibration
- LeRobot docs: installation and the optional extras
- Hugging Face blog: LeRobot Community Datasets, the ImageNet of Robotics, When and How?
- TheRobotStudio/SO-ARM100: Standard Open Arm 100
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started