Skip to main content

在 Jetson 上部署 Microduck 强化学习环境

本章节将准备 Jetson 系统、安装项目环境、说明目录结构,并验证 PPO 训练可以在 CUDA 上执行。

硬件与软件

本演示已在以下平台上完成验证:

项目版本
设备搭载 Jetson Orin NX 16GB 的 Seeed reComputer
操作系统Ubuntu 24.04 LTS,aarch64
JetPack / L4TJetPack 7.2 / L4T R39.2
系统 CUDA13.2
Python3.12
PyTorch2.9.1+cu130
MuJoCo3.10.0
Warp1.12.0

请使用至少有 25GB 可用空间的 NVMe 存储。建议配备主动散热、稳定的电源以及可靠的网络连接。

warning

请不要自行替换 JetPack 提供的 CUDA 驱动或 L4T 软件包。Python 项目被隔离在 .venv 中,而系统 GPU 软件栈仍由 JetPack 管理。

项目目录

~/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

.venv 目录是在 Jetson 本地创建的,刻意未包含在 Git 仓库中。

克隆仓库

mkdir -p ~/microduck-jetson
cd ~/microduck-jetson

git clone -b develop https://github.com/jjjadand/microduck_rl.git
cd microduck_rl

运行部署脚本

cd ~/microduck-jetson/microduck_rl

SUDO_PASSWORD=<JETSON_PASSWORD> \
TARGET_DIR=$HOME/microduck-jetson/microduck_rl \
bash deploy_microduck_jetson.sh

该脚本会安装构建与可视化依赖、安装 uv、创建 Python 3.12 .venv、同步锁定的项目依赖、安装兼容的 CUDA PyTorch wheel,并执行 CUDA 验证。

note

通过环境变量传递密码对于这种可复现实验环境来说很方便。对于共享或生产设备,请先审阅脚本,并改为以交互方式运行需要特权的命令。

进入环境

所有项目命令都必须在仓库根目录下运行:

cd ~/microduck-jetson/microduck_rl
export MUJOCO_GL=egl

在本指南中的命令请使用 uv run --no-sync。这可以防止意外的依赖重新同步覆盖 Jetson 上的 CUDA PyTorch 安装。

验证 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

预期结果包括 CUDA available: True、一个 Orin GPU 名称,以及 CUDA matmul: cuda:0

运行训练冒烟测试

uv run --no-sync train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 64 \
--agent.logger tensorboard \
--agent.max_iterations 5

成功运行后,会在 logs/rsl_rl/velocity/ 下创建一个目录,其中包含配置文件、TensorBoard 事件以及一个或多个 .pt 检查点。

当 MuJoCo 和训练管理器启动时,终端会打印当前启用的终止条件、奖励、课程、actor 和 critic 配置:

Microduck MuJoCo 和训练管理器在终端中启动

在开始收集 rollout 之后,每次学习迭代都会报告吞吐量、奖励项、episode 长度、课程值以及终止统计信息:

在 Jetson 上 Microduck PPO 训练迭代指标

运行 4096 个并行训练环境

在本演示使用的完整训练运行中,后端会并行模拟4096 个独立的 Microduck 环境

uv run --no-sync train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 4096 \
--agent.logger tensorboard

在 4096 环境训练进程运行期间,jtop 会显示 GPU 负载和设备状态:

在训练 4096 个 Microduck 环境时 Jetson 的 jtop 输出

如果内存不足,可将环境数量依次降低为 4096 → 2048 → 1024 → 512

可视化训练环境

后端仍然训练全部 4096 个环境。Viewer 设置只控制用于检查的机器人渲染数量,并不会减少后端训练批次,除非修改 --env.scene.num-envs

渲染一个 Microduck

在训练过程中渲染单个机器人,是检查姿态、接触和步态最清晰的方式:

在后端训练 4096 个环境时可视化一个 Microduck

渲染多个 Microduck

渲染多个机器人可以直观展示并行环境的概念。即使 Viewer 中只显示了一个子集,完整的后端运行仍然包含 4096 个环境:

在后端训练 4096 个环境时可视化多个 Microduck

Viewer 主要用于短时间的检查运行。长时间训练通常使用无头 EGL 渲染,以避免持续绘制带来的开销。

可选性能设置

在选择电源模式之前,先检查支持的电源模式:

sudo nvpmodel -q
sudo nvpmodel

在训练过程中监控设备状态:

tegrastats

不要从其他 Jetson 型号上直接复制电源模式编号。请为当前设备选择一个受支持的高性能模式。

下一步

Loading Comments...