Skip to content

[https://nvbugs/6490049][test] Unwaive GB300 Kimi disagg e2e - #16920

Open
chienchunhung wants to merge 5 commits into
NVIDIA:mainfrom
chienchunhung:codex/nvbug-6487038-kv-transfer-timeout
Open

[https://nvbugs/6490049][test] Unwaive GB300 Kimi disagg e2e#16920
chienchunhung wants to merge 5 commits into
NVIDIA:mainfrom
chienchunhung:codex/nvbug-6487038-kv-transfer-timeout

Conversation

@chienchunhung

@chienchunhung chienchunhung commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • remove only the waiver for the GB300 Kimi-K2.5 Thinking FP4 concurrency-4096 disaggregated e2e perf-sanity case tracked by NVBUG 6490049
  • preserve the Python cache transceiver default kv_transfer_timeout_ms=60000; this PR has no net timeout override
  • keep the already-unwaived gen_only case unchanged; that case is tracked separately by NVBUG 6487038

Why

main still skips this exact e2e case under NVBUG 6490049. The corresponding gen_only case is already unwaived on main by #16717, so it is not part of this PR's waiver diff.

This PR was originally opened during the NVBUG 6487038 investigation. After rebasing onto the changes from #16717 and #16832, the remaining net waiver change is specifically the e2e case owned by NVBUG 6490049. The PR is therefore retargeted to that bug and does not claim to fix or verify the GEN-only teardown path.

Stack

The verification below is for the combined stack at commit e0bfe69.

Verification

A targeted run with test reuse disabled passed the exact unwaived test:

  • PR helper: PR_Github #63118
  • pipeline: L0_MergeRequest_PR #51208
  • CI report
  • CI completion comment
  • commit: e0bfe69c484e2986528bca0ec6dfab1632d263c2
  • stage: GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-1
  • exact nodeid: perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_kimi-k25-thinking-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp0_ccb-NIXL]
  • pytest result: PASSED; 1 passed, 2 skipped, 4153 deselected
  • test call duration: 1941.99s; pytest total: 1951.11s

The YAML has no explicit GEN or CTX kv_transfer_timeout_ms override, so this validation uses the Python transceiver's existing 60-second default.

Scope

The PR removes one e2e waiver. It does not change the global KV-transfer timeout, add a GB300 timeout override, or modify the inherited GEN-only waiver state.

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-2,GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-4"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62031 [ run ] triggered by Bot. Commit: 880e087 Link to invocation

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-2,GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-4"

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds duration-balanced pytest-split performance test selection. The submit flow reuses the selected test for configuration and output naming. Generation-log synchronization now has a dedicated timeout and applies metric collection only to gen_only runs. One performance waiver is removed.

Changes

Pytest-split performance selection

Layer / File(s) Summary
Duration-balanced shard selection
jenkins/scripts/perf/submit.py
Parses pytest options, loads duration data, reconstructs least-duration groups, and validates the selected shard.
Selected test integration
jenkins/scripts/perf/submit.py
Reuses the selected test line for configuration parsing and output naming. Updates split-group help text.
Selection validation coverage
tests/unittest/scripts/test_perf_submit.py
Verifies least-duration shard selection and rejects conflicting split-group values.

Generation-log synchronization

Layer / File(s) Summary
Generation-only metric collection
tests/integration/defs/perf/test_perf_sanity.py
Adds a dedicated sentinel timeout and limits log snapshots, waits, and device-step-time parsing to gen_only runs.

Performance waiver management

Layer / File(s) Summary
Remove performance test waiver
tests/integration/test_lists/waives.txt
Deletes the waiver for the specified disaggregated upload end-to-end performance test.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SubmitScript
  participant PytestCommand
  participant DurationData
  participant ShardSelector
  SubmitScript->>PytestCommand: Parse split options
  SubmitScript->>DurationData: Load test durations
  DurationData-->>ShardSelector: Provide test durations
  PytestCommand-->>ShardSelector: Provide split and group values
  ShardSelector-->>SubmitScript: Return one selected test
Loading

Possibly related PRs

Suggested reviewers: brnguyen2, bowenfu, mzweilz, chenfeiz0326, qijune

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the NVBugs ticket, test context, and primary change: removing the GB300 Kimi disagg e2e waiver.
Description check ✅ Passed The description clearly explains the scope, rationale, stacked changes, exact test coverage, and verification results, although it omits the template checklist.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Collaborator Author

/bot help

@github-actions

Copy link
Copy Markdown

GitHub Bot Help

/bot [-h] ['run', 'kill', 'skip', 'reuse-pipeline'] ...

Provide a user friendly way for developers to interact with a Jenkins server.

Run /bot [-h|--help] to print this help message.

See details below for each supported subcommand.

Details

run [--reuse-test (optional)pipeline-id --disable-fail-fast --skip-test --stage-list "A10-PyTorch-1, xxx" --gpu-type "A30, H100_PCIe" --test-backend "pytorch, cpp" --add-multi-gpu-test --only-multi-gpu-test --disable-multi-gpu-test --post-merge --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" --detailed-log --debug(experimental) --high-priority]

Launch build/test pipelines. All previously running jobs will be killed.

--reuse-test (optional)pipeline-id (OPTIONAL) : Allow the new pipeline to reuse build artifacts and skip successful test stages from a specified pipeline or the last pipeline if no pipeline-id is indicated. If the Git commit ID has changed, this option will be always ignored. The DEFAULT behavior of the bot is to reuse build artifacts and successful test results from the last pipeline.

--disable-reuse-test (OPTIONAL) : Explicitly prevent the pipeline from reusing build artifacts and skipping successful test stages from a previous pipeline. Ensure that all builds and tests are run regardless of previous successes.

--disable-fail-fast (OPTIONAL) : Disable fail fast on build/tests/infra failures.

--skip-test (OPTIONAL) : Skip all test stages, but still run build stages, package stages and sanity check stages. Note: Does NOT update GitHub check status.

--stage-list "A10-PyTorch-1, xxx" (OPTIONAL) : Only run the specified test stages. Supports wildcard * for pattern matching (e.g., "*PerfSanity*" matches all stages containing PerfSanity). Examples: "A10-PyTorch-1, xxx", "PerfSanity". The patterns "*", "*Post-Merge*", and "*PerfSanity*", including equivalent escaped or repeated-star forms and their use in comma-separated lists, require the ci: post-merge approved PR label. Note: Does NOT update GitHub check status.

--gpu-type "A30, H100_PCIe" (OPTIONAL) : Only run the test stages on the specified GPU types. Examples: "A30, H100_PCIe". Note: Does NOT update GitHub check status.

--test-backend "pytorch, cpp" (OPTIONAL) : Skip test stages which don't match the specified backends. Only support [pytorch, cpp, tensorrt, triton]. Examples: "pytorch, cpp" (does not run test stages with tensorrt or triton backend). Note: Does NOT update GitHub pipeline status.

--only-multi-gpu-test (OPTIONAL) : Only run the multi-GPU tests. Note: Does NOT update GitHub check status.

--disable-multi-gpu-test (OPTIONAL) : Disable the multi-GPU tests. Note: Does NOT update GitHub check status.

--add-multi-gpu-test (OPTIONAL) : Force run the multi-GPU tests in addition to running L0 pre-merge pipeline.

--post-merge (OPTIONAL) : Run the L0 post-merge pipeline instead of the ordinary L0 pre-merge pipeline. Requires the ci: post-merge approved PR label applied by an active member of NVIDIA/trt-llm-ci-approvers. The approval label remains in place when new commits are pushed.

--extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx" (OPTIONAL) : Run the ordinary L0 pre-merge pipeline and specified test stages. Supports wildcard * for pattern matching. Examples: --extra-stage "H100_PCIe-TensorRT-Post-Merge-1, xxx", --extra-stage "Post-Merge". The patterns "*", "*Post-Merge*", and "*PerfSanity*", including equivalent escaped or repeated-star forms and their use in comma-separated lists, require the ci: post-merge approved PR label.

--detailed-log (OPTIONAL) : Enable flushing out all logs to the Jenkins console. This will significantly increase the log volume and may slow down the job.

--debug (OPTIONAL) : Experimental feature. Enable access to the CI container for debugging purpose. Note: Specify exactly one stage in the stage-list parameter to access the appropriate container environment. Note: Does NOT update GitHub check status.

--high-priority (OPTIONAL) : Run the pipeline with high priority. This option is restricted to authorized users only and will route the job to a high-priority queue.

kill

kill

Kill all running builds associated with pull request.

skip

skip --comment COMMENT

Skip testing for latest commit on pull request. --comment "Reason for skipping build/test" is required. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

reuse-pipeline

reuse-pipeline

Reuse a previous pipeline to validate current commit. This action will also kill all currently running builds associated with the pull request. IMPORTANT NOTE: This is dangerous since lack of user care and validation can cause top of tree to break.

Copy link
Copy Markdown
Collaborator Author

/bot kill

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62033 [ kill ] triggered by Bot. Commit: dd8d4db Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62031 [ run ] completed with state ABORTED. Commit: 880e087

Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62033 [ kill ] completed with state SUCCESS. Commit: dd8d4db
Successfully killed previous jobs for commit dd8d4db

Link to invocation

@BowenFu BowenFu left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test-only: perf-sanity YAML gains kv_transfer_timeout_ms: 600000 (matching the equivalent GB200 Kimi config) and the two matching waivers come out. No product source, no default change — kv_transfer_timeout_ms is an existing per-config knob and the global 60s default is untouched. The single YAML serves both the e2e and gen_only variants, so both unwaived cases are covered.

Two notes, neither blocking:

  • The targeted GB300 stages were aborted rather than green, so the e2e case (waived under the broader nvbugs/6490049) isn't yet proven to pass for this reason alone.
  • #16921 removes the same disagg_upload-e2e-gb300_kimi-...con4096... waiver line, so whichever lands second will need a rebase.

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-2,GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-4"

@chienchunhung chienchunhung changed the title [https://nvbugs/6487038][fix] extend GB300 Kimi KV transfer timeout [https://nvbugs/6487038][test] unwaive GB300 Kimi disagg e2e after transceiver fixes Jul 30, 2026
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62861 [ run ] triggered by Bot. Commit: 86a1701 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #62861 [ run ] completed with state FAILURE. Commit: 86a1701
/LLM/main/L0_MergeRequest_PR pipeline #50984 (Partly Tested) completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@chienchunhung
chienchunhung force-pushed the codex/nvbug-6487038-kv-transfer-timeout branch from 86a1701 to 506174a Compare July 31, 2026 19:11
@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --disable-reuse-test --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63102 [ run ] triggered by Bot. Commit: 506174a Link to invocation

@coderabbitai coderabbitai Bot left a comment

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.

🧹 Nitpick comments (2)
tests/unittest/scripts/test_perf_submit.py (1)

46-55: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate fixture loader logic.

ci_submit_module (46-55) duplicates the module-loading logic already in submit_module (34-43), only hardcoding SUBMIT_PATHS[0] instead of request.param. Consider deriving ci_submit_module from submit_module or extracting the shared spec-loading logic into a helper function.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unittest/scripts/test_perf_submit.py` around lines 46 - 55, Refactor
ci_submit_module to reuse the existing submit_module fixture or a shared
module-loading helper instead of duplicating importlib loading logic. Preserve
CI selection through SUBMIT_PATHS[0], while keeping submit_module’s
request.param-based behavior unchanged.
jenkins/scripts/perf/submit.py (1)

649-671: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate bracket-extraction logic.

test_case_name extraction (lines 669-671) reimplements the same bracket-splitting logic already used in parse_test_case_name (lines 214-217). If the bracket-parsing rule changes, both sites need updating, so they can silently drift apart.

Extract a small shared helper, e.g. _bracket_content(line), and use it in both places.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jenkins/scripts/perf/submit.py` around lines 649 - 671, The bracket-content
parsing is duplicated between parse_test_case_name and the test_case_name
assignment. Extract the bracket-splitting behavior into a shared
_bracket_content(line) helper, then reuse it in both locations while preserving
the existing empty-string result when no brackets are present.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@jenkins/scripts/perf/submit.py`:
- Around line 649-671: The bracket-content parsing is duplicated between
parse_test_case_name and the test_case_name assignment. Extract the
bracket-splitting behavior into a shared _bracket_content(line) helper, then
reuse it in both locations while preserving the existing empty-string result
when no brackets are present.

In `@tests/unittest/scripts/test_perf_submit.py`:
- Around line 46-55: Refactor ci_submit_module to reuse the existing
submit_module fixture or a shared module-loading helper instead of duplicating
importlib loading logic. Preserve CI selection through SUBMIT_PATHS[0], while
keeping submit_module’s request.param-based behavior unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7544ded5-a11a-4633-a476-e8054a0ff2c0

📥 Commits

Reviewing files that changed from the base of the PR and between 86a1701 and 506174a.

📒 Files selected for processing (3)
  • jenkins/scripts/perf/submit.py
  • tests/integration/test_lists/waives.txt
  • tests/unittest/scripts/test_perf_submit.py
💤 Files with no reviewable changes (1)
  • tests/integration/test_lists/waives.txt

@chienchunhung
chienchunhung force-pushed the codex/nvbug-6487038-kv-transfer-timeout branch from 506174a to 75ca24f Compare July 31, 2026 19:49
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
…meout

Signed-off-by: Chien-Chun Hung <2679986+chienchunhung@users.noreply.github.com>
@chienchunhung
chienchunhung force-pushed the codex/nvbug-6487038-kv-transfer-timeout branch from 75ca24f to e0bfe69 Compare July 31, 2026 19:54
@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-1"

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --disable-reuse-test --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-1"

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🧹 Nitpick comments (3)
tests/integration/defs/perf/test_perf_sanity.py (1)

1355-1395: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add deterministic coverage for sentinel handling and mode gating.

Add tests for all sentinels present, sentinel timeout, gen_only, and non-gen_only disaggregated mode. On timeout, assert no metric only when the available logs contain no usable rows; the caller intentionally parses usable rows after a timeout. List each new test in the appropriate test-db or qa file, such as tests/integration/test_lists/qa/llm_perf_multinode.txt.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/integration/defs/perf/test_perf_sanity.py` around lines 1355 - 1395,
Add deterministic tests covering all sentinels present, sentinel timeout,
gen_only mode, and non-gen_only disaggregated mode, using the existing
performance test helpers and mocking filesystem/time as needed. Verify timeout
behavior only reports no metric when available logs contain no usable rows,
while preserving metric parsing when usable rows exist. Register each test in
the appropriate test-db or QA list, including the relevant
llm_perf_multinode.txt entry.

Source: Path instructions

jenkins/scripts/perf/submit.py (1)

77-95: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate pytestCommand line lookup.

_pytest_command_tokens re-implements the same next((line for line in script_prefix_lines if "export pytestCommand=" in line), ...) pattern used later in get_pytest_commands (Line 536-538) and get_test_output_dir (Line 584-586). Extract a shared helper, for example _find_pytest_command_line(script_prefix_lines), and reuse it in all three call sites. This keeps the marker string in one place.

♻️ Proposed refactor
+def _find_pytest_command_line(script_prefix_lines):
+    return next(
+        (line for line in script_prefix_lines if "export pytestCommand=" in line), ""
+    )
+
+
 def _pytest_command_tokens(script_prefix_lines):
-    pytest_command_line = next(
-        (line for line in script_prefix_lines if "export pytestCommand=" in line), ""
-    )
+    pytest_command_line = _find_pytest_command_line(script_prefix_lines)
     if not pytest_command_line:
         return []
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@jenkins/scripts/perf/submit.py` around lines 77 - 95, Extract the repeated
pytestCommand line lookup into a shared helper such as
_find_pytest_command_line(script_prefix_lines), keeping the export pytestCommand
marker in that helper. Update _pytest_command_tokens, get_pytest_commands, and
get_test_output_dir to use the helper while preserving their existing fallback
and parsing behavior.
tests/unittest/scripts/test_perf_submit.py (1)

113-146: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Test coverage summary.

  1. Added test functions: ci_submit_module fixture, test_ci_submit_selects_same_least_duration_shard_as_pytest_split, test_ci_submit_rejects_split_group_disagreement.
  2. These are unit tests under tests/unittest/scripts/, not integration tests under tests/integration/, so listing in tests/integration/test_lists/test-db/ or qa/ does not apply.
  3. Coverage verdict: sufficient for the happy-path least-duration selection and the --group/split_group mismatch guard. The happy-path test validates internal self-consistency of _select_least_duration_group (its output matches its own greedy-heap logic) but does not independently validate against a real pytest --collect-only run with pytest-split installed. Consider one additional test exercising the fallback path in _load_pytest_split_durations where --durations-path points to a missing file and the code falls back to llm_src/tests/integration/defs/<basename>, since that fallback is exercised implicitly here but not asserted directly (only the JSON contents, not the path fallback itself, are checked). Optional test-coverage improvement, not blocking.

As per path instructions, produce a coverage summary for tests/** changes: "Act as a QA engineer reviewing test changes and coverage for TensorRT-LLM. Always produce a test coverage summary, even if no issues are found."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unittest/scripts/test_perf_submit.py` around lines 113 - 146, Add a
focused unit test for the fallback branch in _load_pytest_split_durations,
verifying that a missing --durations-path loads the matching basename from the
local llm_src/tests/integration/defs directory. Keep the existing least-duration
and split-group tests unchanged, and assert the fallback path is actually used
rather than only validating equivalent JSON contents.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/integration/defs/perf/test_perf_sanity.py`:
- Around line 1368-1373: Update the callers of wait_for_gen_log_sentinels(),
including the run_cmd() path and the corresponding logic around the later
referenced block, to check its boolean result before parsing gen_server logs.
Only compute the device-step-time metric when every sentinel exists; otherwise
skip it or mark it unavailable through the existing result-handling path, and do
not consume or parse partial log contents.

---

Nitpick comments:
In `@jenkins/scripts/perf/submit.py`:
- Around line 77-95: Extract the repeated pytestCommand line lookup into a
shared helper such as _find_pytest_command_line(script_prefix_lines), keeping
the export pytestCommand marker in that helper. Update _pytest_command_tokens,
get_pytest_commands, and get_test_output_dir to use the helper while preserving
their existing fallback and parsing behavior.

In `@tests/integration/defs/perf/test_perf_sanity.py`:
- Around line 1355-1395: Add deterministic tests covering all sentinels present,
sentinel timeout, gen_only mode, and non-gen_only disaggregated mode, using the
existing performance test helpers and mocking filesystem/time as needed. Verify
timeout behavior only reports no metric when available logs contain no usable
rows, while preserving metric parsing when usable rows exist. Register each test
in the appropriate test-db or QA list, including the relevant
llm_perf_multinode.txt entry.

In `@tests/unittest/scripts/test_perf_submit.py`:
- Around line 113-146: Add a focused unit test for the fallback branch in
_load_pytest_split_durations, verifying that a missing --durations-path loads
the matching basename from the local llm_src/tests/integration/defs directory.
Keep the existing least-duration and split-group tests unchanged, and assert the
fallback path is actually used rather than only validating equivalent JSON
contents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 4443d3ba-85d4-4fb5-81fa-c7cb4330fa1f

📥 Commits

Reviewing files that changed from the base of the PR and between 506174a and e0bfe69.

📒 Files selected for processing (4)
  • jenkins/scripts/perf/submit.py
  • tests/integration/defs/perf/test_perf_sanity.py
  • tests/integration/test_lists/waives.txt
  • tests/unittest/scripts/test_perf_submit.py
💤 Files with no reviewable changes (1)
  • tests/integration/test_lists/waives.txt

Comment on lines +1368 to +1373
Returns True once all sentinels exist, or False if the dedicated
sentinel timeout is reached first. On False the caller still parses
whatever is on disk: the sentinel is a correctness optimization
against reading a mid-flush log, not a reason to consume the whole-test
timeout and trigger Slurm's kill-on-bad-exit cascade (nvbugs 6487036 /
6487040 / 6487038).

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not parse a log after the sentinel timeout.

wait_for_gen_log_sentinels() returns False when a gen worker can still flush gen_server_{i}.log. run_cmd() discards that result and parses the current file contents. This can report a partial device-step-time metric and produce an incorrect perf-sanity result.

Skip the metric, or mark it unavailable through the existing result path, unless every sentinel exists.

Proposed fix
 if pending_device_step_time:
-    self.wait_for_gen_log_sentinels()
-    for record in pending_device_step_time:
+    if self.wait_for_gen_log_sentinels():
+        for record in pending_device_step_time:
             device_step_time_mean = parse_gen_worker_device_step_time(
                 self.test_output_dir,
                 self.num_gen_servers,
                 start_offsets=record["start_offsets"],
             )
+    else:
+        print_info("Skipping device-step-time parsing because gen logs are not flushed.")

Also applies to: 1620-1639

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/integration/defs/perf/test_perf_sanity.py` around lines 1368 - 1373,
Update the callers of wait_for_gen_log_sentinels(), including the run_cmd() path
and the corresponding logic around the later referenced block, to check its
boolean result before parsing gen_server logs. Only compute the device-step-time
metric when every sentinel exists; otherwise skip it or mark it unavailable
through the existing result-handling path, and do not consume or parse partial
log contents.

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63114 [ run ] triggered by Bot. Commit: e0bfe69 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63115 [ run ] triggered by Bot. Commit: e0bfe69 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63114 [ run ] completed with state ABORTED. Commit: e0bfe69

Link to invocation

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --disable-reuse-test --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-1"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63102 [ run ] completed with state ABORTED. Commit: 506174a

Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63118 [ run ] triggered by Bot. Commit: e0bfe69 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63115 [ run ] completed with state ABORTED. Commit: e0bfe69

Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63118 [ run ] completed with state SUCCESS. Commit: e0bfe69
/LLM/main/L0_MergeRequest_PR pipeline #51208 (Partly Tested) completed with status: 'SUCCESS'

CI Report

Link to invocation

@chienchunhung

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast --disable-reuse-test --stage-list "GB300-20_GPUs-5_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge-3"

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63135 [ run ] triggered by Bot. Commit: e0bfe69 Link to invocation

@chienchunhung chienchunhung changed the title [https://nvbugs/6487038][test] unwaive GB300 Kimi disagg e2e after transceiver fixes [https://nvbugs/6490049][test] Unwaive GB300 Kimi disagg e2e Jul 31, 2026
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #63135 [ run ] completed with state SUCCESS. Commit: e0bfe69
/LLM/main/L0_MergeRequest_PR pipeline #51223 (Partly Tested) completed with status: 'SUCCESS'

CI Report

Link to invocation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants