Skip to content

Pulling v0.3.0 up to Isaac Sim 6.1 - #1194

Open
alexmillane wants to merge 10 commits into
release/0.3.0from
alex/fix/lab_3_beta2_isaac_sim_61_compatibility
Open

Pulling v0.3.0 up to Isaac Sim 6.1#1194
alexmillane wants to merge 10 commits into
release/0.3.0from
alex/fix/lab_3_beta2_isaac_sim_61_compatibility

Conversation

@alexmillane

@alexmillane alexmillane commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Pull Arena v0.3.0 up to Isaac Sim 6.1

Detailed description

  • Addresses the rendering after reset issue. Allowing us to remove the run-on-cpu workaround.
  • Uses the released nvcr.io/nvidia/isaac-sim:6.1.0 base image and the public isaacsim==6.1.0.0 wheel, so both the Docker and native uv installs run the same Isaac Sim.
  • Bumps the Isaac Lab submodule to the 6.1 compatibility branch, which declares newton[sim]==1.5.0 to match the copy Isaac Sim prebundles; asking for the importers extra made pip replace it and strand the symlinks other extensions share, which broke the image build.
  • Pins usd-core for the native uv install, which lost its only OpenUSD provider once Newton 1.5 stopped depending on it.
  • Runs the tests that leave state on the shared SimulationApp in their own Kit process, fixing five unrelated tests that only failed when they ran after them.

Video

After the upgrade 6.1 we can run a multi-environment experiment without parts of the robot disappearing.

robolab_10_tasks_pi0_3cam_5x.mp4

@greptile-apps

greptile-apps Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates Arena to the Isaac Sim 6.1 stack, advances the Isaac Lab submodule, consolidates Isaac Lab dependency installation, enables GPU+Fabric stage-rebuild coverage, and pins OSMO experiments to the v0.3.0 Sim 6.1 image.

  • The production CPU/Fabric workaround remains active despite the newly enabled regression coverage.
  • The changed OSMO image default leaves a hard-coded workflow test stale.
  • The default Docker build now depends on an internal base image without a documented developer authentication path.
  • Render comparison PNG generation has unintentionally become always-on.

Confidence Score: 2/5

The PR is not safe to merge until the stale workflow test, inaccessible default build image, and retained production CPU/Fabric workaround are addressed.

The image-default change deterministically contradicts an existing test, the Docker quickstart now defaults to an acknowledged internal image without an authentication path, and multi-build production experiments still get forced onto CPU despite the PR enabling the fixed GPU+Fabric path.

Files Needing Attention: docker/Dockerfile.isaaclab_arena, osmo/tasks/experiment_runner_task.py, isaaclab_arena/tests/test_render_after_stage_rebuild.py, isaaclab_arena/evaluation/run_execution.py

Important Files Changed

Filename Overview
docker/Dockerfile.isaaclab_arena Moves the build to an internal Sim 6.1 base and delegates Isaac Lab package installation to the submodule installer; the default developer build now requires undocumented internal-image access.
isaaclab_arena/tests/test_render_after_stage_rebuild.py Enables the GPU+Fabric regression test but also enables persistent debug-image output for routine runs.
isaaclab_arena/tests/utils/persistent_simulation_app.py Restores configured Fabric behavior by default for persistent test-app callers.
osmo/tasks/experiment_runner_task.py Pins OSMO execution to the Sim 6.1 release image but leaves an existing hard-coded default-image test failing.
submodules/IsaacLab Advances Isaac Lab to the Sim 6.1-compatible revision, whose installer is now responsible for centralized dependencies.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Base[Internal Isaac Sim 6.1 image] --> Docker[Arena container build]
  Lab[Isaac Lab 8911377f] --> Docker
  Docker --> Tag[v0.3.0_isaac_sim_6.1]
  Tag --> OSMO[OSMO experiment task]
  OSMO --> Runner[Experiment runner]
  Runner --> Workaround{More than one build?}
  Workaround -->|Yes| CPU[Force CPU and disable Fabric]
  Workaround -->|No| Configured[Use configured device and Fabric]
  Tests[Stage-rebuild regression] --> Fabric[GPU plus Fabric path]
Loading

Reviews (1): Last reviewed commit: "Fix rendering issues by pulling up to Is..." | Re-trigger Greptile

EXPERIMENT_RUNNER_SCRIPT = "isaaclab_arena/evaluation/experiment_runner.py"
# Default container image containing Arena and its runtime dependencies.
DEFAULT_EXPERIMENT_RUNNER_IMAGE = "nvcr.io/nvstaging/isaac-amr/isaaclab_arena:latest"
DEFAULT_EXPERIMENT_RUNNER_IMAGE = "nvcr.io/nvstaging/isaac-amr/isaaclab_arena:v0.3.0_isaac_sim_6.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Default Breaks Workflow Test

The new default image uses :v0.3.0_isaac_sim_6.1, but test_explicit_experiment_composes_typed_defaults still requires :latest. Constructing ExperimentRunnerTaskCfg() now contradicts that hard-coded assertion, so the workflow test suite fails.

Comment thread docker/Dockerfile.isaaclab_arena Outdated
Comment on lines +1 to +2
# TODO (peterd): Change this to the public Sim 6.1 image once it's released
ARG BASE_IMAGE=nvcr.io/0947644777160149/internal/isaac-sim:latest-release-6-1

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Default Image Requires Internal Access

The Dockerfile now defaults to an explicitly internal Isaac Sim image. The documented developer build runs docker build --pull without authenticating to NGC or explaining how to obtain access, so developers without credentials for this namespace cannot build the repository's default container.

Comment on lines 163 to 164
@pytest.mark.with_cameras
def test_render_after_stage_rebuild_with_fabric():

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 CPU Workaround Remains Active

Unskipping the GPU+Fabric rebuild test indicates that the Sim 6.1 update resolves the rendering defect, but production still calls disable_fabric_for_runs. Any experiment with more than one build—including the shipped five-rebuild DROID experiment—is therefore still forced onto CPU with Fabric disabled, retaining the performance penalty this update is intended to remove.

Knowledge Base Used: Force CPU rendering after stage rebuilds

MIN_IMAGE_STD = 1.0
# Set True to dump the compared renders as PNGs into IMAGE_OUTPUT_DIR, which is created on demand.
SAVE_IMAGES = False
SAVE_IMAGES = True

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Debug Images Always Persist

SAVE_IMAGES is documented as an opt-in debugging switch, but enabling it globally makes routine executions of both camera tests encode and write before, after, and difference PNGs for every camera. This adds unnecessary disk I/O and leaves persistent debug artifacts during normal local and CI runs.

Suggested change
SAVE_IMAGES = True
SAVE_IMAGES = False

Knowledge Base Used: Force CPU rendering after stage rebuilds

Comment thread submodules/IsaacLab Outdated
@@ -1 +1 @@
Subproject commit af1bab4dc173ba69b08fab779c14ead61d13fd33
Subproject commit 8911377fb8d63fc185a4a11bd53749739d587041

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Submodule points at a commit that lives on no branch

8911377 ("Update Kellys branch to get Arena tests passing") isn't the head of any branch in isaac-sim/IsaacLab, and it isn't on IsaacLab#7546's branch either — that branch is now 16 commits further along. The old pin af1bab4 was a plain ancestor of release/3.0.0-beta2.

An unreferenced commit is GC-eligible and won't survive #7546 being squash-merged, at which point git submodule update --init breaks for every clone and every image build. Could we wait for #7546 to land on release/3.0.0-beta2 and pin to a commit on that branch instead?

Comment thread docker/Dockerfile.isaaclab_arena Outdated
@@ -1,4 +1,5 @@
ARG BASE_IMAGE=nvcr.io/nvidia/isaac-sim:6.0.1
# TODO (peterd): Change this to the public Sim 6.1 image once it's released
ARG BASE_IMAGE=nvcr.io/0947644777160149/internal/isaac-sim:latest-release-6-1

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Base image isn't reachable or reproducible

Two things beyond the TODO: nvcr.io/0947644777160149/internal/... is an internal org, so anyone outside NVIDIA can no longer build this container at all; and latest-release-6-1 is a moving tag, so two builds weeks apart can silently pick up different Sim versions.

Is the plan to land this before the public 6.1 image exists, or wait for it? Either way, could we pin a fixed 6.1.x tag or a digest rather than a floating one?

MIN_IMAGE_STD = 1.0
# Set True to dump the compared renders as PNGs into IMAGE_OUTPUT_DIR, which is created on demand.
SAVE_IMAGES = False
SAVE_IMAGES = True

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Debug flag left switched on

This looks like it was flipped while chasing the bug — it makes every with_cameras run pull in PIL and write three PNGs per camera. Back to False?

Suggested change
SAVE_IMAGES = True
SAVE_IMAGES = False

@pytest.mark.skip(reason="[lab-render-after-rebuild-bug] Rebuilds render incorrectly under GPU+Fabric.")
@pytest.mark.with_cameras
def test_render_after_stage_rebuild_with_fabric():
"""Rebuilds should also render correctly with Fabric on, which is the default outside this bug."""

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Comments still describe the bug as live

"which is the default outside this bug" here, and "Opt out of the suite-wide override" on line 170, are both stale now — force_disable_fabric defaults to False, so there's no suite-wide override left to opt out of. Worth rewording both, or dropping them along with the workaround itself.

headless: bool = True,
enable_cameras: bool = False,
force_disable_fabric: bool = True,
force_disable_fabric: bool = False,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Can the whole Fabric workaround go now?

The TODO on _fabric_disabled_for_env_builds says to remove it once the render-after-rebuild bug is fixed in Lab, and this PR is that fix. The only caller still passing True is test_render_after_stage_rebuild_without_fabric, which already gets Fabric off through --disable_fabric in its own CLI args — so the monkeypatch looks redundant there too.

Could the context manager and the force_disable_fabric parameter both be deleted, leaving just the per-test --disable_fabric flag?

EXPERIMENT_RUNNER_SCRIPT = "isaaclab_arena/evaluation/experiment_runner.py"
# Default container image containing Arena and its runtime dependencies.
DEFAULT_EXPERIMENT_RUNNER_IMAGE = "nvcr.io/nvstaging/isaac-amr/isaaclab_arena:latest"
DEFAULT_EXPERIMENT_RUNNER_IMAGE = "nvcr.io/nvstaging/isaac-amr/isaaclab_arena:v0.3.0_isaac_sim_6.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Default OSMO image is now frozen

This swaps a tracking :latest for a fixed v0.3.0_isaac_sim_6.1 tag, so OSMO runs off main stop picking up newly built containers. Is that meant to stick, or is it a transition pin to revert once :latest is rebuilt on 6.1? A short TODO next to it would make the intent clear either way.

@arena-review-bot

Copy link
Copy Markdown
Contributor

🤖 Isaac Lab-Arena Review Bot

Summary

Bumps Arena to Isaac Sim 6.1, bumps the Isaac Lab submodule, and un-skips the Fabric variant of the render-after-rebuild test. The Dockerfile cleanup is the strongest part of the change — I checked the new submodule pin and isaaclab.sh -i genuinely does install isaaclab_newton[all], the visualizers, and daqp==0.8.5 now, so all four removed RUN steps really are obsolete. The main concerns are the submodule pin itself and some workaround code the PR description says is going away but that is still in the tree.

Findings

🟡 Warning: isaaclab_arena/evaluation/run_execution.py:38 (not in the diff) — The PR description says this "allow[s] us to remove the run-on-cpu workaround", but disable_fabric_for_runs() is untouched and still called unconditionally from execute_experiment() at line 84. Any experiment with more than one build still gets disable_fabric = True and device = "cpu" forced onto every run, so the speedup this PR exists to unlock is not actually delivered. It also leaves the tree in an odd state: the test suite now asserts the bug is fixed while production still works around it. Was removing this meant to be part of this PR, or is it a follow-up?

🔵 Improvement: docs/pages/arena_in_your_repo/external_installation.rst:44,52 — The external-integration docs still tell users to base on nvcr.io/nvidia/isaac-sim:6.0.0. Once Arena needs 6.1, anyone following these instructions gets a container that will not work. Worth bumping in the same PR.

The remaining findings are inline: the submodule pin (🔴), the base image (🟡), SAVE_IMAGES = True (🟡), the now-dead force_disable_fabric machinery (🟡), the frozen OSMO image tag (🟡), and a couple of stale comments (🔵).

Test Coverage

Un-skipping test_render_after_stage_rebuild_with_fabric is the right regression coverage for this fix, and both variants keep the with_cameras marker so they stay in phase 2. Flipping force_disable_fabric to default False widens what the persistent-app tests exercise, which is the point — worth confirming the full phase-2 run is green on the new submodule before merging, since every camera test now builds with Fabric on for the first time.

