![[Isaac Lab] AWS EC2 g5.xlarge + Amazon DCV で Isaac Sim を GUI 起動し、SO-ARM101 を手動で動かしてみました](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/v1779551790/user-gen-eyecatch/ay9ty0vhl0tkqvexqyqk.png)
[Isaac Lab] AWS EC2 g5.xlarge + Amazon DCV で Isaac Sim を GUI 起動し、SO-ARM101 を手動で動かしてみました
1 はじめに
製造ビジネステクノロジー部の平内(SIN)です。
ロボット制御や強化学習の勉強のためのシミュレータ環境として NVIDIA Isaac Sim / Isaac Lab がありますが、これを快適に動かすには RT Core を搭載した GPU が必要です。
そして、AWS EC2 にクラウド GPU 環境を立てるアプローチが、ここ Developers IO で、既に紹介されています。
NVIDIA / AWS 公式サポートの構成(Marketplace AMI「NVIDIA Isaac Sim Development Workstation」+ g6e インスタンス + SSM ポートフォワーディング)で、SSH キー不要・インバウンドポート全閉という美しい構成でブラウザから Amazon DCV に接続するアプローチが示されています。
「Isaac Sim をすぐ触ってみたい」「公式サポート構成で安定運用したい」というのであれば、この記事が最短ルートで素直で優れた選択になると思います。
私もこの記事に倣って、作業を進めていたのですが、「Isaac Sim を一度体験してみる」ではなく「継続的に Isaac Sim / Isaac Lab を学習したい」となると、AWS 利用費がどうしても気になってきます。
そこで、本記事では、基本的に先の記事をなぞりながら、少し工夫してみた点について紹介させてください。
2 本記事で工夫した点
本記事の工夫点は、以下です。
- g5.xlarge 利用 — 公式サポート外ですが、driver / kit / docker run の組み合わせを詰めて動作確認できました
- t3 ↔ g5 切替運用 — 普段は
t3.medium、GPU 必要時のみg5.xlargeに切り替える運用形態にしました - EBS 35 GiB 最小スタート — 停止時の EBS 利用費を抑えるため、最小限のサイズにしました(オンライン拡張可能)
- NGC コンテナベース(AMI 非依存) — 派生イメージで
xdg-utils同梱や Isaac Lab pre-install などを後から積むことも視野に入れました - CDK で IaC 化 —
teardown.shで完全削除、ISAAC_VERSION変数で NGCのバージョンを指定することで、Isaac Sim のバージョン追従可能になっています - シェルスクリプト — 再現性を確保し、改善を積み重ねられるように、操作シェルをいくつか準備しました
Marketplace AMI(g6e / g7e のみ対応)は、使用せず、NGC コンテナをUbuntuに立てる構成となっています。
工夫の結果、利用費は、概ね以下となりました。
| 状態 | インスタンス | 利用費(時) | 利用費(日) |
|---|---|---|---|
| 起動中 (GPUあり) | g5.xlarge | 約 232 円 | 約 5,568 円 |
| 起動中 (GPUなし) | t3.medium | 約 9 円 | 約 216 円 |
| 停止中(EBS 35 GiB のみ) | — | — | 約 17 円 |
| 完全削除 (teardown.sh) | — | — | 0 円 |
単価は 2026/05/15 時点のものです。
Amazon EC2 オンデマンド料金
なお、g5.xlarge を 1 ヶ月起動しっぱなしにすると約 17 万円となってしまいます。使用していない時の停止忘れには、十分に注意が必要です。
個人的には、下記のしくみで止め忘れをサポートする環境を構築しています。
[Amazon EC2] LINE で「まだ使ってる?」と聞いてくる EC2 停止忘れ防止の仕組みを作ってみました
3 前提環境
| 項目 | 値 |
|---|---|
| クライアント | Mac(Apple Silicon) |
| AWS リージョン | ap-northeast-1 |
| インスタンス(普段の作業) | t3.medium(2 vCPU / 4 GiB) |
| インスタンス(GUI 起動時) | g5.xlarge(NVIDIA A10G 24GB) |
| OS | Ubuntu 22.04 LTS |
| EBS | gp3 35 GiB(オンライン拡張可) |
| GUI 方式 | Amazon DCV(ブラウザ) |
| 接続方式 | SSM Session Manager + ポートフォワーディング |
| 構築方法 | AWS CDK (TypeScript) + AWS CLI + shell scripts |
| ベース | NVIDIA NGC isaac-sim:5.1.0 + MuammerBay/isaac_so_arm101 |
4 環境構築
最初に t3.medium で安く環境を整え、必要なときだけ g5.xlarge に切り替える運用です。
(1) AWS 側の事前確認
最初に、対象アカウント・リージョンで g5.xlarge が起動可能かを確認します。
G/VT vCPU クォータ確認
g5.xlarge は Running On-Demand G and VT instances という vCPU ベースのクォータに紐付きます。g5.xlarge = 4 vCPU 必要。
$ aws service-quotas get-service-quota \
--service-code ec2 \
--quota-code L-DB2E81BA \
--region ap-northeast-1 \
--query 'Quota.{Quota:QuotaName, Value:Value}' \
--output table
---------------------------------------------------
| GetServiceQuota |
+----------------------------------------+--------+
| Quota | Value |
+----------------------------------------+--------+
| Running On-Demand G and VT instances | 768.0 |
+----------------------------------------+--------+
Value が 4 以上なら OK。私のアカウントでは 768 vCPU だったのでそのまま進めました。不足なら Service Quotas コンソールから引き上げ申請します。
提供 AZ 確認
GPU インスタンスは AZ 限定で提供されます。ap-northeast-1 で g5.xlarge の提供 AZ を確認します。
$ aws ec2 describe-instance-type-offerings \
--location-type availability-zone \
--filters Name=instance-type,Values=g5.xlarge \
--region ap-northeast-1 \
--query 'InstanceTypeOfferings[].Location' \
--output table
-------------------------------
|DescribeInstanceTypeOfferings|
+-----------------------------+
| ap-northeast-1a |
| ap-northeast-1c |
+-----------------------------+
確認時点では ap-northeast-1a と ap-northeast-1c で提供されていました。CDK の VPC は ap-northeast-1a 固定となっています。
NGC API Key 準備
Isaac Sim の Docker イメージを nvcr.io から pull するため、NVIDIA NGC の API Key が必要です。
- NGC にアクセスしてアカウント作成(無料、既存の NVIDIA Developer アカウントでも可)
- 右上のアバター → Account Settings → Keys & Secrets → API Keys → Generate API Key
- Services で NGC Catalog にチェックを入れて生成
- 表示された Key を一度だけ控える(再表示不可)

