file-importEntrenar a partir de una política anterior (weights-only)

circle-exclamation

El problema de reanudar el entrenamiento

Como se explica en ¿Entrenar de cero o a partir de una política anteriorarrow-up-right, reanudar un entrenamiento con la opción --resume no solo carga los pesos de la política, sino que restaura el estado completo del entrenamiento, incluyendo el estado interno del optimizador (momentum, acumuladores, contadores…), el learning rate dinámico y los contadores internos del entrenamiento.

Esto es correcto cuando se quiere continuar exactamente el mismo experimento, pero resulta problemático cuando se cambian las recompensas.

Cargar únicamente los pesos de la política

Actualmente, el script de entrenamiento no ofrece ninguna opción para cargar únicamente los pesos de la política de un checkpoint. Por lo que la solución pasa por modificar el script de entrenamiento.

Para mantener el código original intacto, voy a hacer una copia de train.py (ubicado en la carpeta /scripts del proyecto) llamado train.py donde haré las modificaciones.

Argumento --load_policy

He creado el argumento --load_policy para poder pasarle la ruta del checkpoint del que quiero cargar los pesos de su política diréctamente desde el comando de la terminal.

Carga de los pesos de la política

Como estamos modificando este script para no cargar todo lo que carga el resume, quiero asegurarme que si utilizamos el argumento --load_policy, no utilicemos a la vez el --resume.

Si esta condición se cumple, cargaremos el checkpoint para después decirle al runner (el gestor del entrenamiento) que cargue los pesos de ese checkpoint en el entrenamiento actual.

Haciéndolo de esta manera me aseguro de que el único parámetro que se carga del checkpoint son los pesos de la red, dejando que el optimizador comience reseteado.

Uso del script de entrenamiento modificado

Ahora, para comenzar un entrenamiento a partir de una política anterior basta con utilizar el comando: ~/IsaacLab/isaaclab.sh -p <PathToProjectFolder>/scripts/rs_rl/train_mod.py --task=<TemplateName> --load_policy <PathToCheckpointFolder>/<Checkpoint>.pt

Por poner un caso real de uso, en el Proyecto 1: Robot tipo segwayarrow-up-right utilicé el comando

~/IsaacLab/isaaclab.sh -p ~/SimpleRobot/scripts/rsl_rl/train_mod.py --task=Template-Simplerobot-Direct-v0 --load_policy /home/angellm/logs/rsl_rl/simplerobot_direct/2026-01-19_18-39-40/model_200.pt

para realizar el entrenamiento de la segunda fase a partir de la política obtenida en el entrenamiento de la primera fase.

Last updated