Verdict

Minor fixes needed — the submodule pin should be re-pointed at a commit on an upstream branch before this merges, and it is worth settling whether disable_fabric_for_runs goes in this PR or a follow-up.

- Point the Docker base image at the released nvcr.io/nvidia/isaac-sim:6.1.0
  instead of the internal 6.1 release image.
- Pin isaacsim[all,extscache]==6.1.0.0 in the isaaclab-from-source group rather
  than taking Isaac Lab's isaacsim extra, which still pins 6.0.1.0 on the 6.1
  branch. Scoping the pin to that group leaves the wheel flavor on 6.0.
- Relax the mujoco-usd-converter constraint to a floor: isaacsim-core pins it
  exactly, and the two install flavors need different versions (0.2.0 / 0.5.0).
- Restore SAVE_IMAGES=False in test_render_after_stage_rebuild.py.

Signed-off-by: alex <amillane@nvidia.com>
@alexmillane
alexmillane force-pushed the alex/fix/lab_3_beta2_isaac_sim_61_compatibility branch from 8c7a297 to b07e859 Compare September 10, 2026 06:48
@alexmillane
alexmillane changed the base branch from main to release/0.3.0 September 10, 2026 06:48
- test_explicit_experiment_composes_typed_defaults still expected
  isaaclab_arena:latest, while this branch's DEFAULT_EXPERIMENT_RUNNER_IMAGE
  now points at v0.3.0_isaac_sim_6.1.
- Refresh the websockets override comment: isaacsim-kernel 6.1 declares
  >=12.0,<15, not ==12.0.

Signed-off-by: alex <amillane@nvidia.com>
- Newton dropped its usd-core dependency in 1.5.0, so the 6.1 resolution left
  the uv install with only the empty pxr namespace directory shipped by the
  schema packages, breaking Kit-less `from pxr import Gf` in subprocess tests.
- Pins usd-core>=25.11,<26.0 in the isaaclab-from-source group, matching the
  USD version Isaac Sim 6.1 builds against. Docker is unaffected: it resolves
  pxr from the Isaac Sim prebundle.

Signed-off-by: alex <amillane@nvidia.com>
- Moves the gitlink from 8911377fb8 to 206e452cc1, the current tip of
  kellyguo11/IsaacLab-public codex/beta2-isaacsim61-compat.
- Drops the local "Update Kellys branch to get Arena tests passing" commit:
  every hunk is superseded upstream. ModelFlags now resolves through the
  isaaclab_newton._newton_compat shim, the joint target attributes have
  hasattr fallbacks, and the exact newton/warp/aiohttp pins became ranges
  with newton[importers] supplying newton-usd-schemas.

Signed-off-by: alex <amillane@nvidia.com>
- The submodule bump changed Isaac Lab's declared dependencies (newton gained
  the importers extra, warp-lang and aiohttp became ranges), so `uv lock
  --check` failed in CI and skipped every step after it.
- Re-locks against the new tip: the source flavor keeps Isaac Sim 6.1.0.0 with
  newton 1.5.0 and warp-lang 1.16.0, and picks up the newton importers
  packages (open3d, meshio, alphashape, ...).

Signed-off-by: alex <amillane@nvidia.com>
- Points the submodule at 771ef0da80, which declares newton[sim]==1.5.0 to
  match the copy Isaac Sim prebundles instead of newton[importers,sim]. The
  extra made pip reinstall Newton over the prebundle and strand the symlinks
  other Isaac Sim extensions share into it, so `isaaclab.sh -i` aborted and the
  Arena image could not be built on Isaac Sim 6.1.
- Re-locks: the packages the importers extra supplied now come from isaaclab
  itself, so the resolution keeps open3d, meshio, alphashape and friends with
  newton 1.5.0 and warp-lang 1.16.0 unchanged.

Signed-off-by: alex <amillane@nvidia.com>
- Isaac Sim 6.1 renders correctly after a stage rebuild, so experiments no
  longer need disable_fabric_for_runs, which forced Fabric off and the CPU
  device on every run whenever a process would build the environment more than
  once. Multi-run experiments run on GPU with Fabric again.
- Drops the matching note in the test helper. Its force_disable_fabric switch
  stays: test_render_after_stage_rebuild uses it to cover the with- and
  without-Fabric paths deliberately.

Signed-off-by: alex <amillane@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant