Skip to content

[CI probe, do not merge] Run the Kit visualizer pause checks on CI hardware (NVBUG 6570125) - #7055

Closed
fatimaanes wants to merge 7 commits into
developfrom
fanes/ci-test
Closed

[CI probe, do not merge] Run the Kit visualizer pause checks on CI hardware (NVBUG 6570125)#7055
fatimaanes wants to merge 7 commits into
developfrom
fanes/ci-test

Conversation

@fatimaanes

Copy link
Copy Markdown
Collaborator

CI probe — not for merge. The PR of record is #7049.

This branch carries the exact same commits as #7049. It exists only to get the test suite to run.

Why this duplicate exists

#7049 comes from a fork, and fork PRs receive no repository secrets. Without NGC_API_KEY the Build Base Docker Image job cannot log in to nvcr.io and fails at the Isaac Sim base image pull, and because every test job carries needs: [build, config], all ~26 of them report SKIPPED — including test-isaaclab-visualizers, the job that runs the very test #7049 re-enables. That PR's central claim is therefore unverifiable by its own pipeline.

Opening the same change from an in-repo branch restores secrets, so the test matrix actually runs.

What this run is meant to measure

The paused-frame thresholds in #7049 (viewport 80, Kit tiled camera 160) were calibrated on an L40 (driver 595.58.03, Isaac Sim 6.1.0-alpha.47). CI runs on g6e.2xlarge, i.e. an L40S — same Ada AD102 family, different SKU.

There is one cell where the two can be compared directly, and they disagree. On the Kit viewport pause site at a channel threshold of 50, CI has been observed at 107 px (job 93935796248, expected at most 100), with a historical failing band of 105–161 px. The same cell measured on the L40 bench peaked at 67 px over 5 samples. CI runs roughly 1.6× hotter there.

The Kit tiled cell — the one that governs the 160 constant — has never produced a real number on CI hardware at all, because #6658 set both paused captures to force_recompute=False and left the assertion comparing a cached frame against itself. Its measured headroom (49 px against a gate of 100) is entirely L40-derived.

This run produces that missing number. The assertion prints its pixel count on failure, so a red result is as useful as a green one.

Disposition

Closing once the run completes. Any threshold change it motivates lands on #7049.

fatimaanes and others added 5 commits August 12, 2026 14:15
RTX ResponsiveDenoising keeps refining a paused frame, so two captures taken while
simulation is frozen differ by a small number of high-amplitude pixels. Amplitude
separates that residue from real motion and the pixel count does not: at the shared
threshold of 50 the paused noise reaches 1.55x the weakest real motion signal, so any
count-based gate loose enough to stay quiet is also blind to a genuine regression.

_assert_frames_remain_stable now takes a channel_diff_threshold, raised to 80 at the
Kit viewport pause and 150 at the Kit tiled camera pause. The tiled override is gated
on KitVisualizer because all four tiled cases share _attempt_pause and the
Newton-visualizer cells sit at zero noise. Newton ViewerGL rasterises without DLSS and
keeps the strict default. The pixel gate stays at 100.

Both paused tiled captures render fresh again, reverting #6658. Comparing the sensor's
cached frame against itself cannot detect a renderer that keeps changing the image
after physics stops, which left that assertion unable to fail.

Measured on L40 / driver 595.58.03 / Isaac Sim 6.1.0-alpha.47. Work-around for
NVBUG 6570125; remove once OVRTX 0.5 ships the fix.
These checks have been dead weight for a while. RTX responsive denoising keeps
refining the image after physics stops, so two frames captured during a pause
differ by ~900 pixels and the test went red constantly. #6658 quietened it by
comparing the camera's cached frame against itself, which can't fail whatever
the renderer does.

The denoiser residue is a few very bright pixels; real motion is spread across
many. So count on amplitude instead: only pixels differing by 160 or more (80 in
the viewport). The shimmer drops out, real movement doesn't. Measured over 24
runs on an L40, and confirmed the check still fails when fed actual motion.

Worth being clear about the scope: no physics can step inside this pause window,
so this is a renderer-stability check, not a pause-correctness one. It catches a
gross instability, not a subtle one.

Work-around/Temp fix for NVBUG 6570125. Need to remove once the real fix is in.
Shortened the comment regarding NVBUG 6570125 for clarity.

Signed-off-by: fanes <74020209+fatimaanes@users.noreply.github.com>
@github-actions github-actions Bot added the isaac-lab Related to Isaac Lab team label Aug 12, 2026
@fatimaanes

Copy link
Copy Markdown
Collaborator Author

CI probe complete. All four visualizer integration tests passed on L40S (g6e.2xlarge), two independent runners, first pass, no retries. The L40→L40S transfer question is answered. #7049 is the PR of record.

@fatimaanes fatimaanes closed this Aug 13, 2026
@fatimaanes fatimaanes reopened this Aug 13, 2026
The pause pixel-count log never reaches CI: every pause call site runs inside
caplog.at_level(logging.WARNING), which hard-sets the root logger, so the module
logger's effective level is WARNING and info() short-circuits. Raising it to
WARNING would instead self-trip _assert_no_visualizer_log_issues once
ASSERT_VISUALIZER_WARNINGS is enabled. The assert message already carries the
count, threshold and gate on the run where it matters.

Give the tiled PhysX cell its own constant rather than borrowing the viewport
one. It measures 103 differing pixels at the default threshold against a gate of
100, so lowering the viewport value later would silently break it.
@fatimaanes

fatimaanes commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator Author

Closing — this served its purpose.

This PR was never intended to merge.

Review continues on #7049.

@fatimaanes fatimaanes closed this Aug 13, 2026
kellyguo11 pushed a commit that referenced this pull request Aug 14, 2026
Temporary workaround for NVBUG 6570125 while we wait for the upstream
renderer fix.

## Problem

RTX responsiveDenoising continues refining the image after physics
stops, so fresh renders captured during a pause are no longer stable.
The affected Kit visualizer checks are currently green for the wrong
reasons:
Tiled camera: #6658 changed the paused captures to reuse the cached
sensor frame, so the assertion effectively compares the same frame
against itself and can't detect renderer instability.
Viewport: still performs a real comparison, but the known denoiser noise
can push it over the existing threshold and the failure is absorbed by
retries.

## What this changes

This PR restores fresh renders for the tiled pause check and adjusts the
per-channel difference threshold only for the affected Kit RTX pause
paths.
The existing 100-pixel gate stays unchanged. We're changing how large a
per-channel difference must be before a pixel is counted, rather than
simply allowing more differing pixels.

| site | @50 | @80 | @100 | @120 | @150 | @160 | outcome |
|---|---|---|---|---|---|---|---|
| Kit viewport (Newton) | 67 | **12** | 8 | 7 | 3 | — | 80 |
| Kit viewport (PhysX) | 14 | 4 | 3 | 1 | 0 | — | 80 |
| Kit tiled (Newton) | 999 | 604 | 226 | 120 | 59 | **49** | 160 |
| Kit tiled (PhysX) | 103 | 4 | 4 | 2 | 0 | — | 80 |
| Newton ViewerGL | 0 | 0 | 0 | 0 | 0 | — | 50 |

Values are the number of differing pixels at each per-channel threshold.
For the margin-critical case (Kit tiled camera, Newton backend),
threshold 160 leaves at most 49 px of paused denoiser noise (worst of
n=36) against at least 160 px with real motion (weakest of n=72), both
measured with the denoiser enabled. With the existing 100-pixel gate the
known renderer noise passes at 2.0× margin while real motion is still
detected at 1.6×.



## Changes

`_assert_frames_remain_stable` now accepts a per-call
`channel_diff_threshold`; the default remains 50.
Kit RTX pause checks use 80 for the viewport, 160 for the tiled camera
on Newton, and 80 for the tiled camera on PhysX — three separate
constants, since the tiled PhysX cell measures 103 px at the default
threshold and must not silently track a later change to the viewport
value. Newton ViewerGL remains at the strict default since it doesn't
exercise the affected DLSS path.
`max_differing_pixels` remains 100 everywhere.
The tiled pause check is restored to fresh renders instead of cached
frames, so the assertion is actually exercising renderer stability
again.


## Validation

With retries disabled, the workaround passed 40/40 runs across all four
affected configurations.

As a control, restoring the original threshold of 50 reproduced the
failure 6/6 times at 766–949 differing pixels. Those six failures are
all the **tiled** assertion: the control ran under `pytest -x` and the
viewport test is defined first in the same file, so the run aborted at
the tiled test and the viewport site passed at 50 in those reps. The
control therefore demonstrates that the tiled workaround filters real
denoiser noise rather than simply making the test pass; it is not
evidence for the viewport site.

The viewport raise from 50 to 80 rests instead on production CI, where
the assertion has really been failing (`107 pixels differed, expected at
most 100`, with a historical band reaching 161 px), plus n=5 bench
samples showing 67 px at threshold 50 falling to 12 px at 80.

The same change was validated on three independent L40S CI runners
through #7055, with all four visualizer integration tests passing
first-pass, no retries. Restoring fresh renders also had no meaningful
runtime impact (~27s median).

This is a temporary workaround for NVBUG 6570125 and should be removed
or re-measured once the upstream fix is available. That revert is
load-bearing rather than cosmetic: with the denoiser disabled — the
world after the renderer fix — the weakest real motion in the governing
cell measures 80 px at threshold 160, which is *below* the 100-pixel
gate. Leaving 160 in place after the fix ships would make the tiled
check blind to the weakest motion it exists to catch, so the removal
comment on the constants is the thing guarding that.

---------

Signed-off-by: fanes <74020209+fatimaanes@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant