Add lightweight performance smoke comparisons - #6999
Conversation
Require every authoritative baseline to cover throughput and both memory metrics so missing data cannot silently pass. Reject non-finite inputs and drop the unsupported Newton and Isaac RTX camera combination.
Greptile SummaryThe PR adds an eight-configuration GPU performance-smoke matrix that runs the existing runtime benchmark against the PR image and compares throughput and memory metrics with an optional S3 baseline.
Confidence Score: 4/5The PR appears safe to merge, with the non-blocking exception that the new self-hosted CI job should pin its third-party actions to immutable commits. The comparison implementation aligns with the existing runtime benchmark schema, while the only accepted concern is the avoidable supply-chain exposure from mutable action tags in the new job. Files Needing Attention: .github/workflows/build.yaml
|
| Filename | Overview |
|---|---|
| .github/workflows/build.yaml | Adds the GPU benchmark matrix and comparison pipeline; its new third-party action references remain mutable. |
| tools/performance_compare.py | Implements strict baseline identity matching, metric regression evaluation, and three report formats with explicit error handling. |
| tools/test/test_performance_compare.py | Covers metric direction and boundaries, invalid baseline handling, generated outputs, and baseline-disabled behavior. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Build PR CI image] --> B[Run benchmark matrix]
B --> C[Raw runtime JSON]
D[Optional S3 baseline] --> E[Performance comparator]
C --> E
E --> F[Markdown report]
E --> G[JSON report]
E --> H[JUnit report]
F --> I[Workflow summary and artifact]
G --> I
H --> I
Reviews (1): Last reviewed commit: "Harden performance smoke validation" | Re-trigger Greptile
| timeout_minutes: 12 | ||
| args: physics=newton_mjwarp | ||
| steps: | ||
| - uses: actions/checkout@v6 |
There was a problem hiding this comment.
Mutable actions on self-hosted runner
The new performance job resolves actions/checkout@v6 and actions/upload-artifact@v7 through mutable tags on a self-hosted GPU runner. Pin both references to full commit SHAs so upstream tag movement cannot change the code executed by this workflow or expose runner resources and benchmark artifacts.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Isaac Lab Review Bot
Adds a matrix-driven performance smoke workflow using the existing runtime benchmark producer and a dependency-free comparison tool that matches benchmark identity against an optional S3 baseline and emits Markdown, JSON, and JUnit results. The workflow should use the repository-mandated uv entry points before merge.
- Design and architecture: The separation between benchmark production and baseline comparison is sound. Exact matching across task, backends, presets, GPU model, Isaac Sim version, and environment count provides deterministic baseline selection, while an unconfigured baseline produces an explicit SKIP.
- API: The new tooling does not alter public package APIs. Its CLI arguments follow the repository's snake_case convention, and no source-package documentation or changelog integration is required.
- Implementation: The metric extraction, throughput-versus-memory regression directions, baseline validation, report generation, and FAIL/ERROR exit behavior are internally consistent. However, the workflow runs the benchmark through
./isaaclab.shand the comparison through barepython3, contrary to the trusted tooling requirement to useuv run isaaclabanduv run pythonfor routine CLI and script execution.
Minor fixes needed. Posted 1 actionable finding inline.
Automated review; human maintainers own approval decisions.
| -e ISAAC_SIM_HEADLESS=1 \ | ||
| -v "$PWD/benchmark-output:/benchmark-output" \ | ||
| --entrypoint bash "$CI_IMAGE_TAG" -lc \ | ||
| "./isaaclab.sh benchmark runtime \ |
There was a problem hiding this comment.
🔵 Suggestion · Implementation — CI bypasses uv-managed entry points
The benchmark is launched with ./isaaclab.sh benchmark runtime, and line 949 runs the comparison with a bare host python3. Repository tooling rules reserve ./isaaclab.sh for installer workflows (-i <args>) and direct Isaac Lab CLI and script execution to uv run isaaclab benchmark ... and uv run python tools/performance_compare.py. Using the documented entry points keeps the job aligned with the supported CLI surface and avoids depending on an unmanaged interpreter.
Add total startup timing to the required performance metrics. Qualify FPS regressions with coherent iteration-time statistics and reject malformed or inconsistent benchmark data. Use provider-qualified runtime identities so kit-less Newton runs compare correctly.
Write benchmark JSON to container-local storage while Isaac Sim is running, then copy the completed result to the host artifact mount. This avoids the reproducible RTX finalization failure on the bind-mounted path without changing benchmark behavior.
Keep benchmark results in container-local storage and use host-side docker cp after the run. This removes the non-root bind-mount write that consistently fails for the RTX workload while preserving the normal container user.
Keep runtime benchmarks aligned with the established arithmetic FPS semantics by default while allowing callers to opt into effective aggregate throughput. Compare performance baselines using the matching per-step FPS statistics.
Keep the machine-readable JSON and workflow summary while removing unused JUnit and Markdown artifacts. Reduce duplicate significance fields and repetitive validation tests without changing gate semantics.
|
Closing in favor of #7137 |
Description
This is a focused alternative to #6864. It uses IsaacLab's existing
benchmark runtimeCLI to run the performance workloads and adds only themissing comparison and CI wiring.
The PR:
benchmark-process RSS;
exposing a single opt-in
--aggregate_throughputflag;two-standard-error significance threshold computed from coherent per-step
FPS statistics;
variable
PERF_BASELINE_S3_URI;and the raw benchmark bundle;
identities and fails closed on malformed, missing, ambiguous, or non-finite
input; and
status, or parallel benchmark implementation.
Until the S3 bucket is provisioned, leaving
PERF_BASELINE_S3_URIunset makesthe comparison explicitly report
SKIP; benchmarks and artifacts are stillproduced. Once configured, the workflow only requires
s3:GetObjectaccess.Every matching baseline row must provide all four metrics. The FPS row also
stores the reference per-step FPS standard deviation and sample count so the
comparison can reject noisy percentage regressions that are not statistically
significant.
The implementation is 799 additions across eight files, including exactly six
focused tests. This is approximately 92% smaller than the current proposal
while retaining the gating and reporting behavior needed for CI.
Local validation:
and all five comparator scenarios;
./isaaclab.sh -fpassed immediately before commit and again immediatelybefore push;
four-metric
SKIPreports while S3 is unconfigured, including startup,memory, and measured per-step FPS deviation; and
outputs. No GPU benchmark was rerun for these reporting-only trims because
the shared machine is currently busy.
Type of change
Screenshots
Not applicable; this change affects CI reports and artifacts.
Checklist
pre-commitchecks with./isaaclab.sh -fsource/isaaclab/changelog.d/fragmentCONTRIBUTORS.md