Isaac Lab
SkillCloud & infraUse when working on Isaac Lab RL simulation, deployment, SkyPilot workflows, or customer custom-fork support.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Isaac Lab skill
What this skill tells your AI
The instructions your AI receives, as published by nebius/nebius-physical-ai in skills/tools/isaac-lab/SKILL.md and read by ahel’s review.
Isaac Lab is the RL simulation framework. The canonical workbench pins the
latest published 3.Y beta point, v3.0.0-beta2.patch1 / wheel
3.0.0b2.post1, with Isaac Sim 6.0.1.0. Upstream has not labeled this a GA
release; keep the beta limitation explicit. Use L40S or RTX Pro 6000 for the
validated graphics/PhysX path. Rendering, camera-bearing tasks, and deployed
workbenches require RT cores and cannot target B200, H100, or H200.
The standalone training routing guard allows state-based, camera-free tasks to select datacenter GPUs. This is routing eligibility, not proof that the selected Isaac image, PhysX runtime, and driver work there. Require real training and a checkpoint from that exact runtime before claiming support; historical Isaac Lab 2.x results do not validate the generation 3 beta image.
Generation 3 training must invoke --visualizer none. A compatibility path
that can also receive a generation 2 image must select --headless only when
the image's ISAAC_LAB_VERSION starts with 2..
Before provisioning, building, downloading, or submitting an Isaac workload,
load skills/atomic/third-party-eula-preflight/SKILL.md. NPA defaults the
run-scoped ACCEPT_EULA=Y value for non-interactive use and preserves a
recognized negative value or --no-accept-eula opt-out. Legacy affirmative
spellings normalize case-insensitively; unrecognized values are errors.
Runtime Isaac bootstrap (the container ships no Isaac Sim)
The npa-isaac-lab image contains no NVIDIA Isaac Sim, Isaac Lab, Omniverse
Client, or other proprietary NVIDIA runtime code. It used to bake Omniverse
Kit, which made it non-redistributable; the exact runtime wheel set is now
downloaded on first use of /isaac-sim/python.sh from
https://pypi.nvidia.com, hash-verified, and installed into a cache volume
under the operator's own EULA acceptance. Full rationale:
docs/workbench/container-packaging.md and skills/atomic/solution-licensing/SKILL.md.
What this changes in practice:
- Unset acceptance succeeds; explicit opt-out refuses. NPA defaults
ACCEPT_EULA=Y. Empty,N,NO,0,FALSE, or--no-accept-eulaexit 78 before download.Y,YES,1, andTRUEare accepted case-insensitively; other values are invalid. The launcher derivesOMNI_KIT_ACCEPT_EULA=YESinternally; do not expose duplicate user plumbing. KeepPRIVACY_CONSENTand telemetry off. - Reach Isaac through
/isaac-sim/python.sh(the value ofISAAC_LAB_PYTHON). That is the bootstrap shim, and it is what every SkyPilot template, the sim2real engine and the workbench CLI already use. A barepython3is the system interpreter and will not find Isaac. - Never invoke the shim from a Dockerfile
RUN. It would download and bake the multi-gigabyte Isaac runtime into a layer. Build-time work uses the image's own venv python. - Budget the first start. Use the generation-specific measurements in
docs/workbench/isaac-lab-3.md; do not reuse generation 2 cache numbers for generation 3. Pre-warm a shared volume once per node/PVC withnpa/docker/workbench/common/warm-isaac-cache.yaml, then run workload pods withNPA_ISAAC_CACHE_READONLY=1. Otherwise every pod pays the cold fetch. isaac-bootstrap statusreports what is cached without needing acceptance or network;isaac-bootstrap verifyadditionally launches Isaac Sim headless (needs a GPU).- No NGC credentials are needed to build or run this image. Native
--runtime vminstallation is intentionally unsupported for generation 3; managed and BYOVM deployments use the payload-clean container contract.
Interfaces
API:
POST /trainPOST /evalGET /statusGET /system-infoGET /list
CLI:
npa workbench isaac-lab deploy
npa workbench isaac-lab train
npa workbench isaac-lab eval
npa workbench isaac-lab status
npa workbench isaac-lab system-info
npa workbench isaac-lab list
Standalone checkpoint eval
npa workbench isaac-lab eval runs the supplied RSL-RL policy headlessly; it
does not invoke a VLM. Checkpoint loading is fail-closed: a load error produces
a structured failure artifact and a non-zero command result, never a
random-action substitute.
Choose the success predicate to match the task:
--success-metric survivalfor locomotion, with termination as failure;--success-metric goal-distance --success-distance-m <metres>for manipulation or reach tasks;--success-metric autoto prefer a simulator-native success signal, then a measurable goal distance, and otherwise survival.
Use --seed, --num-episodes, --max-steps-per-episode, and
--min-success-rate for a repeatable held-out evaluation. The output is
npa_isaac_lab_eval_summary.json with format npa.isaac_lab.eval.v1; it
records checkpoint provenance, policy_loaded, per-episode metrics,
success_rate, and passed. An S3 output prefix is uploaded on both runtime
success and failure so failed evaluations remain diagnosable. passed=false
does not turn a completed rollout into a runtime error; automation should gate
on passed (the Sim2Real workflow does this in Stage 11). With
--output-format json, eval_status, policy_loaded, success_rate, and
passed are top-level structured CLI fields; callers do not need to scrape
the remote log tail.
Trained-policy visual export
npa workbench isaac-lab train --export-trajectories captures genuine Isaac
Sim RGB by default during the post-training policy rollout. The exporter must
load the trained RSL-RL checkpoint fail-closed, launch Isaac with cameras
enabled, call the environment's rgb_array renderer, and write one rgb.npy
array per episode with exactly the same frame count as state.npy and
actions.npy. It records runtime version, checkpoint hash, renderer, image
dimensions/count, policy_loaded, and the shared
episode/frame/timestamp timeline in trajectories/meta.json.
The Isaac-to-LeRobot adapter automatically encodes these frames as the
observation.images.workspace video feature and preserves their provenance.
The LeRobot-to-Rerun adapter maps each episode to its own video asset and
VideoFrameReference timeline, makes the trained-policy environment the
prominent view, and omits evaluation panes when no evaluation entities exist.
Metadata-only rollouts remain valid but must not be described as containing an
environment visual. --no-export-rgb is the explicit scalar-only opt-out.
Custom Forks
Canonical onboarding starts at docs/workbench/getting-started.md; do not
duplicate credential, S3, Kubernetes, registry, or SkyPilot bootstrap setup here.
Customers can bring their own Isaac Lab fork through an image_id override in the SkyPilot YAML. The workbench provides a validated base container; the customer layers their fork on top.
The replacement image must preserve the expected Isaac Lab entry point or runner contract.
Cookbook: docs/workbench/cookbooks/byof-isaac-lab/README.md.
Validated BYOF surfaces:
- image override through
npa/scripts/run_isaac_lab_rl.py --image(w10-byof-image-only-20260520T232650Z); - command override through a SkyPilot YAML
run:block variant passed with--yaml, invoking/opt/byof/custom_train.py(w10-byof-image-and-cmd-20260520T233113Z).
The runner exposes --image directly. It does not expose a --run-cmd flag, so
custom entrypoints should use a customer-owned YAML variant that preserves the
runtime contract, checkpoint discovery, manifest creation, and S3 upload block.
Sim2Real Held-Out Backend
Isaac Lab is also the default sim engine for the Sim2Real loop's non-VLM held-out rollout eval. The held-out eval is backend-pluggable:
sim_backend=isaac(default): the held-out rollout runs headless Isaac Sim inside the Isaac Lab image as the eval component Job. It uses the Isaac Lab manipulation task (Isaac-Lift-Cube-Franka-v0by default) for a Franka pick/lift rollout.sim_backend=genesis: the existing GenesisFrankaPickPlaceEnvpath, kept fully intact.
Select with --sim-backend, env NPA_SIM2REAL_SIM_BACKEND, or the runbook
YAML. Both backends emit the identical npa.sim2real.heldout_eval.v1 per-env
schema (env_id/score/success/details), so report.json and the
outer-loop gate are backend-agnostic. The VLM eval (Cosmos-Reason) is unchanged.
When Stage 10 has a genuine Isaac trainer checkpoint, object storage, and a
registry-qualified Isaac image, it selects byo_isaac_eval. That vectorized
adapter uses the standalone evaluator's shared load_rsl_rl_policy, metric,
npa.isaac_lab.eval.v1, and failure-summary implementation while retaining
generated-environment IDs/seeds and held-out camera capture. It writes
eval/heldout/isaac-eval-summary.json and nests the same evidence in
eval/heldout/report.json. Runtime, checkpoint, or policy-load failure aborts
Stage 10; passed=false means the eval completed below its quality bar and is
handled by the Stage 11 threshold gate. Stage 14 remains responsible for the
run-level RRD/MCAP visualization artifacts.
Asset handling mirrors the Genesis no-fallback provenance discipline:
- Stock: the built-in Isaac lift-cube manipuland, recorded as
asset_source=isaac_stock(no sha256). - BYO mesh: a customer mesh/URDF imported to USD via Isaac Lab's offline
converters (
isaaclab.sim.converters.MeshConverter/UrdfConverter), recorded asasset_source=byo_meshwith a sha256. A mesh that fails to import or load raises; there is no silent fallback to the stock asset.
The Isaac Lab image bakes no npa code, and Isaac Sim is only importable via
its bundled interpreter /isaac-sim/python.sh. The eval component injects
branch npa code into that interpreter at start from an S3 source tarball
(NPA_SIM2REAL_SOURCE_TARBALL_URI) or, when the repo is reachable, a git clone
(NPA_SOURCE_REPO/NPA_SOURCE_REF), and ensures boto3 for the S3 client.
Architecture + licensing rationale: docs/architecture/sim-backend-selection.md.
Operational Safety
Managed VM deploy defaults to in-place updates for existing aliases. Terraform
plans that would destroy or replace critical infrastructure are blocked unless
the operator passes --replace and confirms with --yes for automation.
Workflows
- Single RL job:
npa/src/npa/workflows/byof/profiles/isaac-lab-rl-train.yaml. - Parameter sweep:
workflows/testing/isaac-lab-rl-sweep.yaml. - Runner:
npa/scripts/run_isaac_lab_rl.py.
E2E is pending the training command fix tracked by W9-isaac-lab-e2e-fix.
Signals
- GitHub stars
- 28
- Forks
- 15
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
isaac-lab- Source
- github.com/nebius/nebius-physical-ai