16. Treinando Sua Primeira Política ACT
Capítulo 16 do Curso para Iniciantes em IA Física da Seeed — tamanho do batch, taxa de aprendizado e steps, gerenciamento de checkpoints, início do treinamento, monitoramento da loss e do status da GPU, e retomada de treinamentos interrompidos.
16.1 Três Configs-Chave: Tamanho do Batch, Taxa de Aprendizado, Steps
16.1 Três Configs-Chave: Tamanho do Batch, Taxa de Aprendizado, Steps
No terminal, execute nvidia-smi para verificar sua GPU e VRAM; GPUs de consumo (por exemplo, 3050) também conseguem treinar.
Tamanho do Batch
Se você tiver folga de VRAM, aumente para acelerar a convergência, mas não force além da VRAM disponível.
| Config | Cenário |
|---|---|
| 8 GB de VRAM ou menos | Consegue treinar; use tamanho de batch pequeno: 8 GB → batch size 4, 4 GB → batch size 2. |
| 12 GB+ de VRAM | Zona confortável; use o tamanho de batch padrão; se a VRAM for grande, defina batch size=16 |
| Apenas GPU integrada / sem GPU NVIDIA | Treine em um servidor na nuvem |
Taxa de Aprendizado
O "tamanho do passo" por atualização. ACT vem com presets: otimizador AdamW, taxa de aprendizado 1e-5, weight decay 1e-4, backbone visual em 1e-5. Os presets da política são ativados por padrão (use_policy_training_preset), então esses valores se aplicam automaticamente; você não precisa escrever nada. Um passo muito grande causa oscilações ou divergência da loss; muito pequeno dobra o tempo de treinamento. Não mexa nisso no seu primeiro treinamento — são valores ajustados a partir do artigo original e de muita prática.
- Se você alterar o Tamanho do Batch ou os Steps, não precisa ajustar a taxa de aprendizado.
- Se estiver fazendo fine-tuning/retomando a partir de um checkpoint treinado, reduza a taxa de aprendizado para
1e-6–3e-6(3–10x menor). - Se a train loss quase não cai (linha reta), não aumente a LR ainda; primeiro aumente steps/dados, depois tente
2e-5.
Adicione o código a seguir; altere ambos juntos para o mesmo valor:
--policy.optimizer_lr=1e-6 \
--policy.optimizer_lr_backbone=1e-6
Steps de Treinamento
Para 50 Episódios, se você não quiser ler a explicação de steps abaixo, simplesmente rode com 80.000 (50 Episódios).
Os steps escalam proporcionalmente: se o tamanho do batch é reduzido pela metade, as amostras vistas por step são reduzidas pela metade; para dar ao modelo o mesmo número de passagens (épocas), os steps precisam dobrar. Ex.: batch size padrão=8, steps=80000; batch size=4 → steps=160000; batch size=2 → steps×4; batch size=16 → steps÷2.
Você também pode definir mais steps — durante o treinamento você pode pressionar Ctrl+C para parar a qualquer momento, escolhendo se deve parar com base na loss e em outros parâmetros; o modelo gerado até então é salvo automaticamente.
- Total de frames ≈ duração total das gravações de vídeo.
- epoch (uma passada) = o aluno assiste a toda a gravação do início ao fim.
- steps = quantos trechos o aluno assistiu no total.

16.2 Salvando e Gerenciando Checkpoints
16.2 Salvando e Gerenciando Checkpoints
Não é necessário salvar manualmente: um checkpoint é salvo a cada 20.000 steps (save_freq), além de um final no término. Então não há problema em definir um número grande de steps — você pode escolher o modelo de steps menores e descartar os subtreinados ou overfitted.
outputs/train/act_grab_cube_v1/
├── train_config.json ← Full config for this run (needed to resume)
└── checkpoints/
├── 0020000/pretrained_model/ ← Model archive at each step count
├── 0040000/pretrained_model/
├── ...
└── last/pretrained_model/ ← Last checkpoint, used in Chapter 17
- Uso de disco: cada checkpoint é um arquivo completo de pesos do modelo; dezenas deles se acumulam. Quando o treinamento estabilizar, checkpoints iniciais/intermediários podem ser apagados, mantendo apenas o
last. - Durante a inferência,
--policy.pathaponta paracheckpoints/last/pretrained_model.
16.3 Iniciando o Treinamento
16.3 Iniciando o Treinamento
Todas as verificações passaram — inicie (no ambiente conda lerobot):
lerobot-train \
--dataset.repo_id=seeed_rebot_b601_rs/test \
--policy.type=act \
--output_dir=outputs/train/act_rebot_test \
--job_name=act_rebot_test \
--policy.device=cuda \
--wandb.enable=false \
--policy.push_to_hub=false \
--steps=100000
Se estiver usando uma GPU da série RTX 50, adicione --dataset.video_backend=pyav para contornar APIs ausentes no preview do torchvision.
Se a VRAM for insuficiente ou você quiser definir mais de uma vez, adicione --batch_size para configurar o tamanho do batch.
Observações sobre parâmetros:
| Parâmetro | Significado |
|---|---|
--dataset.repo_id | Nome do dataset do Capítulo 13 (use diretamente o nome local; para o Hub use ${HF_USER}/xxx) |
--policy.type=act | Tipo de política; também é possível usar diffusion, smolvla, etc. Neste estágio usamos ACT |
--output_dir | Diretório para todas as saídas de treinamento |
--job_name | Nome desta execução, usado nos logs para distinguir execuções |
--policy.device=cuda | Treinar na GPU |
--wandb.enable=false | Desativar o painel online do wandb (cadastre-se e ative se quiser; não é obrigatório) |
--policy.push_to_hub=false | Ainda não enviar para o Hub; aguarde até a avaliação do Capítulo 17 estar satisfatória |
--steps | Steps de treinamento |
--batch_size | Tamanho do batch |
Estimativa de tempo: 100k steps em uma GPU de consumo normalmente levam algumas horas, dependendo da GPU e do tamanho do batch.
16.4 Monitorando a Loss e o Status da GPU
16.4 Monitorando a Loss e o Status da GPU
Depois de pressionar Enter, o terminal começa a rolar logs de treinamento. O LeRobot imprime uma linha de resumo a cada 200 steps (controlado por --log_freq), assim:
step: 10000 smpl: 80K ep: 35.6 loss: 1.832 grdn: 12.4 lr: 1.0e-05 updt_s: 0.21 data_s: 0.003 eta: 3:42:10
Campo a campo (os nomes dos campos podem variar um pouco entre versões):
| Campo | Significado | O que observar |
|---|---|---|
step | Step atual | Compare com --steps para verificar o progresso |
ep | Épocas treinadas | Corresponde a "quantas vezes assistiu à gravação" |
loss | Loss de treinamento | Queda rápida no início, declínio lento depois, pequenas flutuações é o formato normal |
grdn | Norma do gradiente | Pico súbito para centenas/milhares indica treinamento instável |
lr | Taxa de aprendizado atual | Confirme se é o valor esperado |
updt_s / data_s | Tempo de atualização/carregamento de dados por step | data_s grande significa que o gargalo é o carregamento de dados |
eta | Tempo restante estimado | Decida se vai comer ou dormir |
Tendências normais para essas métricas, em três categorias:
- Devem continuar caindo —
loss. A queda tem três fases: queda acentuada inicial, declínio gradual no meio, pequenas flutuações em nível baixo no final, achatando no geral. Essa curva "rápido depois lento depois plana" é uma curva de convergência saudável. Dois formatos anormais a observar: nunca cai (problema de dados/config — verifique as chaves da câmera); cai e depois volta a subir (divergência do treinamento — reduza a LR pela metade e treine de novo). - Devem convergir no geral com ruído permitido —
grdn(norma do gradiente). A tendência geral segue a loss para baixo e estabiliza, mas picos são normais — um pico ocasional que se recupera está ok; o perigoso é amplificação contínua, onda após onda mais alta — isso é um prenúncio de divergência; trate como acima: reduza a LR. - Devem permanecer constantes —
lr,updt_s,data_s, utilização da GPU.lrfica no valor que você definiu o tempo todo, apenas para sua confirmação; o tempo por step (updt_s/data_s) e a utilização da GPU emwatch -n 1 nvidia-smidevem ser estáveis — utilização persistentemente baixa ou muito oscilante significa que a GPU está esperando dados; o gargalo é o carregamento de dados, não a GPU.


16.5 Retomando Treinamentos Interrompidos
16.5 Retomando Treinamentos Interrompidos
Se o treinamento perder energia, rede ou terminal no meio da execução, não é preciso começar do zero — desde que pelo menos um checkpoint tenha sido salvo (ou seja, o treinamento passou de 20.000 steps):
lerobot-train \
--config_path=outputs/train/act_rebot_test/train_config.json \
--resume=true
- Resume usa a config salva: o treinamento retomado usa a config salva em
train_config.json; parâmetros de linha de comando são ignorados. Para alterar parâmetros (por exemplo, steps, batch size), inicie uma nova execução; não use resume. - Continua a partir do último checkpoint: o estado do otimizador e a contagem de steps são restaurados; a curva de loss continua sem interrupções.