メインコンテンツまでスキップ

Jetson 上に Microduck RL 環境をデプロイする

この章では、Jetson システムの準備、プロジェクト環境のインストール、ディレクトリ構成の説明、および PPO トレーニングが CUDA 上で実行できることの検証を行います。

ハードウェアとソフトウェア

このデモでは、次のプラットフォームで検証を行いました:

項目バージョン
デバイスJetson Orin NX 16GB 搭載 Seeed reComputer
OSUbuntu 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 ストレージを使用してください。アクティブクーリング、安定した電源供給、および信頼性の高いネットワーク接続を推奨します。

警告

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 とトレーニングマネージャが起動すると、ターミナルにはアクティブな終端条件、報酬、カリキュラム、アクタ、およびクリティックの設定が表示されます:

ターミナルで起動中の Microduck MuJoCo とトレーニングマネージャ

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

Jetson 上での Microduck PPO トレーニングイテレーションのメトリクス

4096 個の並列トレーニング環境を実行する

このデモで使用した本番トレーニング実行では、バックエンドが 4096 個の独立した Microduck 環境 を並列にシミュレートします:

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

jtop を使用すると、4096 環境のトレーニングプロセス実行中の GPU 負荷とデバイス状態を確認できます:

4096 個の Microduck 環境をトレーニング中の Jetson jtop 出力

メモリが不足する場合は、4096 → 2048 → 1024 → 512 のように環境数を減らしてください。

トレーニング環境を可視化する

バックエンドでは依然として 4096 環境すべてがトレーニングされています。 Viewer の設定は、検査のためにレンダリングされるロボット数のみを制御し、--env.scene.num-envs を変更しない限り、バックエンドのトレーニングバッチは減少しません。

Microduck を 1 体レンダリングする

ロボットを 1 体だけレンダリングするのが、トレーニング中の姿勢、接触、歩容を確認する最も分かりやすい方法です:

バックエンドが 4096 環境をトレーニングしている間に 1 体の Microduck を可視化した様子

複数の Microduck をレンダリングする

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

バックエンドが 4096 環境をトレーニングしている間に複数の Microduck を可視化した様子

Viewer は短時間の検査用ランを想定しています。長時間のトレーニングランでは、通常、連続的な描画オーバーヘッドを避けるためにヘッドレス EGL レンダリングを使用します。

任意のパフォーマンス設定

電力モードを選択する前に、サポートされているモードを確認します:

sudo nvpmodel -q
sudo nvpmodel

トレーニング中にデバイスをモニタリングします:

tegrastats

別の Jetson モデルから電力モード番号をそのままコピーしないでください。使用しているデバイスに対してサポートされている高パフォーマンスモードを選択してください。

次のステップ

Loading Comments...