AWS Session Manager Plugin のインストール
先の記事で紹介されていたとおり、AWS Systems Manager Session Manager 経由で接続するため、ローカル PC に AWS CLI v2 に加えて Session Manager Plugin が必要です。インストール方法は OS ごとに異なるので、公式ドキュメントを参照してください。
Session Manager プラグインをインストールする
# Homebrew で入れる場合
$ brew install --cask session-manager-plugin
# 動作確認
$ session-manager-plugin --version
1.2.814.0 # 2026.05 時点
(2) リポジトリ取得 + CDK デプロイ
$ git clone https://github.com/furuya02/aws-ec2-isaaclab-soarm101-gui.git
$ cd aws-ec2-isaaclab-soarm101-gui
$ cd cdk
$ pnpm install
$ pnpm exec cdk bootstrap # 初回のみ
$ pnpm exec cdk deploy
CDK スタックには以下が含まれます。
- VPC(
ap-northeast-1a単一 AZ、Public Subnet、NAT なし) - Security Group(インバウンド全閉、アウトバウンドのみ)
- IAM Role(
AmazonSSMManagedInstanceCore+ S3 Read for DCV License / NVIDIA driver) - EC2 Instance(初期
t3.medium/ EBS gp3 35 GiB)
Outputs には以下が表示されます。いずれも Public IP に依存しないため、stop/start のたびに値が変わることはありません。
InstanceId— stop/start で不変SsmStartCommand— SSM Session Manager の対話シェル起動コマンドDcvPortForwardCommand—localhost:8443→EC2:8443のポートフォワーディングコマンド

この時点では、t3.mediumのインスタンスが上がります。

