feat(dsight): add CLI-only inference trace exploration - #479
Merged
Merged
Conversation
Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #479 +/- ##
=======================================
Coverage ? 81.41%
=======================================
Files ? 137
Lines ? 20318
Branches ? 0
=======================================
Hits ? 16541
Misses ? 3777
Partials ? 0 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
nv-yna
marked this pull request as ready for review
September 18, 2026 22:07
nv-yna
requested review from
alec-flowers,
csahithi,
ishandhanani and
nlevin-ui
as code owners
September 18, 2026 22:07
Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
Signed-off-by: Yuewei Na <nv-yna@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User impact
Generate a self-contained inference dashboard from a preserved AgentX/AIPerf or AgentPerf run. Select a time range, inspect client sessions and requests, and compare available worker metrics, hardware samples, iteration logs, and Nsight activity on the same timeline.
Generation is an explicit command run manually on a cluster login node. It is independent of job submission, benchmark execution, cleanup, and upload.
Run on a login node
Use a Bash shell with
uvonPATH, Python 3.10+, and a writable srt-slurm checkout that includes this change. The preserved run directory must be readable and the report's parent directory writable on that node. No Slurm allocation, GPU, container, running deployment, or browser is needed for generation.Replace the quoted placeholders with your paths. Relative paths resolve from the current working directory.
uv run --no-devprepares the checkout's Python environment without development dependencies; the first invocation needs package access or a populated cache.OTel is optional and is imported automatically when available. To skip reading OTel files entirely:
Optionally include existing Nsight SQLite exports and the IANA timezone of timezone-free TRT-LLM iteration logs. These options can also be combined with
--no-otel:Query the report on the login node without opening the UI:
The output directory contains
index.html,trace-data.json.gz, andmanifest.json. Copy or publish<path_to_report_directory>/index.htmlto view it in a browser. Pass either a run directory containinglogs/or the log directory itself; use--client "<path_to_client_export>"when multiple client exports exist.Large captures can require substantial CPU, memory, and filesystem reads. Follow the site's login-node resource limits and use a CPU job when needed.
Optional data and UI behavior
--no-otel, including untraced requests within a partially traced run.query_trace, andwindow.traceExplorerexpose the same dataset. Unavailable lifecycle queries returnavailable: falsewith empty stage/activity lists.Implementation and browser assets live in
src/srtctl/dsight/. Nsight capture/export is outside this command; it reads already exported SQLite files. Shared NVTX/iteration activity is not attributed as a request's exclusive compute time.Validation
Executed all three documented build examples directly on a real cluster login node from this revision, using preserved real data and a fresh Python environment: default OTel import,
--no-otel, and existing Nsight SQLite exports with an explicit iteration-log timezone. Each produced 8,590 requests; the Nsight example imported 33 profiles.All nine login-node CLI queries passed. HTML/data SHA-256 hashes matched their manifests, and
--no-otelproduced zero joined OTel spans and zero request lifecycle rows. No Slurm allocation or serving container was used.make check: 2,942 passed, 2 skipped, 6 integration tests deselected.28 focused DSight tests, including missing, empty, unjoined, unsupported, and disabled OTel. Explicit opt-out succeeds with a malformed OTel file because it is not read.
Six browser scenarios cover mixed traced/untraced, missing, empty, unjoined, disabled, and client-only inputs; lifecycle controls, native range selection, saved views, metrics, iterations, and Nsight inspection pass. No JavaScript errors or external requests.
DSight type checking, JavaScript syntax checking, and pre-commit on every changed file pass. The full pre-commit run reports 31 existing findings outside this change; unrelated automatic formatting was discarded.
See DSight documentation for inputs, timing definitions, query APIs, and capture limits.