Saltar al contenido principal

Etapa 3 · Capítulo 16 · Práctica

16. Entrenar tu primera política ACT

Capítulo 16 del Curso de Introducción a la IA Física de Seeed: tamaño de lote, tasa de aprendizaje y pasos, gestión de checkpoints, inicio del entrenamiento, monitorización de la pérdida y del estado de la GPU, y reanudación de entrenamientos interrumpidos.

16.1 Tres configuraciones clave: tamaño de lote, tasa de aprendizaje, pasos​

Configs

16.1 Tres configuraciones clave: tamaño de lote, tasa de aprendizaje, pasos

En la terminal, ejecuta nvidia-smi para comprobar tu GPU y VRAM; las GPU de consumo (p. ej., 3050) también pueden entrenar.

Tamaño de lote​

Si tienes margen de VRAM, auméntalo para acelerar la convergencia, pero no lo fuerces más allá de la VRAM disponible.

ConfigEscenario
8 GB de VRAM o menosPuede entrenar; usa un tamaño de lote pequeño: 8 GB → batch size 4, 4 GB → batch size 2.
12 GB+ de VRAMZona cómoda; usa el tamaño de lote por defecto; si la VRAM es grande, pon batch size=16
Solo GPU integrada / sin GPU NVIDIAEntrena en un servidor en la nube

Tasa de aprendizaje​

El "tamaño de paso" por actualización. ACT viene con presets: optimizador AdamW, tasa de aprendizaje 1e-5, weight decay 1e-4, visual backbone en 1e-5. Los presets de la política están activados por defecto (use_policy_training_preset), así que estos valores se aplican automáticamente; no necesitas escribir nada. Un paso demasiado grande provoca oscilación o divergencia de la pérdida; uno demasiado pequeño duplica el tiempo de entrenamiento. No lo toques en tu primer entrenamiento: son valores ajustados a partir del paper original y de mucha práctica.

  • Si cambias el tamaño de lote o los pasos, no hace falta ajustar la tasa de aprendizaje.
  • Si haces fine-tuning/reanudas desde un checkpoint ya entrenado, reduce la tasa de aprendizaje a 1e-6–3e-6 (3–10 veces menor).
  • Si la pérdida de entrenamiento apenas baja (se queda plana), no subas la LR todavía; primero añade pasos/datos y luego prueba con 2e-5.

Añade el siguiente código; cámbialos juntos al mismo valor:

--policy.optimizer_lr=1e-6 \
--policy.optimizer_lr_backbone=1e-6

Pasos de entrenamiento​

Para 50 episodios, si no quieres leer la explicación de los pasos de abajo, simplemente ejecútalo con 80.000 (50 episodios).

Los pasos escalan proporcionalmente: si el tamaño de lote se reduce a la mitad, las muestras vistas por paso se reducen a la mitad; para dar al modelo el mismo número de pasadas (epochs), los pasos deben duplicarse. Por ejemplo, tamaño de lote por defecto=8, pasos=80000; batch size=4 → pasos=160000; batch size=2 → pasos×4; batch size=16 → pasos÷2.

También puedes fijar más pasos: durante el entrenamiento puedes pulsar Ctrl+C para parar en cualquier momento, decidiendo si parar según la pérdida y otros parámetros; el modelo generado hasta ese momento se guarda automáticamente.

  • Total de frames ≈ duración total de las grabaciones de vídeo.
  • epoch (una pasada) = el alumno ve toda la grabación de principio a fin.
  • steps = cuántos segmentos ha visto el alumno en total.
Pasos de entrenamiento

16.2 Guardar y gestionar checkpoints​

Checkpoints

16.2 Guardar y gestionar checkpoints

No hace falta guardar manualmente: se guarda un checkpoint cada 20.000 pasos (save_freq), más uno final al terminar. Así que está bien fijar un número grande de pasos: puedes elegir el modelo de pasos más bajos y descartar los que estén poco entrenados o sobreajustados.

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 es un archivo completo de pesos del modelo; unas cuantas docenas se acumulan. Una vez que el entrenamiento se estabiliza, se pueden borrar los checkpoints tempranos/medios, dejando solo last.
  • Durante la inferencia, --policy.path apunta a checkpoints/last/pretrained_model.

16.3 Iniciar el entrenamiento​

Training

16.3 Iniciar el entrenamiento

Todas las comprobaciones superadas: inicia (en el entorno 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
tip

Si usas una GPU RTX serie 50, añade --dataset.video_backend=pyav para evitar APIs que faltan en la versión preliminar de torchvision.

Si la VRAM es insuficiente o quieres fijar más de una vez, añade --batch_size para establecer el tamaño de lote.

Notas sobre los parámetros:

ParámetroSignificado
--dataset.repo_idNombre del dataset del Capítulo 13 (usa directamente el nombre local; para Hub usa ${HF_USER}/xxx)
--policy.type=actTipo de política; también se puede usar diffusion, smolvla, etc. En esta etapa se usa ACT
--output_dirDirectorio para todas las salidas de entrenamiento
--job_nameNombre para esta ejecución, usado en los logs para distinguir ejecuciones
--policy.device=cudaEntrenar en GPU
--wandb.enable=falseDesactivar el panel online de wandb (regístrate y actívalo si quieres; no es obligatorio)
--policy.push_to_hub=falseNo subir aún al Hub; espera hasta que la evaluación del Capítulo 17 sea satisfactoria
--stepsPasos de entrenamiento
--batch_sizeTamaño de lote

Estimación de tiempo: 100k pasos en una GPU de consumo suelen llevar unas pocas horas, dependiendo de la GPU y del tamaño de lote.

16.4 Monitorizar la pérdida y el estado de la GPU​

Monitoring

16.4 Monitorizar la pérdida y el estado de la GPU

Tras pulsar Enter, la terminal empieza a mostrar los logs de entrenamiento. LeRobot imprime una línea de resumen cada 200 pasos (controlado por --log_freq), como esta:

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 por campo (los nombres de campo pueden variar ligeramente entre versiones):

CampoSignificadoEn qué fijarse
stepPaso actualCompáralo con --steps para comprobar el progreso
epEpochs entrenadasCorresponde a "cuántas veces se ha visto la grabación"
lossPérdida de entrenamientoCaída rápida al principio, descenso lento después, pequeñas fluctuaciones es la forma normal
grdnNorma del gradienteUn pico repentino a cientos/miles indica entrenamiento inestable
lrTasa de aprendizaje actualConfirma que es el valor esperado
updt_s / data_sTiempo de actualización/carga de datos por pasoUn data_s grande significa que la carga de datos es el cuello de botella
etaTiempo restante estimadoDecide si ir a comer o dormir

Tendencias normales de estas métricas, en tres categorías:

  • Debería seguir bajando — loss. La bajada tiene tres fases: caída pronunciada inicial, descenso gradual medio, pequeñas fluctuaciones a un nivel bajo al final, aplanándose en conjunto. Esta curva de "rápido, luego lento y luego plana" es una curva de convergencia sana. Dos formas anómalas a vigilar: nunca baja (problema de datos/configuración: comprueba las claves de la cámara); baja y luego vuelve a subir (divergencia del entrenamiento: reduce la LR a la mitad y vuelve a entrenar).
  • Debería converger en conjunto con cierto ruido — grdn (norma del gradiente). La tendencia general sigue a la pérdida hacia abajo y se estabiliza, pero los picos son normales: un pico ocasional que se recupera está bien; lo peligroso es una amplificación continua, ola tras ola más alta: eso es un precursor de divergencia; trátalo como arriba: baja la LR.
  • Debería mantenerse constante — lr, updt_s, data_s, utilización de la GPU. lr se mantiene en tu valor fijado todo el tiempo, solo para tu confirmación; el tiempo por paso (updt_s/data_s) y la utilización de la GPU con watch -n 1 nvidia-smi deberían ser estables: una utilización persistentemente baja o muy fluctuante significa que la GPU está esperando datos; el cuello de botella es la carga de datos, no la GPU.
Curva de pérdida
Utilización de la GPU

16.5 Reanudar un entrenamiento interrumpido​

Resume

16.5 Reanudar un entrenamiento interrumpido

Si el entrenamiento pierde alimentación, red o terminal a mitad de ejecución, no hace falta empezar de cero: mientras se haya guardado al menos un checkpoint (es decir, el entrenamiento haya pasado de 20.000 pasos):

lerobot-train \
--config_path=outputs/train/act_rebot_test/train_config.json \
--resume=true
  • La reanudación usa la configuración guardada: el entrenamiento reanudado usa la configuración guardada en train_config.json; se ignoran los parámetros de línea de comandos. Para cambiar parámetros (p. ej., pasos, tamaño de lote), inicia una nueva ejecución; no uses resume.
  • Continúa desde el último checkpoint: se restauran el estado del optimizador y el contador de pasos; la curva de pérdida continúa sin saltos.
Loading Comments...