Desplegar el entorno RL de Microduck en Jetson
Este capítulo prepara el sistema Jetson, instala el entorno del proyecto, explica la estructura de directorios y verifica que el entrenamiento PPO pueda ejecutarse en CUDA.
Hardware y software
La siguiente plataforma se validó para esta demo:
| Elemento | Versión |
|---|---|
| Dispositivo | Seeed reComputer con Jetson Orin NX 16GB |
| SO | Ubuntu 24.04 LTS, aarch64 |
| JetPack / L4T | JetPack 7.2 / L4T R39.2 |
| CUDA del sistema | 13.2 |
| Python | 3.12 |
| PyTorch | 2.9.1+cu130 |
| MuJoCo | 3.10.0 |
| Warp | 1.12.0 |
Utiliza almacenamiento NVMe con al menos 25GB de espacio libre. Se recomiendan refrigeración activa, una fuente de alimentación estable y una conexión de red fiable.
No reemplaces de forma independiente el controlador CUDA proporcionado por JetPack ni los paquetes L4T. El proyecto de Python está aislado en .venv, mientras que la pila GPU del sistema sigue gestionada por JetPack.
Directorio del proyecto
~/microduck-jetson/
├── deploy_microduck_jetson.sh
├── microduck_rl/
│ ├── src/mjlab_microduck/tasks/
│ ├── scripts/
│ ├── pretrained/pollen-robotics/
│ ├── models/checkpoints/
│ └── logs/rsl_rl/
├── microduck_jetson_startup.md
├── microduck_jetson_training_guide.md
└── microduck_custom_action_training.md
El directorio .venv se crea localmente en Jetson y, de forma intencionada, no se incluye en el repositorio Git.
Clonar el repositorio
mkdir -p ~/microduck-jetson
cd ~/microduck-jetson
git clone -b develop https://github.com/jjjadand/microduck_rl.git
cd microduck_rl
Ejecutar el script de despliegue
cd ~/microduck-jetson/microduck_rl
SUDO_PASSWORD=<JETSON_PASSWORD> \
TARGET_DIR=$HOME/microduck-jetson/microduck_rl \
bash deploy_microduck_jetson.sh
El script instala las dependencias de compilación y visualización, instala uv, crea .venv de Python 3.12, sincroniza las dependencias bloqueadas del proyecto, instala la rueda de PyTorch con CUDA compatible y realiza la validación de CUDA.
Pasar una contraseña a través de una variable de entorno es conveniente para esta configuración de laboratorio reproducible. Para un dispositivo compartido o de producción, revisa el script y ejecuta los comandos con privilegios de forma interactiva.
Entrar en el entorno
Todos los comandos del proyecto deben ejecutarse desde la raíz del repositorio:
cd ~/microduck-jetson/microduck_rl
export MUJOCO_GL=egl
Utiliza uv run --no-sync para los comandos de esta guía. Esto evita que una resincronización de dependencias no deseada reemplace la instalación de PyTorch con CUDA para Jetson.
Verificar CUDA
uv run --no-sync python3 - <<'PY'
import torch
print("PyTorch:", torch.__version__)
print("CUDA runtime:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())
print("GPU:", torch.cuda.get_device_name(0))
left = torch.randn(512, 512, device="cuda")
right = torch.randn(512, 512, device="cuda")
result = left @ right
torch.cuda.synchronize()
print("CUDA matmul:", result.device)
PY
Los resultados esperados incluyen CUDA available: True, un nombre de GPU Orin y CUDA matmul: cuda:0.
Ejecutar la prueba rápida de entrenamiento
uv run --no-sync train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 64 \
--agent.logger tensorboard \
--agent.max_iterations 5
Una ejecución correcta crea un directorio bajo logs/rsl_rl/velocity/ que contiene archivos de configuración, eventos de TensorBoard y uno o más checkpoints .pt.
Cuando MuJoCo y los gestores de entrenamiento se inician, la terminal imprime la configuración activa de terminación, recompensa, currículo, actor y crítico:

Después de que comience la recopilación de rollouts, cada iteración de aprendizaje informa del rendimiento, términos de recompensa, duración del episodio, valores de currículo y estadísticas de terminación:

Ejecutar 4096 entornos de entrenamiento en paralelo
Para la ejecución de entrenamiento completa utilizada en esta demo, el backend simula 4096 entornos Microduck independientes en paralelo:
uv run --no-sync train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 4096 \
--agent.logger tensorboard
jtop muestra la carga de la GPU y el estado del dispositivo mientras se ejecuta el proceso de entrenamiento con 4096 entornos:

Si la memoria es insuficiente, reduce el número de entornos usando 4096 → 2048 → 1024 → 512.
Visualizar los entornos de entrenamiento
El backend sigue entrenando los 4096 entornos. Los ajustes del visor solo controlan cuántos robots se renderizan para inspección y no reducen el lote de entrenamiento del backend a menos que se cambie --env.scene.num-envs.
Renderizar un Microduck
Renderizar un robot es la forma más clara de inspeccionar la postura, los contactos y la marcha durante el entrenamiento:

Renderizar múltiples Microducks
Renderizar muchos robots hace visible el concepto de entornos paralelos. La ejecución completa del backend sigue conteniendo 4096 entornos aunque solo se muestre un subconjunto en el visor:

El visor está pensado para ejecuciones cortas de inspección. Las ejecuciones largas de entrenamiento normalmente usan renderizado EGL sin cabeza para evitar la sobrecarga de dibujo continuo.
Configuración de rendimiento opcional
Comprueba los modos de energía compatibles antes de seleccionar uno:
sudo nvpmodel -q
sudo nvpmodel
Supervisa el dispositivo mientras entrenas:
tegrastats
No copies un número de modo de energía de otro modelo de Jetson. Selecciona un modo de alto rendimiento compatible para el dispositivo exacto.