Skip to content

Commit 253c756

Browse files
committed
Merge remote-tracking branch 'upstream/develop' into angehu/perf-smoke-integration
2 parents a881270 + a1dbb98 commit 253c756

153 files changed

Lines changed: 1977 additions & 16283 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/validate-kitless-image/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ runs:
6666
uv pip install --python "$VIRTUAL_ENV/bin/python" pytest
6767
python -m pytest \
6868
source/isaaclab/test/install_ci/misc/cartpole_training_smoke.py::test_train_cartpole_state_completes \
69-
source/isaaclab_newton/test/test_mock_interfaces \
69+
source/isaaclab/test/benchmark/test_asset_suite_runtime_semantics.py \
7070
-q -p no:cacheprovider
7171
'
7272

.github/workflows/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# (frozen at 6.1.0-alpha.2). Both images use Isaac Sim's NGC org, which is current and
1010
# which the CI credential can reach.
1111
isaacsim_image_name: nvcr.io/0947644777160149/internal/isaac-sim
12-
# Pinned to Isaac Sim commit 307e5486 for reproducible CI.
13-
isaacsim_image_tag: latest-develop@sha256:a13867a6403488a9e640288f96492e6ecd44c3a525b5b85793a2da68fdac48ad
12+
# Pinned to Isaac Sim 6.1.0-alpha.47 (commit 0d707bba) for reproducible CI.
13+
isaacsim_image_tag: latest-develop@sha256:dc49acc482221d5302cc7095771b6a807de97a17c7835064f812dd013ff2b806
1414
isaaclab_image_name: nvcr.io/0947644777160149/internal/isaac-lab
1515
ovphysx_wheelhouse_image: ""

.github/workflows/kitless-docker.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ jobs:
5656
^uv\.lock$ :: Locked dependency graph
5757
^source/[^/]+/pyproject\.toml$ :: Package manifests
5858
^source/isaaclab/isaaclab/cli/ :: Install CLI implementation
59-
^source/isaaclab_newton/isaaclab_newton/test/mock_interfaces/ :: Mock-interface implementation
60-
^source/isaaclab_newton/test/test_mock_interfaces/ :: Kit-less pytest subset
59+
^source/isaaclab/isaaclab/test/fixtures/ :: Isolated asset fixture implementation
60+
^source/isaaclab_(physx|newton|ovphysx)/isaaclab_.*/test/fixtures/ :: Backend fixture implementation
61+
^source/isaaclab/test/benchmark/test_asset_suite_runtime_semantics\.py$ :: Kit-less pytest subset
6162
^\.github/workflows/kitless-docker\.yml$ :: This workflow file
6263
^\.github/actions/detect-changes/ :: Change-detection action
6364
^\.github/actions/_lib/compute-deps-hash/ :: Dependency-cache identity

docs/source/features/multi_gpu.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,3 +481,7 @@ For skrl JAX training, pass an integer GPU count and the ``--coordinator_address
481481
For multi-node torch jobs, pass torchrun settings such as ``--nnodes``, ``--node_rank``,
482482
``--rdzv_backend``, ``--rdzv_endpoint``, and ``--rdzv_id`` before the training arguments. For
483483
skrl JAX multi-node jobs, pass ``--nnodes``, ``--node_rank``, and ``--coordinator_address``.
484+
485+
To measure aggregate throughput and timing rather than to train a policy, use the multi-GPU
486+
benchmark workflows instead; see :ref:`testing_benchmarks_multigpu`. They take the same launcher
487+
options and support RSL-RL, RL-Games, and skrl with Torch.

docs/source/policy_deployment/05_leapp/exporting_policies_with_leapp.rst

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ Set the EULA variables in non-interactive shells so Isaac Sim can start without
117117
--task <TASK_NAME> ^
118118
--checkpoint <PATH_TO_CHECKPOINT>
119119
120-
For example, to export a UR10 reach policy trained with RSL-RL:
120+
For example, to export a Humanoid policy trained with RSL-RL:
121121

122122
.. tab-set::
123123
:sync-group: os
@@ -133,17 +133,17 @@ For example, to export a UR10 reach policy trained with RSL-RL:
133133
134134
OMNI_KIT_ACCEPT_EULA=Y ACCEPT_EULA=Y uv run --extra leapp python \
135135
scripts/reinforcement_learning/leapp/rsl_rl/export.py \
136-
--task Isaac-Reach-UR10 \
137-
--checkpoint logs/rsl_rl/ur10_reach/<date timestamp>/model_4999.pt
136+
--task Isaac-Humanoid \
137+
--checkpoint logs/rsl_rl/humanoid/<date timestamp>/model_999.pt
138138
139139
.. tab-item:: isaaclab.sh / isaaclab.bat
140140

