Skip to content

Merges updates from main#5436

Merged
kellyguo11 merged 8 commits into
isaac-sim:developfrom
kellyguo11:merge-from-main-04282026
Apr 30, 2026
Merged

Merges updates from main#5436
kellyguo11 merged 8 commits into
isaac-sim:developfrom
kellyguo11:merge-from-main-04282026

Conversation

@kellyguo11

Copy link
Copy Markdown
Contributor

Description

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (existing functionality will not work without user modification)
  • Documentation update

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

nv-caelan and others added 8 commits March 7, 2026 20:23
…ck orders (isaac-sim#4875)

# Description

This PR adds 4 new Isaac-Stack-Cube-Franka-IK-Rel-v0 task variants
corresponding to stacking [Red, Green], [Red, Green, Blue], [Blue,
Green], and [Blue, Green, Red]. The objective is to create a test bed
for different success conditions in the same scene.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
Just a few docstring changes for consistency. Low priority and low risk.

## Type of change

- Documentation update

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
# Description

Updates Newton docs on main for 3.0 beta changes


## Type of change

- Documentation update


## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
## Description

Relaxes the `flatdict` version pin from `==4.0.0` to `>=4.0.0` in
`source/isaaclab/setup.py`.

## Motivation

`flatdict==4.0.0` (and 4.0.1) are source distributions (`.tar.gz`) that
require `pkg_resources` during the build step. On modern Python (3.10+)
with newer pip/setuptools, the build isolation environment often lacks
`pkg_resources`, causing installation to fail with:

```
ModuleNotFoundError: No module named 'pkg_resources'
ERROR: Failed to build 'flatdict' when getting requirements to build wheel
```

`flatdict 4.1.0` ships as a pre-built wheel (`.whl`) and installs
cleanly without any build step.

## Changes

- `source/isaaclab/setup.py`: Changed `flatdict==4.0.0` →
`flatdict>=4.0.0`

## Verification

The `FlatDict` API used in isaaclab (`FlatDict(dict, delimiter='.')` in
`simulation_context.py` and `test_simulation_render_config.py`) is fully
compatible across 4.0.0 → 4.1.0. Tested both the constructor and nested
dict flattening.

Fixes isaac-sim#4576

---------

Signed-off-by: Antoine RICHARD <antoiner@nvidia.com>
Co-authored-by: Kelly Guo <kellyguo11@users.noreply.github.com>
Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
…m#5195)

## Description

Adds a troubleshooting note to the multi-GPU training docs for Linux
systems
where distributed training may fail with `CUDA error: an illegal memory
access was encountered`
reported by `ProcessGroupNCCL`.

This PR is documentation-only. It does not change the default
distributed training behavior
in IsaacLab or `rsl_rl`. The note documents NCCL environment-variable
workarounds that were
observed to restore stability on some affected systems:

- `NCCL_SHM_DISABLE=1`
- `NCCL_IB_DISABLE=1`
- `NCCL_ALGO=Ring`

The motivation for this change is to provide an official troubleshooting
path for users who
hit NCCL transport/algo issues on specific Linux multi-GPU setups. In
our local reproduction,
the failure was not caused by IsaacLab task logic itself, but occurred
in the distributed
training stack when using NCCL with humanoid locomotion workloads.

Dependencies: none.

Refs isaac-sim#4011
Refs isaac-sim#2756

## Type of change

- Documentation update

## Screenshots

N/A

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Context

Local reproduction environment:
- Ubuntu 22.04.5
- RTX 5090 x2
- Isaac Sim / IsaacLab multi-GPU training
- official distributed minimal reproduction with
`Isaac-Velocity-Flat-G1-v0`

Observed behavior:
- the default distributed launch failed with NCCL illegal memory access
- `NCCL_SHM_DISABLE=1` was sufficient to make the official dual-GPU
minimal reproduction pass
- `NCCL_SHM_DISABLE=1 NCCL_IB_DISABLE=1 NCCL_ALGO=Ring` also restored
stability in a longer validation run

This PR documents those workarounds without changing defaults, since the
NCCL transport/algo
selection is handled below the IsaacLab task layer.

---------

Signed-off-by: bxwang <bixiong.wang@x-humanoid.com>
Signed-off-by: bixiong wang <wangbx02@126.com>
Co-authored-by: bxwang <bixiong.wang@x-humanoid.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
# Description

Updates the doc building job to match the new logic from develop branch.
Eliminates some older versions of docs to be built and hopefully
resolves other doc building issues we are seeing in PRs.

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)
- Documentation update


## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->

---------

Co-authored-by: OpenClaw <openclaw@users.noreply.github.com>
# Description

