Repository navigation
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
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.
Required human contributor answers
1. What outcome are you trying to achieve?
Make default and explicit profiling configurations produce consistent coverage notes under the same collection conditions, so users can interpret the results clearly.
2. What is the highest-leverage variable for that outcome?
Correctly distinguish
None, which requests automatic activity selection, from the activities that were actually selected for the session.3. How will this work move that variable rather than create busywork?
Use the resolved activities when deciding whether missing CUDA device events require a coverage note. This lets automatically selected CUDA collection receive the same diagnostic as explicit CUDA collection.
4. Who is the customer or user, and what do they actually need?
The users are developers inspecting profiling results. They need a clear indication of whether their capture contains GPU device events.
PR necessity and bugfix evidence
A PR is needed: the default configuration omits an existing diagnostic that explicit CUDA activities correctly produce. Requiring explicit activities would leave the default path incorrect.
The contributor reproduced the failure and verified the fix on a rented Linux GPU server using the same script and environment. See the before/after results below; the accompanying evidence archive contains both complete captures and the exact reproducer. This is real GPU collection, not a replay of old traces.
Purpose
When activities are omitted on a CUDA device, ProfileSession resolves them to CPU and CUDA, but config.activities remains null. The summary parser checks that raw setting and misses the note when the capture contains no device events.
Use the top-level resolved activities. Fall back to config.activities only if that field is absent, preserving older metadata. A present empty list remains authoritative. CPU-only collection remains exempt; kernel, gpu_memcpy, and gpu_memset events suppress the note as before.
Scope: one diagnostic condition in vllm_rlt/profiling_artifacts.py and a parameterized CPU regression in tests/test_profiling.py. No capture, scheduling, model execution, or event timing changes.
Test Plan
vllm-rlt Version / Commit:
Test Result
GPU runs on 2026-11-04: NVIDIA GeForce RTX 4090 D, driver 570.124.06, Python 3.12.3, PyTorch 2.6.0a0+ecf3bae40a.nv25.01, CUDA runtime 12.8. Both recorded working trees were clean; the script and source hashes remained unchanged during each run.
Baseline: REPRODUCED, exit 1 (the reproducer's intentional bug-detected code). Fix: NOT_REPRODUCED, exit 0, all six cases passed. Independent raw event counts matched the summaries in all 12 captures, and all archive/member checksums passed.
CPU validation previously run at this same fix, with retained logs (Windows, Python 3.13.3, PyTorch 2.14.0+cpu, pytest 9.1.1, Ruff 0.13.2):
The failure is tests/test_ouro.py::test_packed_prefill_matches_dense_at_every_depth[2]. The same test failed on an unmodified baseline in the same environment with identical differences: 2/160 elements, maximum absolute difference 7.033348083496094e-06 and relative difference 0.0001258739794138819. No tolerances were changed. Skipped tests are not validated. Linux CI for this PR remains to be checked.
Performance review: this adds one metadata lookup per parsed trace in artifact postprocessing. It adds no GPU work or inference-loop operation. No throughput/latency improvement is claimed; inference performance benchmarking is not applicable to this diagnostic-only fix.
Code-quality review: reuse the session's resolved configuration (R02/R14), retain explicit compatibility, and keep the change local (R01/R08). Inferring collection intent from the CUDA device alone would incorrectly warn for explicit CPU-only collection. No additional abstraction or unrelated refactor was warranted.
profiling-cuda-warning-evidence.zip