mcpField
I
isaac-sim-headless-deployment

isaac-sim-headless-deployment

github.com/isaac-simクラウド・DevOps4.4k52 回インストール5 日前に更新
リポジトリ

isaac-sim-headless-deployment について

Isaac Simをウィンドウなしで実行するためのスキルです。バッチシミュレーション、自動データ生成、サーバーワークロード向けに、CLIとSimulationAppの起動方法をレンダリングあり・物理演算のみの両方で説明します。

主な機能

  1. 01ヘッドレス起動モード
  2. 02バッチシミュレーションスクリプト
  3. 03物理演算のみの夜間ランナー
  4. 04KitとPythonの起動パターン

活用シーン

  1. 01シミュレーションの反復実行
  2. 02UIなしでのデータ生成
  3. 03物理演算のみの夜間チェック

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/isaac-sim/isaacsim --skill isaac-sim-headless-deployment

インストール後、Claude Code で/isaac-sim-headless-deploymentを入力して読み込まれたか確認します。

同梱ファイルscripts/batch_simulation.pyscripts/ci_physics_nightly.sh

詳細

Isaac Sim のヘッドレス使用(--no-window)

目的

サポートされている CLI フラグと SimulationApp のパターンを使って、バッチシミュレーション、自動データ生成、サーバーワークロード向けにウィンドウなしで Isaac Sim を起動します。

前提条件

  • ビルド済み Isaac Sim($ISAAC_SIM_DIR または _build/linux-x86_64/release)。
  • 最新のドライバーを搭載した NVIDIA GPU(nvidia-smi)。
  • isaac-sim-orchestrator のシェル環境変数要件:$ISAAC_SIM_DIR、$ISAAC_LAB_DIR、$WORKSPACE_DIR。

制限事項

  • セクション内に別途記載がない限り、Isaac Sim 6/Kit 110 を対象とします。
  • サポート対象外の特殊なケースについて、NVIDIA の公式ドキュメントに代わるものではありません。

トラブルシューティング

エラー/症状原因解決策
拡張機能またはインポートが見つからない$ISAAC_SIM_DIR が誤っている、またはビルドが古い環境変数を _build/linux-x86_64/release に設定するか、再ビルドします
フレームが黒い、または空になるライトがない、または RTX 以外のレンダリングモードドームライト/キーライトを追加し、RTX/PathTracing の設定を確認します
ステージの読み込み時または最初のレンダリング時に停止するMDL のコンパイル、またはステージのサイズが大きすぎるisaac-sim-troubleshooting の切り分け手順に従います

このスキルでは、ビルド済みまたはインストール済みの Isaac Sim のヘッドレス使用を扱います。Docker イメージ、コンテナーオーケストレーション、CI/CD の構成は扱いません。これらは、このスキルではなく、Isaac Sim をラップするデプロイ用インフラストラクチャで扱います。

利用可能なスクリプト

スクリプト目的引数
scripts/batch_simulation.pyIsaac Sim(Kit 110)向けのヘッドレスバッチシミュレーションループscript --help を参照
scripts/ci_physics_nightly.shpython.sh または Kit CLI による CI の物理演算専用ナイトリーランナー<test_script.py> [args...]

スクリプトの実行

スキル実行ヘルパーを利用できるエージェントランタイムからは、run_script() を使ってヘルパーを呼び出します。

run_script("scripts/batch_simulation.py", args=["--help"])