Updates the integration of skrl for the version 2.0.0.
This also solves isaac-sim#5300.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->

---------

Signed-off-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team labels Apr 29, 2026

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 Isaac Lab Review Bot

Summary

This PR merges updates from main to develop, specifically integrating skrl 2.0.0 support from PR #5311. The changes update the skrl wrapper API, training/play scripts, configuration files, and dependency version requirements to be compatible with skrl 2.0.0's breaking API changes. The changes appear mechanically correct and follow skrl 2.0.0's migration patterns.

Architecture Impact

  • SkrlVecEnvWrapper (isaaclab_rl/skrl.py): Now supports "warp" as a new ML framework option alongside "torch" and "jax". This wrapper is called by all skrl training/play scripts.
  • Training/Play Scripts (scripts/reinforcement_learning/skrl/): Updated to use skrl 2.0 API (enable_training_mode() instead of set_running_mode(), agent.act() now requires states parameter).
  • Agent Config Files (multiple YAML files): Renamed config keys to match skrl 2.0 schema changes (e.g., state_preprocessorobservation_preprocessor for agents, amp_state_preprocessoramp_observation_preprocessor).
  • Downstream Impact: All users training with skrl must upgrade to >=2.0.0 (breaking change for existing installations).

Implementation Verdict

Minor fixes needed — One bug fix required, rest is correct.

Test Coverage

The PR description notes "Tests that prove my fix is effective" is unchecked. Given this is an integration update for a third-party library, integration tests via CI (running training scripts) would be the appropriate validation. No new unit tests are added, which is acceptable for config/wrapper updates, but the lack of CI status makes it impossible to verify the changes work end-to-end.

CI Status

No CI checks available yet — this is concerning for a breaking dependency update.

Findings

🔴 Critical: source/isaaclab_rl/isaaclab_rl/skrl.py:96 — Missing raise statement was correctly added, but validates wrong value

The fix correctly adds raise before ValueError, but there's a subtle issue. Looking at the full context:

elif ml_framework.startswith("warp"):
    from skrl.envs.wrappers.warp import wrap_env
else:
    raise ValueError(
        f"Invalid ML framework for skrl: {ml_framework}. Available options are: 'torch', 'jax', 'warp'"
    )

This is actually correct now. The original code had ValueError(...) without raise (line 96-97 in the diff shows the fix). This is a genuine bug fix.

🟡 Warning: scripts/reinforcement_learning/skrl/play.py:195-196 — State initialization before reset may cause issues on first iteration

obs, _ = env.reset()
states = env.state()

The env.state() call happens after reset, which is correct. However, if env.state() returns None for single-agent environments (which is valid per gymnasium semantics), the subsequent runner.agent.act(obs, states, ...) call at line 206 may fail depending on skrl's internal handling. Verify that skrl 2.0.0 handles None states gracefully for single-agent envs.

🟡 Warning: source/isaaclab_tasks/isaaclab_tasks/direct/cart_double_pendulum/agents/skrl_mappo_cfg.yaml:31 — Value network input changed to STATES

value:
    network:
      - name: net
        input: STATES  # Changed from OBSERVATIONS

This is semantically correct for MAPPO (centralized critic should use global state), but represents a behavioral change from the previous config. The same change in skrl_ippo_cfg.yaml was NOT made (value still uses OBSERVATIONS), which is correct for IPPO. Verify this asymmetry is intentional.

🟡 Warning: source/isaaclab_tasks/isaaclab_tasks/direct/humanoid_amp/agents/skrl_*_amp_cfg.yaml — Reward scaling semantics may have changed

# Old:
task_reward_weight: 0.0
style_reward_weight: 1.0
discriminator_reward_scale: 2.0

# New:
task_reward_scale: 0.0
style_reward_scale: 2.0
# discriminator_reward_scale removed

The style_reward_scale changed from 1.0 to 2.0, and discriminator_reward_scale was removed. This could be intentional (skrl 2.0 may have changed how these combine), but it's a functional change to training behavior that should be validated.

🔵 Improvement: source/isaaclab_rl/setup.py:43 — Consider documenting breaking change

The version bump from skrl>=1.4.3 to skrl>=2.0.0 is a breaking change for existing users. Consider adding a migration note to the CHANGELOG or documentation explaining that users need to update their skrl configs if they have custom ones.

🔵 Improvement: scripts/reinforcement_learning/skrl/train.py:68 and play.py:65 — Removed "jax-numpy" choice

The jax-numpy option was removed from the --ml_framework choices. If users were relying on this, they'll get an unclear argparse error. The skrl 2.0 migration may have changed how JAX backends work — verify this removal is intentional.

🔵 Improvement: docs/source/tutorials/00_sim/spawn_prims.rst:191 — Unrelated doc fix

The USD documentation URL fix (/docs//release/) is correct and unrelated to skrl. This is fine to include but could have been a separate PR for cleaner history.

Claude: I'll review this PR thoroughly, analyzing the skrl 2.0.0 integration changes.

🤖 Isaac Lab Review Bot

Summary

This PR merges skrl 2.0.0 integration updates from main to develop. The changes update the skrl wrapper, training/play scripts, YAML configuration files, and version requirements to match skrl 2.0.0's breaking API changes. The implementation correctly follows skrl 2.0.0's migration patterns, with one critical bug fix (adding missing raise statement) and proper API updates throughout.

Architecture Impact

  • SkrlVecEnvWrapper (isaaclab_rl/skrl.py): Updated type hints and added "warp" ML framework support. All skrl training/play scripts depend on this wrapper.
  • Training/Play Scripts: Updated to use skrl 2.0 APIs (enable_training_mode() replaces set_running_mode(), agent.act() signature changed to require states parameter).
  • Agent Config Files: Multiple YAML files updated with renamed configuration keys per skrl 2.0 schema.
  • Breaking Change: All downstream users must upgrade skrl to >=2.0.0.

Implementation Verdict

Ship it — Changes are correct and consistent with skrl 2.0.0 migration requirements.

Test Coverage

PR checklist indicates tests were not added. For a third-party library integration update, end-to-end validation via CI is the appropriate testing strategy. Config file changes are validated by successful training runs rather than unit tests.

CI Status

No CI checks available yet — validation of the integration depends on CI completion.

Findings

🔴 Critical (Fixed): source/isaaclab_rl/isaaclab_rl/skrl.py:97 — Bug fix correctly adds missing raise

The original code had a silent failure:

# Before (broken):
ValueError(f"Invalid ML framework...")  # Created but never raised!

# After (fixed):
raise ValueError(f"Invalid ML framework...")

This was a latent bug where invalid ml_framework values would silently pass through. The fix is correct. ✅

🟡 Warning: scripts/reinforcement_learning/skrl/play.py:206-211 — State handling for single-agent envs

outputs = runner.agent.act(obs, states, timestep=0, timesteps=0)

The states = env.state() call at line 196 returns None for single-agent environments per gymnasium semantics. Verify skrl 2.0.0 handles None states gracefully in agent.act(). If not, this will cause runtime failures for single-agent play.

🟡 Warning: source/isaaclab_tasks/.../skrl_*_amp_cfg.yaml:93-94 — Reward scale values changed

# skrl_dance_amp_cfg.yaml, skrl_run_amp_cfg.yaml, skrl_walk_amp_cfg.yaml
# Old values (implicit from removal):
task_reward_weight: 0.0
style_reward_weight: 1.0
discriminator_reward_scale: 2.0

# New values:
task_reward_scale: 0.0
style_reward_scale: 2.0  # Changed from 1.0
# discriminator_reward_scale: removed

The style_reward_scale doubled from 1.0→2.0 and discriminator_reward_scale was removed. This is a behavioral change — confirm this matches skrl 2.0's expected semantics where the discriminator scale may now be folded into style_reward_scale.

🟡 Warning: source/isaaclab_tasks/.../skrl_mappo_cfg.yaml:31 — MAPPO value network input differs from IPPO

In MAPPO configs, the value network input changed:

value:
  network:
    - name: net
      input: STATES  # Changed from OBSERVATIONS

This is semantically correct for MAPPO (centralized critic uses global state), while IPPO configs correctly retain OBSERVATIONS. The asymmetry is intentional and correct.

🔵 Improvement: scripts/reinforcement_learning/skrl/train.py:68 — "jax-numpy" choice removed without migration note

choices=["torch", "jax"],  # Was: ["torch", "jax", "jax-numpy"]

Users with scripts specifying --ml_framework jax-numpy will get argparse errors. Consider documenting this removal in the CHANGELOG.

🔵 Improvement: docs/source/tutorials/00_sim/spawn_prims.rst:191 — Unrelated documentation fix

The USD docs URL update (/docs//release/) is correct but tangential to the skrl integration. Clean commit history would separate this.

@greptile-apps

greptile-apps Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates the skrl integration from version 1.4.3 to 2.0.0, adapting the environment wrapper, play/train scripts, and agent configuration YAMLs to the new API (renamed preprocessor keys, updated act() signature to accept states, enable_training_mode replacing set_running_mode, and a new \"warp\" ML framework option).

  • The new \"warp\" ML framework is supported in SkrlVecEnvWrapper but is absent from the --ml_framework argparse choices in both play.py and train.py, making it unreachable from the CLI.

Confidence Score: 3/5

Safe to merge for torch/jax users, but the new "warp" framework is silently inaccessible via the CLI scripts.

Two P1 findings: "warp" is added to SkrlVecEnvWrapper but blocked at the argparse layer in both play.py and train.py, meaning the feature is broken for CLI users. The torch and jax paths remain functional. Multiple P1s push the score below the P1 ceiling of 4.

scripts/reinforcement_learning/skrl/play.py and scripts/reinforcement_learning/skrl/train.py — both need "warp" added to the --ml_framework choices list.

Important Files Changed

Filename Overview
source/isaaclab_rl/isaaclab_rl/skrl.py Adds "warp" framework support and fixes a pre-existing silent bug where ValueError was constructed but never raised; docstring not updated.
scripts/reinforcement_learning/skrl/play.py Updates to skrl 2.0.0 API (enable_training_mode, states parameter in act); "warp" is missing from argparse choices despite being supported in SkrlVecEnvWrapper.
scripts/reinforcement_learning/skrl/train.py Version bump to 2.0.0 and removal of "jax-numpy" choice; "warp" is missing from argparse choices.
source/isaaclab_rl/setup.py Minimum skrl dependency bumped from >=1.4.3 to >=2.0.0, consistent with the integration changes.
source/isaaclab_tasks/isaaclab_tasks/direct/cart_double_pendulum/agents/skrl_ippo_cfg.yaml Renames state_preprocessor to observation_preprocessor and nulls out state_preprocessor per skrl 2.0.0 API changes.
source/isaaclab_tasks/isaaclab_tasks/direct/humanoid_amp/agents/skrl_dance_amp_cfg.yaml Renames amp_state_preprocessor → amp_observation_preprocessor and updates reward config keys (task/style weight→scale, removes discriminator_reward_scale).
source/isaaclab_tasks/isaaclab_tasks/direct/cart_double_pendulum/agents/skrl_mappo_cfg.yaml Removes shared_state_preprocessor, adds observation_preprocessor, and updates critic network input from OBSERVATIONS to STATES per skrl 2.0.0.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    CLI["CLI --ml_framework arg\n(choices: torch, jax)"] -->|"torch / jax"| Runner["skrl Runner"]
    CLI -.->|"warp ❌ blocked by argparse"| Runner

    Runner --> SkrlWrapper["SkrlVecEnvWrapper\n(supports: torch, jax, warp)"]
    SkrlWrapper -->|torch| TorchWrap["skrl.envs.wrappers.torch"]
    SkrlWrapper -->|jax| JaxWrap["skrl.envs.wrappers.jax"]
    SkrlWrapper -->|warp| WarpWrap["skrl.envs.wrappers.warp"]

    Runner --> Agent["runner.agent"]
    Agent -->|"enable_training_mode(False)"| EvalMode["Eval Mode (skrl 2.0.0)"]
    Agent -->|"act(obs, states, ...)"| Act["Inference Loop"]
    Act -->|"env.state()"| States["Global States"]
    States --> Act
Loading

Comments Outside Diff (1)

  1. source/isaaclab_rl/isaaclab_rl/skrl.py, line 14 (link)

    P2 Docstring example not updated for new frameworks

    The module-level docstring still only shows "torch" and "jax" in the example comment, and doesn't reflect the newly supported "warp" option. The type hint on the function signature was updated, but the human-readable documentation was not.

Reviews (1): Last reviewed commit: "Merge upstream/main into develop" | Re-trigger Greptile

type=str,
default="torch",
choices=["torch", "jax", "jax-numpy"],
choices=["torch", "jax"],

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 "warp" missing from CLI choices

SkrlVecEnvWrapper in skrl.py was updated to support "warp" as a valid ml_framework, but neither play.py nor train.py includes "warp" in the --ml_framework argparse choices list. Passing --ml_framework warp from the command line will be rejected before it ever reaches SkrlVecEnvWrapper, making the new warp support effectively inaccessible.

Suggested change
choices=["torch", "jax"],
choices=["torch", "jax", "warp"],

type=str,
default="torch",
choices=["torch", "jax", "jax-numpy"],
choices=["torch", "jax"],

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 "warp" missing from CLI choices

Same issue as play.py: SkrlVecEnvWrapper supports "warp" after this PR but train.py still only lists ["torch", "jax"] as valid choices, blocking any warp-based training from the CLI.

Suggested change
choices=["torch", "jax"],
choices=["torch", "jax", "warp"],

@kellyguo11 kellyguo11 merged commit 4f85aae into isaac-sim:develop Apr 30, 2026
50 of 54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants