Pular para o conteúdo principal

Estágio 3 · Capítulo 16 · Prática

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​

Configs

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.

ConfigCenário
8 GB de VRAM ou menosConsegue treinar; use tamanho de batch pequeno: 8 GB → batch size 4, 4 GB → batch size 2.
12 GB+ de VRAMZona confortável; use o tamanho de batch padrão; se a VRAM for grande, defina batch size=16
Apenas GPU integrada / sem GPU NVIDIATreine 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.
Steps de treinamento

16.2 Salvando e Gerenciando Checkpoints​

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.path aponta para checkpoints/last/pretrained_model.

16.3 Iniciando o Treinamento​

Training

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
dica

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âmetroSignificado
--dataset.repo_idNome do dataset do Capítulo 13 (use diretamente o nome local; para o Hub use ${HF_USER}/xxx)
--policy.type=actTipo de política; também é possível usar diffusion, smolvla, etc. Neste estágio usamos ACT
--output_dirDiretório para todas as saídas de treinamento
--job_nameNome desta execução, usado nos logs para distinguir execuções
--policy.device=cudaTreinar na GPU
--wandb.enable=falseDesativar o painel online do wandb (cadastre-se e ative se quiser; não é obrigatório)
--policy.push_to_hub=falseAinda não enviar para o Hub; aguarde até a avaliação do Capítulo 17 estar satisfatória
--stepsSteps de treinamento
--batch_sizeTamanho 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​

Monitoring

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):

CampoSignificadoO que observar
stepStep atualCompare com --steps para verificar o progresso
epÉpocas treinadasCorresponde a "quantas vezes assistiu à gravação"
lossLoss de treinamentoQueda rápida no início, declínio lento depois, pequenas flutuações é o formato normal
grdnNorma do gradientePico súbito para centenas/milhares indica treinamento instável
lrTaxa de aprendizado atualConfirme se é o valor esperado
updt_s / data_sTempo de atualização/carregamento de dados por stepdata_s grande significa que o gargalo é o carregamento de dados
etaTempo restante estimadoDecida 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. lr fica 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 em watch -n 1 nvidia-smi devem 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.
Curva de loss
Utilização da GPU

16.5 Retomando Treinamentos Interrompidos​

Resume

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.
Loading Comments...