(3) 接続確認(SSM Session Manager)
GitHub: scripts/connect.sh
$ ./scripts/connect.sh
scripts/connect.sh は Name タグで running なインスタンスの InstanceId を引いて、SSM Session Manager の対話シェルを開くヘルパーです。
SSM Session Manager では、デフォルトで、ssm-user というユーザーで /home/ssm-user にログインします。
本記事は ubuntu ユーザーのホーム に作業ファイルを置く前提で、connect.sh の中で sudo su - ubuntu を実行する形にしてあります(--document-name AWS-StartInteractiveCommand --parameters command="sudo su - ubuntu")。
$ ./connect.sh
Opening SSM session to i-09767e6e4d0500cbf (as ubuntu)...
Starting session with SessionId: AssumeRole-Session-4qln4eakc9cgj7nx64y565dd4e
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$ uname -a
Linux ip-10-0-0-4 6.8.0-1053-aws #56~22.04.1-Ubuntu SMP Tue Apr 21 06:13:23 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
$ whoami
ubuntu
$ pwd
/home/ubuntu
$ nvidia-smi
Command 'nvidia-smi' not found, but can be installed with:
この時点では、GPUが利用できる環境ではないため、nvidia-smiは利用できません。
(4) EC2 上にリポジトリを配置
setup-docker.sh などのセットアップスクリプトは EC2 上で実行するため、EC2 にも同じリポジトリを clone し、~/scripts から参照できるようにします。
$ cd ~
$ git clone https://github.com/furuya02/aws-ec2-isaaclab-soarm101-gui.git
$ ln -s ~/aws-ec2-isaaclab-soarm101-gui/scripts ~/scripts
$ ls ~/scripts/
connect.sh launch-isaac.sh setup-docker.sh switch-to-g5.sh teardown.sh
dcv-port-forward.sh setup-dcv.sh setup-isaac.sh switch-to-t3.sh
以降の ~/scripts/... はこのシンボリックリンク経由で実行します。
(5) Docker + NVIDIA Container Toolkit インストール
t3.medium 上で Docker CE と NVIDIA Container Toolkit を入れます。GPU 不要な作業なので、g5 に切り替える前に t3 で済ませることでコストを抑えます。
GitHub: scripts/setup-docker.sh
$ ~/scripts/setup-docker.sh
setup-docker.shでは、以下を実行しています。
1. Docker CE のインストール
- Docker 公式の GPG キーと apt リポジトリ(
download.docker.com)を追加 docker-ce/docker-ce-cli/containerd.io/docker-buildx-plugin/docker-compose-pluginを一括インストールubuntuユーザーをdockerグループに追加(以降はsudoなしでdockerコマンドを叩ける)
2. NVIDIA Container Toolkit のインストール
- NVIDIA 公式の GPG キーと apt リポジトリ(
nvidia.github.io/libnvidia-container)を追加 nvidia-container-toolkitパッケージを導入sudo nvidia-ctk runtime configure --runtime=dockerで Docker daemon にnvidiaランタイムを登録(/etc/docker/daemon.jsonを書き換え)sudo systemctl restart dockerで反映
Toolkitは t3.medium に GPU が無くても apt 経由のインストールは普通に進みます。
setup-docker.sh (抜粋)
#!/bin/bash
set -euo pipefail
# --- Docker CE ---
# 1. Docker 公式 GPG キーと apt リポジトリを追加
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 2. Docker 関連パッケージを一括インストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 3. ubuntu ユーザーを docker グループに追加(sudo なしで docker 実行可)
sudo usermod -aG docker ubuntu
# --- NVIDIA Container Toolkit ---
# 4. NVIDIA 公式 GPG キーと apt リポジトリを追加
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 5. nvidia-container-toolkit を入れて Docker daemon に nvidia runtime を登録
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker # /etc/docker/daemon.json を書き換え
sudo systemctl restart docker
NFO[0000] Config file does not exist; using empty config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that docker daemon be restarted.
==> Docker + NVIDIA Container Toolkit installed.
==> Log out and back in (or run 'newgrp docker') so the docker group takes effect.
$
完了後、docker グループの反映のため一度 exit で SSM セッションを抜けて再接続(./scripts/connect.sh)すれば、sudo なしで docker ps できます。また、nvidia-container-toolkitのインストールが完了していることも確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ nvidia-ctk --version
NVIDIA Container Toolkit CLI version 1.19.0
commit: ec7b4e2fa2caecad6d89be4a26029b831fe7503a
5 Amazon DCV セットアップ
(1) g5.xlarge への切替
ここからは、GPUインスタンスによる課金に注意が必要です。(g5.xlarge は約 232 円/h かかります)
GitHub: scripts/switch-to-g5.sh
ローカルPCで、switch-to-g5.shを実行します。
$ ./scripts/switch-to-g5.sh
スクリプトは「stop → modify-instance-attribute → start → wait」を一括実行します。EBS は共有で引き継がれるため、ここまでの作業は引き継がれます。
注意:g5 系はキャパシティ不足で起動失敗(
InsufficientInstanceCapacity)することがあります。その場合は時間を置いて再試行するか、g6.xlarge等の別タイプにフォールバックします。

