Jetson 上に Microduck RL 環境をデプロイする
この章では、Jetson システムの準備、プロジェクト環境のインストール、ディレクトリ構成の説明、および PPO トレーニングが CUDA 上で実行できることの検証を行います。
ハードウェアとソフトウェア
このデモでは、次のプラットフォームで検証を行いました:
| 項目 | バージョン |
|---|---|
| デバイス | Jetson Orin NX 16GB 搭載 Seeed reComputer |
| OS | Ubuntu 24.04 LTS, aarch64 |
| JetPack / L4T | JetPack 7.2 / L4T R39.2 |
| システム CUDA | 13.2 |
| Python | 3.12 |
| PyTorch | 2.9.1+cu130 |
| MuJoCo | 3.10.0 |
| Warp | 1.12.0 |
少なくとも 25GB の空き容量を持つ NVMe ストレージを使用してください。アクティブクーリング、安定した電源供給、および信頼性の高いネットワーク接続を推奨します。
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 ホイールをインストールし、CUDA 検証を実行します。
環境変数を通じてパスワードを渡す方法は、この再現可能なラボ環境では便利です。共有デバイスや本番デバイスでは、スクリプトを確認し、代わりに対話的に特権コマンドを実行することを推奨します。
環境に入る
すべてのプロジェクトコマンドは、リポジトリのルートから実行する必要があります:
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 イベント、および 1 つ以上の .pt チェックポイントを含むディレクトリが作成されます。
MuJoCo とトレーニングマネージャが起動すると、ターミナルにはアクティブな終端条件、報酬、カリキュラム、アクタ、およびクリティックの設定が表示されます:

ロールアウト収集が始まると、各学習イテレーションでスループット、報酬項目、エピソード長、カリキュラム値、および終端統計がレポートされます:

4096 個の並列トレーニング環境を実行する
このデモで使用した本番トレーニング実行では、バックエンドが 4096 個の独立した Microduck 環境 を並列にシミュレートします:
uv run --no-sync train Mjlab-Velocity-Flat-MicroDuck \
--env.scene.num-envs 4096 \
--agent.logger tensorboard
jtop を使用すると、4096 環境のトレーニングプロセス実行中の GPU 負荷とデバイス状態を確認できます:

メモリが不足する場合は、4096 → 2048 → 1024 → 512 のように環境数を減らしてください。
トレーニング環境を可視化する
バックエンドでは依然として 4096 環境すべてがトレーニングされています。 Viewer の設定は、検査のためにレンダリングされるロボット数のみを制御し、--env.scene.num-envs を変更しない限り、バックエンドのトレーニングバッチは減少しません。
Microduck を 1 体レンダリングする
ロボットを 1 体だけレンダリングするのが、トレーニング中の姿勢、接触、歩容を確認する最も分かりやすい方法です:

複数の Microduck をレンダリングする
多数のロボットをレンダリングすると、並列環境という概念が視覚的に分かりやすくなります。Viewer に表示されるのは一部のみですが、バックエンドの本番実行には依然として 4096 環境が含まれています:

Viewer は短時間の検査用ランを想定しています。長時間のトレーニングランでは、通常、連続的な描画オーバーヘッドを避けるためにヘッドレス EGL レンダリングを使用します。
任意のパフォーマンス設定
電力モードを選択する前に、サポートされているモードを確認します:
sudo nvpmodel -q
sudo nvpmodel
トレーニング中にデバイスをモニタリングします:
tegrastats
別の Jetson モデルから電力モード番号をそのままコピーしないでください。使用しているデバイスに対してサポートされている高パフォーマンスモードを選択してください。