Skip to content

Aggregate open benchmarking work - #6769

Draft
AntoineRichard wants to merge 28 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/benchmarking-giga-stack
Draft

Aggregate open benchmarking work#6769
AntoineRichard wants to merge 28 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/benchmarking-giga-stack

Conversation

@AntoineRichard

Copy link
Copy Markdown
Collaborator

Summary

Integration draft aggregating the currently open benchmarking pull requests after rebasing them onto develop, which now contains #6564. The individual pull requests remain the intended review and merge units; this draft exists to exercise their combined behavior and CI.

Included pull requests

Stack

The micro-benchmark and documentation work is linearized as:

#6565 -> #6566 -> #6567 -> #6568 -> #6587 -> #6595 -> #6627 -> #6629

The aggregate then merges the independent #6624, #6631, and #6764 tips. Historical plan/spec commits were excluded from the rewritten branches.

Integration notes

  • The success-rate learning curve advances the benchmark bundle schema from 1.2 to 1.3.
  • The combined user guide keeps the rewritten workflow structure while using num_steps and warmup_steps consistently.
  • The documentation-navigation merge includes only its three benchmark documentation files; unrelated stale develop history was not carried forward.

Verification

  • ./isaaclab.sh -f
  • Combined benchmark, smoke, mock-interface, and RL entrypoint tests: 349 passed, 1 skipped, 4 deselected

Keep mock state buffers stable so timed samples measure accessor work instead of random-data allocation or mock-side copies. Initialize Newton dynamics metadata and make unsupported or deprecated properties explicit.
Benchmark articulation, rigid-object, and collection wrapper and data paths using the optional kitless OVPhysX runtime. Keep mock storage work outside timed operations so results reflect Isaac Lab overhead.
Measure synchronized updates, submission latency, and backend reads for contact, frame-transformer, IMU, PVA, joint-wrench, and ray-caster sensors without charging physics stepping to sensor timing.
Share synchronized latency sampling across PhysX and OVPhysX sensor workloads. Emit summary and JSON results with observer-floor, submission, completion, and native-read statistics so runs are directly comparable and failures remain visible.
Use the shared synchronized latency runner so Newton sensor results include consistent statistics, observer cost, metadata, and machine-readable output across backends.
Explain why isolated asset and sensor benchmarks exist, how to run each backend workload, and how to interpret and compare their outputs.
Keep the designated-workstation requirement public without exposing the private local SSH helper.
Lead with the supported typed Python workflows, document verified request and result contracts, and provide an executable lower-level extension example. Align API reference coverage and testing navigation with the three-part benchmark journey.
Connect the benchmark user, framework, and micro-benchmark guides through one coherent documentation path while preserving their distinct scopes.
Scope Torch and SKRL global backend settings to reusable in-process training and playback calls. Preserve attributes that were initially absent and add failure-path regressions for RSL-RL and SKRL.
Move shared state guards into the common entrypoint utilities and make RSL-RL's Torch backend policy explicit at the call site. Scope SKRL playback preservation to JAX calls and cover exceptional RSL-RL cleanup.
Use step terminology across runtime and play interfaces. Record the excluded count in environment-step timing so schema and flat formatter consumers share one contract.
Advance the rebased benchmark bundle schema from 1.2 to 1.3 for the additive learning success-rate curve.
# Conflicts:
#	scripts/benchmarks/test/test_benchmark_smoke.py
# Conflicts:
#	docs/source/testing/benchmarks.rst
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team labels Jul 28, 2026
@@ -125,27 +125,10 @@ CPU: Intel(R) Xeon(R) Platinum 8362 CPU @ 2.80GHz
+-------------------------------------+-------------------+--------------+-------------------+--------------------+

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.

We can probably remove this whole file at this point

learning = builders.build_learning(
reward_series=log_data.get(desc.reward_tag, []),
ep_length_series=log_data.get(desc.ep_length_tag, []),
success_rate_series=tracker.history if tracker is not None else None,

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.

-> =tracker.history, if its none it'll get set to None



def _build_learning_curve(values: Sequence[float], ema_alpha: float, keep_series: bool) -> LearningCurve:
samples = list(values)

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.

is there a concern that this would be some other type? If it is why is the type hint Sequence?

return stats


def _percentile(samples: Sequence[float], fraction: float) -> float:

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 we leverage numpy for doing our math here and elsewhere. numpy has percentiles, std_dev, and other strong helpers. The calculations can then be done in-place

environment_step_calls: int
simulation_step_calls: int | None
measurement_mode: Literal["host_return", "serialized_synchronized"]
warmup_steps: int = 0

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.

is the default meant to be 0? I thought it was 1?

wp.synchronize_device(sim.device)

# Time only sensor work. Physics steps happen outside the timed regions.
synchronize = partial(wp.synchronize_device, sim.device)

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.

Not good to hide that you are using warp synchronize for a small refactor gain

@@ -0,0 +1,201 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).

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.

Does rigid body really need 3 different benchmark files. Code could be shared if they were together. I know they benchmark three different concepts but worth thinking if we can combine.



@configclass
class RayCasterBenchmarkSceneCfg(InteractiveSceneCfg):

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.

ray-plane is not that interesting of a benchmark. Similarly for the other benchmarks we might need to choose (and document) them a bit more carefully. Can be done in follow-up

@@ -16,6 +16,8 @@
from __future__ import annotations

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.

Here and elsewhere, we should probably make these microbenchmarks callable from the main benchmarking command

uv run isaaclab microbenchmark --component contact_sensor physics=newton_mjwarp

Can be done in follow up or directly here, just leaving my brainstormed thoughts

AppLauncher.add_app_launcher_args(parser)
args_cli = parser.parse_args()
if args_cli.num_envs <= 0:
parser.error("--num_envs must be greater than zero")

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.

type check in add_argument?

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.

2 participants