(2) NVIDIA Datacenter Driver + Amazon DCV インストール
g5 に再接続(./scripts/connect.sh)してからsetup-dcv.shを実行します。
GitHub: scripts/setup-dcv.sh
$ ~/scripts/setup-dcv.sh
スクリプトは、以下を実行します。
ubuntu-desktop-minimalインストール- Wayland 無効化(DCV は Xorg ベース)
- gcc-12 を導入して default に切替(kernel 6.8 の DKMS ビルドに必須)
- CUDA Datacenter driver 570(
nvidia-driver-570)を apt で導入 - xorg.conf を手書きで作成(
AllowEmptyInitialConfiguration "True"含む) - Amazon DCV Server 2025.0 をインストール
dcv.confで自動 console session を有効化dcvserverを enable + startubuntuユーザーのパスワードを設定(DCV ログイン用)
setup-dcv.sh (抜粋)
# kernel 6.8 の DKMS ビルドには gcc-12 が必須(gcc-11 では失敗)。--set で明示切替する
sudo apt-get install -y build-essential gcc-12 "linux-headers-$(uname -r)"
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
sudo update-alternatives --set gcc /usr/bin/gcc-12
# GRID ではなく CUDA Datacenter driver 570 を apt で導入(GRID は Isaac Sim でクラッシュ → 後述「10-(1)」)
wget -q https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update && sudo apt-get install -y nvidia-driver-570
# DCV の自動 console session を ubuntu 所有で作成
sudo tee /etc/dcv/dcv.conf > /dev/null <<'EOF'
[session-management]
create-session = true
[session-management/automatic-console-session]
owner = "ubuntu"
[display]
target-fps = 30
EOF
sudo systemctl enable --now dcvserver
sudo passwd ubuntu # DCV ブラウザログインで使うパスワードを設定
sudo passwd ubuntu で設定するパスワードが、後でブラウザから DCV ログインする際に使われます。
==> Set the ubuntu user password for DCV login:
New password:
Retype new password:
passwd: password updated successfully
============================================================
DCV setup complete.
Reboot is required to load NVIDIA driver 570:
sudo reboot
After reboot, open in your browser:
https://<PublicIp>:8443
Username: ubuntu
Password: (the one you just set)
============================================================
完了後、ドライバ反映のため reboot します:
$ sudo reboot
1〜2 分待ってから ./scripts/connect.sh で再接続し、nvidia-smi で A10G + driver 570 + Xorg + DCV agent が GPU を使っていることを確認します。

(3) ブラウザから DCV 接続(SSM ポートフォワーディング)
DCV のポート 8443 は Security Group で閉じてあるため、SSM Session Manager の AWS-StartPortForwardingSession で localhost:8443 → EC2:8443 のトンネルを張ってからブラウザ接続します。
GitHub: scripts/dcv-port-forward.sh
ローカル PC で、別ターミナルから、トンネルを張ります。(Ctrl+C で切断)
$ ./scripts/dcv-port-forward.sh
==> Forwarding localhost:8443 -> i-09767e6e4d0500cbf:8443
Open in a browser: https://localhost:8443
(Ctrl+C to stop)
Starting session with SessionId: AssumeRole-Session-3yfdooddj9baagflchg6cxhdje
Port 8443 opened for sessionId AssumeRole-Session-3yfdooddj9baagflchg6cxhdje.
Waiting for connections...
続いてブラウザで、https://localhost:8443を開きます。
自己署名証明書のため警告が出ます。Chrome なら「詳細設定」→「localhost にアクセスする(安全ではありません)」で進みます。
- Username:
ubuntu - Password: 先ほど
sudo passwd ubuntuで設定したもの

Ubuntu の GNOME デスクトップがブラウザに表示されれば成功です。


6 Isaac Sim GUI で SO-ARM101 を触ってみる
(1) NGC ログイン + Isaac Sim コンテナ取得
GitHub: scripts/setup-isaac.sh
SSM セッション内(./scripts/connect.sh で接続中)の EC2 上で:
~/scripts/setup-isaac.sh
スクリプトは以下を行います。
- NGC API Key を対話入力
docker login nvcr.io --username '$oauthtoken' --password-stdindocker pull nvcr.io/nvidia/isaac-sim:5.1.0~/work配下のパーミッション緩和(sudo chmod -R a+rwX ~/work/)git clone https://github.com/MuammerBay/isaac_so_arm101.git- Isaac Sim 起動用の
docker runコマンドを画面に表示
setup-isaac.sh (抜粋)
#!/bin/bash
set -euo pipefail
ISAAC_VERSION="${ISAAC_VERSION:-5.1.0}" # この変数で Isaac Sim のバージョンを切替可能
NGC_IMAGE="nvcr.io/nvidia/isaac-sim:${ISAAC_VERSION}"
# 1. NGC API Key を対話入力(履歴・ファイルには残さない)
echo "Enter your NGC API Key (input is hidden):"
read -rs NGC_API_KEY
# 2. NGC レジストリにログイン(Username は文字通り '$oauthtoken' 固定)
echo "${NGC_API_KEY}" | docker login nvcr.io \
--username '$oauthtoken' --password-stdin
unset NGC_API_KEY
# 3. Isaac Sim コンテナを pull(~30 GB、初回は 5〜20 分)
docker pull "${NGC_IMAGE}"
# 4. SO-ARM101 の URDF をリポジトリから取得(uv sync は不要、URDF を借りるだけ)
mkdir -p ~/work && cd ~/work
[[ -d isaac_so_arm101 ]] || git clone https://github.com/MuammerBay/isaac_so_arm101.git
# 5. URDF Importer が同階層に USD ファイルを書き出すため、~/work の書込権限を緩める
# (コンテナ内 root → ホスト ubuntu uid 1000 の書込問題を回避)
sudo chmod -R a+rwX "${HOME}/work"
# 6. Isaac Sim 用 cache ディレクトリを事前作成(GPU タイプ切替時はクリア推奨)
mkdir -p ~/docker/isaac-sim/{kit-cache,ov-cache,gl-cache,compute-cache,logs}
(2) Isaac Sim を Native GUI モードで起動
GitHub: scripts/launch-isaac.sh
DCV のデスクトップ画面に戻り、そのデスクトップ内のターミナルから、起動スクリプトを実行します。
$ ~/scripts/launch-isaac.sh

launch-isaac.sh は内部で以下を実行します:
DISPLAY必須チェック(無ければエラーで停止)- cache ディレクトリを
~/docker/isaac-sim/{kit,ov,gl,compute}-cache+logsで事前作成 xhost +local:dockerで X server へのアクセス許可- 既存
isaac-simコンテナの残骸をdocker rm -f docker run --runtime=nvidia --gpus all --ipc=host --network=host ... --entrypoint /isaac-sim/kit/kit nvcr.io/nvidia/isaac-sim:5.1.0 /isaac-sim/apps/isaacsim.exp.full.kit --/app/extensions/registryEnabled=falseをexecで起動
launch-isaac.sh (抜粋)
#!/bin/bash
set -euo pipefail
NGC_IMAGE="${NGC_IMAGE:-nvcr.io/nvidia/isaac-sim:5.1.0}"
EXPERIENCE="${EXPERIENCE:-/isaac-sim/apps/isaacsim.exp.full.kit}"
# 1. DISPLAY 必須チェック(SSM / SSH ターミナル等での誤実行を早期失敗させる)
if [[ -z "${DISPLAY:-}" ]]; then
echo "Error: DISPLAY is not set. Run inside the DCV desktop terminal." >&2
exit 1
fi
# 2. --clear-cache: GPU タイプ切替直後など、shader cache の不整合を解消したい時
if [[ "${1:-}" == "--clear-cache" ]]; then
rm -rf ~/docker/isaac-sim/{kit-cache,ov-cache,gl-cache,compute-cache,logs}
fi
# 3. cache ディレクトリ確保 + X server アクセス許可 + 残骸コンテナ掃除
mkdir -p ~/docker/isaac-sim/{kit-cache,ov-cache,gl-cache,compute-cache,logs}
xhost +local:docker > /dev/null
docker rm -f isaac-sim 2>/dev/null || true
# 4. Native GUI を kit + experience を直接指定して起動
# (./isaac-sim.sh は default で Streaming experience になるため使わない)
# --/app/extensions/registryEnabled=false: online extension registry
# (omni.kit.registry.nucleus)の同期を無効化。付けないと起動が数分 hang する
# ことがある。URDF はローカルから読み込むので online registry は不要。
exec docker run --name isaac-sim --rm \
--runtime=nvidia --gpus all \
--ipc=host --network=host \
-e DISPLAY="${DISPLAY}" -e ACCEPT_EULA=Y -e PRIVACY_CONSENT=Y \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "${HOME}/work:/work" \
-v "${HOME}/docker/isaac-sim/kit-cache:/isaac-sim/kit/cache:rw" \
-v "${HOME}/docker/isaac-sim/ov-cache:/root/.cache/ov:rw" \
-v "${HOME}/docker/isaac-sim/gl-cache:/root/.cache/nvidia/GLCache:rw" \
-v "${HOME}/docker/isaac-sim/compute-cache:/root/.nv/ComputeCache:rw" \
-v "${HOME}/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw" \
--entrypoint /isaac-sim/kit/kit \
"${NGC_IMAGE}" \
"${EXPERIENCE}" \
--/app/extensions/registryEnabled=false
数分待つと、DCV デスクトップに 「Isaac Sim Full 5.1.0」 のウィンドウが開きます。途中で「is not responding」ダイアログが出たら Wait を押して待ち続けます。

(3) URDF Import
メニュー File → Import を選び、ファイル選択ダイアログで URDF を選びます。
/work/isaac_so_arm101/src/isaac_so_arm101/robots/trs_so101/urdf/so_arm101.urdf

Import ボタンを押すと、3D Viewport に SO-ARM101 のロボットアームが表示されます。
初回は表示までにロボットのマテリアルのシェーダーコンパイルで数分かかります。2 回目以降はキャッシュが効いて速くなります。

(4) Physics Inspector で 6 関節を動かす
メニュー Tools → Physics → Physics Inspector を開きます。Stage パネルで so101_new_calib を選択した状態で、Physics Inspector 上部の 円形矢印アイコンをクリックします。

その後表示される Re-Enable authoring ボタンを押すと、Articulation がパースされ、6 関節のスライダーが表示されます。
各行の中央にある青いバー(Drive Target Position)をドラッグすると、3D Viewport で SO-ARM101 のリンクがリアルタイムに動きます。

(5) 2 回目以降の起動を速くする:シーンを USD として保存
URDF Import は そのたびに USD を生成し直すため、ロボットのマテリアルのシェーダーコンパイルが毎回走ります。これを避けるには、最初の 1 回だけ URDF Import し、結果を USD として保存して、次回からはそれを開きます。
- URDF Import してアームが表示された状態で、File → Save As で保存(例:
/work/so_arm101_scene.usd) - 次回からは File → Import ではなく File → Open でその USD を開く

こうすると、シェーダーキャッシュ(~/docker/isaac-sim/{kit,ov,gl,compute}-cache にホスト保存)が効いて、2 回目以降はコンパイル待ちがほぼ無く開けるようになります。
シェーダーキャッシュは EBS に永続化されているので、Docker やインスタンスを再起動しても残ります。
7 g5.xlarge で対応できるか(実測)
「公式サポート外の g5.xlarge で本当に足りるのか」を、nvtop(sudo apt install -y nvtop)で実測しました。

- GPU-Util は定常 28% 前後(カメラ回転や関節操作の瞬間だけ一時的に 70〜75% 程度までスパイク)→ A10G は余裕
kit(Isaac Sim 本体)が CPU 約 245%(≒ 2.4 コア)を常時消費 → 4 vCPU の g5.xlarge では まだ大丈夫dcvagent(DCV)は CPU 17% 程度(GPU エンコードを使うため軽い)
操作時の FPS は 100 前後出ており、SO-ARM101 を Physics Inspector で動かす程度なら g5.xlarge で問題なしと言えそうです。

今後、CPU が不足したら g5.2xlarge へ、GPU が不足したら g6e へ移行を検討することにします。
8 停止・t3.medium への移行
GUI 操作が必要ない(データのコピーなど)場合、 t3.medium へ戻すことでコスト削減となります。
GitHub: scripts/switch-to-t3.sh
./scripts/switch-to-t3.sh
なお、作業がない場合は、インスタンスは確実に停止してください。
9 完全削除
下記のコマンドで完全削除できます。
GitHub: scripts/teardown.sh
./scripts/teardown.sh
スクリプトは内部で pnpm exec cdk destroy --force を実行し、その後 EC2 / EBS の残留をチェックします。CDK 管理下のため、Stack 削除で EC2 / EBS / SG / IAM Role / VPC まで一括削除されます。
10 気になった点
(1) GRID driver では Isaac Sim 5.1.0 が動かない
私の環境だけかも知れませんが、NVIDIA GRID driver(Virtual Workstation 用)で Isaac Sim 5.1.0 を起動すると、librtx.scenedb.plugin.so!carbOnPluginStartup でクラッシュしてしまいました。
[Fatal] [carb.crashreporter-breakpad.plugin] 004: librtx.scenedb.plugin.so!carbOnPluginStartup+0x3b4de
...
Segmentation fault (core dumped)
今回は、GRID driver ではなく CUDA Datacenter driver nvidia-driver-570 を apt で入れました。
(2) headless
AWS の EC2 はモニタが接続されていない headless サーバなので、Option "AllowEmptyInitialConfiguration" "True" を含めないと Xorg が起動できません。
Section "Device"
Identifier "Device0"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration" "True"
EndSection
(3) ./isaac-sim.sh はデフォルトで Streaming experience が起動する
nvcr.io/nvidia/isaac-sim:5.1.0 の /isaac-sim/isaac-sim.sh を実行すると、ログに Isaac Sim Full Streaming Version: 5.1.0-rc.19 と出て、WebRTC streaming プロファイルが起動します。この状態では DCV デスクトップに Native GUI ウィンドウが描画出来ませんでした。
docker run ... \
--entrypoint /isaac-sim/kit/kit \
nvcr.io/nvidia/isaac-sim:5.1.0 \
/isaac-sim/apps/isaacsim.exp.full.kit
/isaac-sim/apps/ には isaacsim.exp.full.kit(Native)と isaacsim.exp.full.streaming.kit(Streaming)が分かれて存在しており、Native を明示することで DCV に Isaac Sim ウィンドウが表示できました。
(4) URDF Import で Could not create directory エラー
Isaac Sim の URDF Importer は URDF と同じディレクトリに USD ファイルを書き出します。setup-isaac.sh では、コンテナ内 root が書き込めるよう、ホスト側 ~/work のパーミッションを緩めています。
sudo chmod -R a+rwX ~/work/
(5) GPU タイプを切り替えたら shader cache をクリア
GPUタイプを変えて Isaac Sim を起動すると、[56s] omni.kit.registry.nucleus startup の段階で hang しました。
GPU タイプを変更したら cache を全削除して再生成が必要です。
rm -rf ~/docker/isaac-sim/{kit-cache,ov-cache,gl-cache,compute-cache,logs}
mkdir -p ~/docker/isaac-sim/{kit-cache,ov-cache,gl-cache,compute-cache,logs}
(6) NVIDIA driver の DKMS ビルドが gcc-11 で失敗する
kernel 6.8 環境では nvidia-driver-570 のモジュールビルドが、 gcc-11 で失敗します。gcc-12 を入れ、update-alternatives --set で明示的に切り替えてから 再構成して解消できました。
sudo apt-get install -y gcc-12
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
sudo update-alternatives --set gcc /usr/bin/gcc-12 # ← これが無いと gcc-11 のまま
sudo dpkg --configure -a # gcc-12 で nvidia-dkms 再ビルド
11 最後に
今回は、「継続的に Isaac Sim / Isaac Lab を学習したい」
ということで、EC2で環境を構築してみました。
「7 g5.xlarge で対応できるか(実測)」で確認した通り、SO-ARM101 を 1 体、Physics Inspector で手動操作 ぐらいの操作であれば、GPU(A10G) は余裕・CPU も操作中で 7 割程度に収まり、g5.xlarge で必要十分でした。
ただし、下記のような作業に進んだ場合、恐らく力不足となるでしょう。
- 強化学習で並列環境を多数立てる(CPU/GPU の両方を食う)
- 複数ロボット・複雑なシーンを同時に扱う
- 物理シミュレーションを連続再生(Play)し続ける
最初の一歩として、まず g5.xlarge で安く始め、重い用途に進む段階でリソースの増強を考えることにします。
GitHub リポジトリ: aws-ec2-isaaclab-soarm101-gui






