SuperAPI AI 工具集

isaac-sim-headless-deployment

部署与运维

查看项目

更新于 10-16 11:05

技能介绍

用途

本技能用于以无头方式(不带窗口)启动 Isaac Sim,支持批处理仿真、自动化数据生成以及服务器端负载,依赖受支持的 CLI 参数和 SimulationApp 模式。

前置条件

  • 已构建的 Isaac Sim($ISAAC_SIM_DIR 或 _build/linux-x86_64/release)。
  • 具备当前驱动的 NVIDIA GPU(nvidia-smi)。
  • 来自 isaac-sim-orchestrator 的 shell 环境约定:$ISAAC_SIM_DIR、$ISAAC_LAB_DIR、$WORKSPACE_DIR。

限制

  • 目标为 Isaac Sim 6 / Kit 110,除非某节另有说明。
  • 不替代 NVIDIA 官方文档对不受支持的边缘情况的说明。
  • 不涉及 Docker 镜像、容器编排或 CI/CD 接线;这些属于包装 Isaac Sim 的部署基础设施。

可用脚本

脚本 用途 参数
scripts/batch_simulation.py Isaac Sim(Kit 110)无头批量仿真循环 见脚本 --help
scripts/ci_physics_nightly.sh 通过 python.sh 或 Kit CLI 的 CI 仅物理夜间运行器 <test_script.py> [args...]

运行脚本的方式:在暴露技能执行助手的智能体运行时中,使用 run_script("scripts/batch_simulation.py", args=["--help"]) 调用;在已构建的 Isaac Sim 目录树中,使用 _build/*/release 下的 ./python.sh(Linux)或 python.bat(Windows)运行同一文件,或直接执行不依赖仿真器的 shell 助手。

启动模式

  1. 带头模式(默认):./isaac-sim.sh,以完整 UI 启动 isaacsim.exp.full.kit。
  2. 带渲染的无头模式(无窗口生成图像):./isaac-sim.sh --no-window(原生无头,使用 EGL/Vulkan 离屏);某些系统需显式 DISPLAY:DISPLAY=:0 ./isaac-sim.sh --no-window。
  3. 无渲染无头模式(仅物理,无视口无渲染):./isaac-sim.sh --no-window --/app/renderer/enabled=false。
  4. Python 独立脚本:./python.sh my_simulation.py,脚本通过 SimulationApp 配置控制无头行为,python.sh 本身无需 --no-window 参数。
  5. Kit CLI 执行脚本:默认 ./kit/kit apps/isaacsim.exp.full.kit --exec "my_script.py";无头仅物理批量形如 ./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=N、--enable EXT_ID、--ext-folder PATH、--exec SCRIPT、--no-ros-env(跳过 ROS 2 自动 source)。

应用配置

配置文件 用途
isaacsim.exp.full.kit 完整仿真(默认)
isaacsim.exp.full.newton.kit Newton 物理引擎
isaacsim.exp.full.fabric.kit Fabric 场景委托
isaacsim.exp.base.kit 最小基础(启动更快)
isaacsim.exp.base.python.kit 纯 Python 基础
isaacsim.exp.base.python.physics.headless.kit 仅物理无头(CI 夜间)
isaacsim.exp.base.zero_delay.kit 零延迟基础

CI 仅物理夜间运行

使用专用 kit 文件:./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 test_physics_batch.py --/renderer/enabled=false --/app/window/enabled=false --/app/livestream/enabled=false。

该 kit 文件内置:renderer.enabled = false;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 封装两种模式:设置 CI_KIT_MODE=1 使用 Kit CLI,不设置则默认使用 python.sh。

批量仿真模式

规范的引导模式位于 source/standalone_examples/api/isaacsim.simulation_app/hello_world.py(最小)和 load_stage.py(打开 stage 并带 --test 模式的步进循环)。N 轮批量驱动可在 Python for episode in range(N) 循环中包装该引导。使用当前 API:isaacsim.core.experimental.utils.stage 用于打开 stage/等待加载;isaacsim.core.simulation_manager.SimulationManager.setup_simulation(dt=..., device=...) 配置物理;isaacsim.core.experimental.utils.app(enable_extension、play、stop、update_app)驱动循环。骨架 run_batch_simulation(scene_path, num_episodes, steps_per_episode, dt, device) 为无头 SimulationApp 循环,打开 USD、等待加载、设置物理、步进并每个 episode 停止。参见 scripts/batch_simulation.py。避免使用旧版 isaacsim.core.api.World / isaacsim.core.utils.stage 路径,它们在 Kit 110 中已弃用。迁移参见 Renaming Extensions 中 omni.isaac.* → isaacsim.* 的映射。

批量/无头性能调优

仅物理(最快):config = {"headless": True, "renderer": None};步进循环中 world.step(render=False);吞吐量依场景复杂度约为实时的 10-50 倍。

内存管理:episode 之间清理 stage(world.clear() + 垃圾回收);使用可实例化资产(config.yaml 中 make_instanceable: true);用 nvidia-smi 监控 GPU 显存——未正确清理 stage 时 Kit 会泄漏;GB10(Jetson)最多约 35K prims、16GB 共享内存,需降低场景复杂度。

已知问题(Kit 110)

某些 GPU 配置下复杂 stage 的 Kit 110 无头视口需要 DISPLAY=:0;某些配置下没有 DISPLAY 视口从不初始化——使用 --no-window + 离屏渲染;CUDA OOM 用 nvidia-smi 监控,保持 GPU 显存利用率低于 90%;冷启动约 30-60 秒,交互式批量建议使用常驻进程;Newton 物理与 torch 冲突:切勿在物理稳定前 import torch。

故障排查

错误/症状 原因 解决方案
扩展或 import 找不到 $ISAAC_SIM_DIR 错误或构建陈旧 将环境变量指向 _build/linux-x86_64/release 或重新构建
黑屏或空帧 缺少灯光或非 RTX 渲染模式 添加 dome/key 灯;确认 RTX / PathTracing 设置
stage 加载或首次渲染卡住 MDL 编译或 stage 过大 遵循 isaac-sim-troubleshooting 中的隔离步骤