ビルド済みの Isaac Sim ツリーからは、_build/*/release で ./python.sh(Linux)または python.bat(Windows)を使って同じファイルを実行します。または、シミュレーターを必要としない場合はシェルヘルパーを直接実行します。

起動モード

1. ウィンドウあり(デフォルト)
./isaac-sim.sh
# Launches isaacsim.exp.full.kit with full UI
2. レンダリングありのヘッドレス

ヘッドレス GPU レンダリングの場合(ウィンドウなしで画像を生成します):

# Native headless — uses EGL/Vulkan offscreen
./isaac-sim.sh --no-window

# With explicit display (required on some systems)
DISPLAY=:0 ./isaac-sim.sh --no-window
3. レンダリングなしのヘッドレス

物理演算のみのシミュレーションの場合(ビューポートなし、レンダリングなし):

./isaac-sim.sh --no-window --/app/renderer/enabled=false
4. Python スタンドアロンスクリプト

スタンドアロンの Python スクリプトからシミュレーションのロジックを実行します。

./python.sh my_simulation.py
# Uses Isaac Sim's Python environment with all extensions available

スクリプトは SimulationApp の設定でヘッドレス動作を制御します(下記のバッチシミュレーションのパターンを参照)。python.sh に --no-window フラグを指定する必要はありません。

5. スクリプト実行付き Kit CLI
# Default — full Isaac Sim experience with rendering enabled
./kit/kit apps/isaacsim.exp.full.kit --exec "my_script.py"

# Headless physics-only batch
./kit/kit apps/isaacsim.exp.full.kit \
    --no-window \
    --/app/renderer/enabled=false \
    --exec "physics_batch.py"

主な CLI フラグ

フラグ説明
--no-windowウィンドウの作成を無効にします(ヘッドレス)
--/app/renderer/enabled=falseレンダリングを完全に無効にします
--/app/window/width=Wビューポートの幅を設定します
--/app/window/height=Hビューポートの高さを設定します
--/app/settings/fabricDefaultStageFrameHistoryCount=NFabric のフレーム履歴
--enable EXT_ID特定の拡張機能を有効にします
--ext-folder PATH拡張機能の検索パスを追加します
--exec SCRIPT起動時にスクリプトを実行します
--no-ros-envROS 2 の自動ソース設定をスキップします

アプリ設定

設定ファイル用途
isaacsim.exp.full.kitフルシミュレーション(デフォルト)
isaacsim.exp.full.newton.kitNewton 物理エンジン
isaacsim.exp.full.fabric.kitFabric シーンデリゲート
isaacsim.exp.base.kit最小構成のベース(起動が高速)
isaacsim.exp.base.python.kitPython 専用のベース
isaacsim.exp.base.python.physics.headless.kit物理演算専用ヘッドレス(CI ナイトリー)
isaacsim.exp.base.zero_delay.kitゼロ遅延ベース

CI の物理演算のみの夜間実行

レンダリングもウィンドウも使用しない、物理演算のみの夜間 CI では、専用のキットファイルを使用します。

# Kit CLI mode — self-contained headless physics config
./kit/kit apps/isaacsim.exp.base.python.physics.headless.kit \
    --no-window \
    --/app/renderer/enabled=false \
    --exec "test_physics_batch.py"

SimulationApp を自分で初期化するスタンドアロンの Python スクリプトでは、レンダラーを無効にするフラグを付けて python.sh を使用します。

# python.sh mode — flags passed through to Carbonite/Kit settings
./python.sh test_physics_batch.py \
    --/renderer/enabled=false \
    --/app/window/enabled=false \
    --/app/livestream/enabled=false

キットファイル(isaacsim.exp.base.python.physics.headless.kit)には、次の設定が組み込まれています。

  • renderer.enabled = false — GPU レンダリングサブシステムを使用しません
  • app.window.enabled = false — ウィンドウを作成しません
  • app.livestream.enabled = false — ストリーミングを無効にします
  • すべての UI/ビューポート/マニピュレーター拡張機能を無効にします
  • すべてのレンダリング拡張機能(omni.hydra.rtx、omni.rtx.*、omni.syntheticdata、omni.replicator.core)を無効にします
  • 物理演算に最適化されたループ設定(rateLimitEnabled = false、manualModeEnabled = true、useFixedTimeStepping = true)

ラッパースクリプト scripts/ci_physics_nightly.sh は、両方のモードをカプセル化します。 Kit CLI では CI_KIT_MODE=1 を設定し、python.sh を使用する場合(デフォルト)は未設定のままにします。

バッチシミュレーションのパターン

ヘッドレス起動の標準パターンは、次のファイルにあります。

  • source/standalone_examples/api/isaacsim.simulation_app/hello_world.py(最小構成)
  • source/standalone_examples/api/isaacsim.simulation_app/load_stage.py(ステージを開き、--test モードでステップループを実行)

N エピソードのバッチドライバーでは、この起動処理を Python の for episode in range(N) ループで囲みます。現行の API を使用してください。

  • ステージを開く/読み込みを待機するには isaacsim.core.experimental.utils.stage
  • 物理演算を設定するには isaacsim.core.simulation_manager.SimulationManager.setup_simulation(dt=..., device=...)
  • ループを進めるには isaacsim.core.experimental.utils.app(enable_extension、play、stop、update_app)

スケルトン(load_stage.py を基に要約し、バッチ用に調整):

run_batch_simulation(scene_path, num_episodes, steps_per_episode, dt, device) — USD を開き、読み込みを待ち、物理演算を設定してステップを実行し、各エピソードを停止するヘッドレスの SimulationApp ループです。

scripts/batch_simulation.py を参照してください。

Kit 110 では非推奨の、旧式の isaacsim.core.api.World/isaacsim.core.utils.stage のパスは使用しないでください。

移行: omni.isaac.core、omni.isaac.utils などを対象とする omni.isaac.* → isaacsim.* の対応表については、拡張機能の名称変更を参照してください。

バッチ/ヘッドレス実行のパフォーマンス調整

物理演算のみ(最速)
config = {"headless": True, "renderer": None}
# In step loop:
world.step(render=False)

スループット: シーンの複雑さに応じて、リアルタイムの 10~50 倍です。

メモリ管理
  • エピソード間でステージをクリアする:world.clear() + ガベージコレクション
  • インスタンス化可能なアセットを使用する:config.yaml で make_instanceable: true を設定
  • GPU メモリを監視する:nvidia-smi — ステージが適切にクリアされないと Kit でメモリリークが発生します
  • GB10(Jetson):最大約 35K プリム、共有メモリ 16GB — シーンの複雑さを抑えてください

既知の問題(Kit 110)

  • 複雑なステージを Kit 110 でヘッドレスビューポート表示する場合、一部の GPU 構成では DISPLAY=:0 が必要です
  • 一部の構成では DISPLAY がないとビューポートが初期化されません — --no-window とオフスクリーンレンダリングを使用してください
  • CUDA OOM:nvidia-smi で監視し、GPU VRAM 使用率を 90% 未満に保ってください
  • 起動時間:コールドスタートでは約 30~60 秒です。対話型のバッチ処理ではプロセスを常駐させてください
  • Newton 物理演算と torch の競合:物理演算が安定する前に torch をインポートしないでください

コメント