141141
.. code-block:: bash
142142
143143
OMNI_KIT_ACCEPT_EULA=Y ACCEPT_EULA=Y ./isaaclab.sh -p \
144144
scripts/reinforcement_learning/leapp/rsl_rl/export.py \
145-
--task Isaac-Reach-UR10 \
146-
--checkpoint logs/rsl_rl/ur10_reach/<date timestamp>/model_4999.pt
145+
--task Isaac-Humanoid \
146+
--checkpoint logs/rsl_rl/humanoid/<date timestamp>/model_999.pt
147147
148148
.. tab-item:: :icon:`fa-brands fa-windows` Windows
149149
:sync: windows
@@ -157,8 +157,8 @@ For example, to export a UR10 reach policy trained with RSL-RL:
157157
set OMNI_KIT_ACCEPT_EULA=Y
158158
set ACCEPT_EULA=Y
159159
uv run --extra leapp python scripts\reinforcement_learning\leapp\rsl_rl\export.py ^
160-
--task Isaac-Reach-UR10 ^
161-
--checkpoint logs\rsl_rl\ur10_reach\<date timestamp>\model_4999.pt
160+
--task Isaac-Humanoid ^
161+
--checkpoint logs\rsl_rl\humanoid\<date timestamp>\model_999.pt
162162
163163
.. tab-item:: isaaclab.sh / isaaclab.bat
164164

@@ -167,8 +167,8 @@ For example, to export a UR10 reach policy trained with RSL-RL:
167167
set OMNI_KIT_ACCEPT_EULA=Y
168168
set ACCEPT_EULA=Y
169169
isaaclab.bat -p scripts\reinforcement_learning\leapp\rsl_rl\export.py ^
170-
--task Isaac-Reach-UR10 ^
171-
--checkpoint logs\rsl_rl\ur10_reach\<date timestamp>\model_4999.pt
170+
--task Isaac-Humanoid ^
171+
--checkpoint logs\rsl_rl\humanoid\<date timestamp>\model_999.pt
172172
173173
By default, the export artifacts are saved in the same directory as the checkpoint. The
174174
exported graph is named after the task.

docs/source/testing/benchmarks.rst

Lines changed: 97 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ Benchmarking Isaac Lab
44
======================
55

66
Isaac Lab provides supported benchmark workflows for environment stepping,
7-
trained-policy playback, reinforcement-learning training, and startup profiling.
8-
This guide explains which workflow to use, how to run it, and how to interpret
9-
its results.
7+
trained-policy playback, reinforcement-learning training, and startup profiling,
8+
each of which can also be run across several GPUs. This guide explains which
9+
workflow to use, how to run it, and how to interpret its results.
1010

1111
.. seealso::
1212

@@ -31,6 +31,8 @@ Choose A Workflow
3131
- ``training``
3232
* - Launch, import, configuration, scene creation, or first-step latency
3333
- ``startup``
34+
* - Any of the above across several GPUs
35+
- ``<workflow>-multigpu``
3436
* - One asset or sensor operation
3537
- :ref:`testing_micro_benchmarks`
3638

@@ -119,7 +121,7 @@ same random-action stepping workload.
119121
.. code-block:: json
120122
121123
{
122-
"schema_version": "1.3",
124+
"schema_version": "1.4",
123125
"run": {
124126
"config": {"physics_backend": "physx", "rendering_backend": "none", "presets": ["physx"]},
125127
"task": "Isaac-Cartpole-Direct", "seed": 42, "status": "completed", "num_envs": 4096
@@ -154,7 +156,7 @@ same random-action stepping workload.
154156
.. code-block:: json
155157
156158
{
157-
"schema_version": "1.3",
159+
"schema_version": "1.4",
158160
"run": {
159161
"config": {
160162
"physics_backend": "physx", "rendering_backend": "isaacsim_rtx",
@@ -336,6 +338,96 @@ Do not treat a faster environment-step rate as proof of faster end-to-end
336338
training or equivalent learning. Do not compare short training curves as if
337339
they established final policy quality.
338340

341+
.. _testing_benchmarks_multigpu:
342+
343+
Multi-GPU
344+
---------
345+
346+
Use It When
347+
~~~~~~~~~~~
348+
349+
Append ``-multigpu`` to ``startup``, ``runtime``, or ``training`` to run the same
350+
workflow with one rank per GPU. Use it to measure synchronized multi-GPU training
351+
throughput, or to measure how much a workflow slows down when every GPU on the
352+
node is busy.
353+
354+
Command
355+
~~~~~~~
356+
357+
.. code-block:: bash
358+
359+
./isaaclab.sh benchmark training-multigpu \
360+
--rl_library rsl_rl \
361+
--num_gpus 2 \
362+
--task Isaac-Cartpole-Direct \
363+
--num_envs 4096 \
364+
--max_iterations 100 \
365+
--seed 42 \
366+
--visualizer none \
367+
--output_path ./benchmark_results/multigpu \
368+
physics=isaacsim_physx
369+
370+
The launcher accepts ``--num_gpus``, ``--nnodes``, ``--node_rank``, and the
371+
``torchrun`` rendezvous options, exactly like :ref:`train-multigpu-command`. Every
372+
other argument is forwarded to the single-GPU workflow unchanged. Add ``--dry_run``
373+
to print the ``torchrun`` command without running it, and ``--log_all_ranks`` to
374+
show console output from every rank instead of local rank 0 only.
375+
376+
For a multi-node run, issue the same command on every node with a distinct
377+
``--node_rank``:
378+
379+
.. code-block:: bash
380+
381+
./isaaclab.sh benchmark training-multigpu \
382+
--rl_library rsl_rl --nnodes 2 --node_rank 0 --num_gpus 8 \
383+
--rdzv_backend c10d --rdzv_endpoint host0:29400 --rdzv_id bench \
384+
--task Isaac-Cartpole-Direct
385+
386+
``training-multigpu`` supports ``rsl_rl``, ``rl_games``, and ``skrl`` with Torch. It
387+
does not support skrl JAX or SB3, and it rejects ``--video``,
388+
``--capture_env_sensors``, and ``--check_success``, none of which are meaningful
389+
across ranks. Use :ref:`train-multigpu-command` for general distributed training.
390+
391+
Read The Result
392+
~~~~~~~~~~~~~~~
393+
394+
``--num_envs`` is the number of environments **per rank**, and each rank creates its
395+
own Isaac Lab instance on its own GPU. Only global rank 0 writes a bundle. What that
396+
bundle covers depends on the workflow, and ``extra`` records it:
397+
398+
.. list-table::
399+
:header-rows: 1
400+
:widths: 30 70
401+
402+
* - ``extra`` field
403+
- Meaning
404+
* - ``world_size``, ``local_world_size``, ``num_nodes``
405+
- Rank layout of the job.
406+
* - ``num_envs_per_rank``
407+
- Environments hosted by each rank.
408+
* - ``workload_scope``
409+
- ``global`` for ``training-multigpu``: ranks train in lockstep, so ``run.num_envs``,
410+
``runtime.steps_per_iteration``, and every FPS field cover all ranks.
411+
``rank0`` for ``startup-multigpu`` and ``runtime-multigpu``: those ranks run
412+
independent workloads, so the reported values are rank 0's own, measured while
413+
the other ranks contend for the same host.
414+
* - ``measurement_scope``
415+
- ``rank0_process`` — timings, learning curves, CPU, and RAM come from rank 0 alone.
416+
* - ``gpu_measurement_scope``
417+
- ``rank0_node`` — ``resources.devices`` reports every GPU visible to rank 0, so a
418+
single-node run shows all ranks. ``resources.gpu_util_pct`` and
419+
``resources.gpu_mem_gb`` remain scoped to rank 0's own device.
420+
421+
Do Not Infer
422+
~~~~~~~~~~~~
423+
424+
Do not compare a multi-GPU result against a single-GPU result at the same
425+
``--num_envs``: the multi-GPU run has ``world_size`` times as many environments. To
426+
measure scaling, compare the global throughput of an ``N``-GPU run against ``N``
427+
times the throughput of a single-GPU run at the same per-rank environment count. Do
428+
not read ``startup-multigpu`` or ``runtime-multigpu`` throughput as a global rate;
429+
their ``workload_scope`` is ``rank0``, and the other ranks were not measured.
430+
339431
Startup Profiling
340432
-----------------
341433

docs/source/testing/index.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,3 @@ when automation or a custom benchmark producer requires the Python API.
1616
benchmarks
1717
micro_benchmarks
1818
benchmark_framework
19-
mock_interfaces

0 commit comments

Comments
 (0)