Skip to content

[None][test] Add per-cluster GPU-bucketed QA functional test-db YAMLs#16825

Open
jieli-matrix wants to merge 3 commits into
NVIDIA:mainfrom
jieli-matrix:user/lijie/qa-testdb-test-list
Open

[None][test] Add per-cluster GPU-bucketed QA functional test-db YAMLs#16825
jieli-matrix wants to merge 3 commits into
NVIDIA:mainfrom
jieli-matrix:user/lijie/qa-testdb-test-list

Conversation

@jieli-matrix

@jieli-matrix jieli-matrix commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

What

Adds per-cluster QA functional test-db YAMLs under tests/integration/test_lists/qa/test-db/ — qa_{h100,b200,gb200,b300,gb300}.yml — that bucket llm_function_core.txt by GPU count, mirroring the L0 test-db condition/ranges/wildcards schema. Each condition block is one system_gpu_count bucket, so a follow-up pipeline change can request right-sized SLURM allocations instead of feeding one flat list into whole-node jobs (where a 1-GPU test still grabs a full node).

Why

QA feeds one flat ~955-test list into jobs that allocate a whole node and shard only by test count. Bucketing by GPU count lets the pipeline size allocations to actual need. This PR delivers the checked-in lists; pipeline consumption is a separate change (qa-testdb-pipeline-wiring).

Commits — reviewable skip progression

The three commits peel off, one at a time, the tests the SLURM pipeline already drops at run time, so each removal's effect on the per-machine list is a clean isolated diff:

Commit h100 b200 gb200 b300 gb300
1. baseline (no removal) 955 955 955 955 955
2. L0-covered 639 710 856 894 915
3. arch-incompatible 338 632 788 809 826
  • L0 exclusion — mirrors excludeL0Tests: drops the union of node ids in each cluster's L0 contexts (e.g. H100 → l0_h100 + l0_dgx_h100).
  • Arch exclusion — SM-based markers (skip_pre_blackwell, skip_no_hopper, …) plus the few device-string / unconditional @pytest.mark.skip cases, evaluated against each cluster's compute capability.
  • Kept in the list: waived and memory-gated (skip_less_device_memory) tests stay and surface as SKIPPED with a reason at run time. NVLS / feature-probe markers can't be resolved statically and are left in place.

GPU count for each remaining test is resolved statically from skip_less_device / skip_less_mpi_world_size markers, tp/pp/cp params, and each test's get_device_count() skip guard, rounded up to {1,2,4,8,16}.

Dev Engineer Review

  • Added five per-cluster QA test-db YAMLs: qa_h100.yml, qa_b200.yml, qa_gb200.yml, qa_b300.yml, and qa_gb300.yml.
  • Each file defines Ubuntu/GPU wildcard matching and GPU-count buckets for 1, 2, 4, and 8 GPUs.
  • Lists are statically GPU-sized and retain runtime-handled memory-gated, waived, NVLS, and feature-probe tests.
  • No code or public API changes. YAML-only scope is consistent with the stated objective.
  • No duplicate list entries were identified in the reviewed files.

QA Engineer Review

  • Modified five files under tests/integration/test_lists/qa/test-db/.
  • Added GPU-count-specific llm_function_core test selections for H100, B200, GB200, B300, and GB300 clusters.
  • Tests covered by cluster-specific L0 contexts, incompatible architectures/devices, and unconditional skips were excluded; runtime-dependent tests remain.
  • Verdict: needs follow-up — CBTS coverage data was not provided.

Add per-cluster QA functional test-db YAMLs
(qa_{h100,b200,gb200,b300,gb300}.yml) that bucket llm_function_core.txt by
GPU count, mirroring the L0 test-db condition/ranges/wildcards schema, so a
follow-up pipeline change can request right-sized SLURM allocations instead
of feeding one flat list into whole-node jobs. Each condition block is one
GPU-count bucket (ranges.system_gpu_count).

This first commit is the BASELINE: every core test is bucketed per cluster
with NO skip removal applied -- L0-covered, arch/device/unconditional,
memory-gated and waived tests are all present. The next two commits remove
the tests the SLURM pipeline already drops at run time (L0-covered, then
arch-incompatible), so each removal's effect on the per-machine list is
reviewable in isolation. Waived and memory-gated tests are never removed;
they stay in the list and surface as SKIPPED with a reason at run time.

Signed-off-by: Jie Li <lijie@nvidia.com>
Regenerate the per-cluster QA test-db YAMLs with the L0 removal applied.
The SLURM pipeline's excludeL0Tests renders each cluster's L0 contexts
(e.g. H100 -> l0_h100 + l0_dgx_h100) with an empty match -- the entire L0
context files -- and subtracts them from the QA list, so QA never re-runs
on a machine what L0 already covers there. The union of node ids in those
L0 files is dropped.

The diff from the baseline commit shows exactly which tests each cluster
stops running because L0 covers them there (h100 315, b200 240, gb200 97,
b300 56, gb300 39). Arch/device/unconditional skips are still KEPT in this
commit; the next commit removes them.

Signed-off-by: Jie Li <lijie@nvidia.com>
Regenerate the per-cluster QA test-db YAMLs with the arch removal applied
(the committed final state). SM-based arch markers (skip_pre_blackwell,
skip_post_blackwell, skip_no_hopper, skip_no_sm120, ...), including
per-pytest.param marks, are evaluated against each cluster's compute
capability (h100=90, b200/gb200=100, b300/gb300=103) and tests that would
skip are dropped, along with the handful of device-string
(skip_device_not_contain / skip_device_contain_gb200) and unconditional
@pytest.mark.skip cases decided by the same static pass. So the YAML shows
the real per-machine set instead of deferring to a runtime skip.

The diff from the previous commit shows the arch/device/unconditional drops
per cluster (h100 302, b200 78, gb200 68, b300 85, gb300 85). Memory-gated
(skip_less_device_memory) and waived tests are intentionally KEPT: they vary
by HBM or carry an nvbug reason and stay visible as SKIPPED at run time.
NVLS / feature-probe markers can't be resolved statically and are also left
in place. This matches trt_jenkins runtime behavior.

Signed-off-by: Jie Li <lijie@nvidia.com>
@jieli-matrix
jieli-matrix requested a review from a team as a code owner July 24, 2026 04:21
@jieli-matrix jieli-matrix self-assigned this Jul 24, 2026
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Adds GPU- and GPU-count-specific QA test selection matrices for B200, B300, GB200, GB300, and H100 systems. Each configuration targets Ubuntu hosts and defines suites for 1, 2, 4, and 8 GPUs.

Changes

GPU-specific QA test matrices

Layer / File(s) Summary
B200 GPU-count matrix
tests/integration/test_lists/qa/test-db/qa_b200.yml
Adds B200 test selections for 1-, 2-, 4-, and 8-GPU Ubuntu systems, including accuracy, disaggregated serving, API, scheduling, and end-to-end tests.
B300 GPU-count matrix
tests/integration/test_lists/qa/test-db/qa_b300.yml
Adds B300 test selections for 1-, 2-, 4-, and 8-GPU Ubuntu systems, including multimodal, routing, scheduling, distributed serving, and end-to-end tests.
GB200 GPU-count matrix
tests/integration/test_lists/qa/test-db/qa_gb200.yml
Adds GB200 test selections for 1-, 2-, 4-, and 8-GPU Ubuntu systems, including API, encoding, disaggregated, block-scale, and end-to-end tests.
GB300 GPU-count matrix
tests/integration/test_lists/qa/test-db/qa_gb300.yml
Adds GB300 test selections for 1-, 2-, 4-, and 8-GPU Ubuntu systems, including accuracy, multimodal, disaggregated, parallelism, and end-to-end tests.
H100 GPU-count matrix
tests/integration/test_lists/qa/test-db/qa_h100.yml
Adds H100 test selections for 1-, 2-, 4-, and 8-GPU Ubuntu systems, including accuracy, serving, routing, disaggregation, and end-to-end tests.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested reviewers: stanleysun639, xinhe-nv

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and clearly summarizes the main change: adding per-cluster GPU-bucketed QA test-db YAMLs.
Description check ✅ Passed The description covers what changed and why, and adds rollout context, but omits the template's Test Coverage and PR Checklist sections.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@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

🤖 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/test_lists/qa/test-db/qa_b200.yml`:
- Around line 8-11: Update wildcards.gpu in
tests/integration/test_lists/qa/test-db/qa_b200.yml lines 8-11 to match B200
GPUs without also matching GB200, and update the corresponding wildcards.gpu
entry in tests/integration/test_lists/qa/test-db/qa_b300.yml lines 8-11 to match
B300 GPUs without matching GB300; preserve the existing Linux distribution
wildcard.
🪄 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: e82bef84-48fd-46f6-84e1-f0dcf2a39fd6

📥 Commits

Reviewing files that changed from the base of the PR and between 58b9d15 and ee05508.

📒 Files selected for processing (5)
  • tests/integration/test_lists/qa/test-db/qa_b200.yml
  • tests/integration/test_lists/qa/test-db/qa_b300.yml
  • tests/integration/test_lists/qa/test-db/qa_gb200.yml
  • tests/integration/test_lists/qa/test-db/qa_gb300.yml
  • tests/integration/test_lists/qa/test-db/qa_h100.yml

Comment on lines +8 to +11
wildcards:
gpu:
- '*b200*'
linux_distribution_name: ubuntu*

@coderabbitai coderabbitai Bot Jul 24, 2026

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find how the `gpu` mako value is produced from stage names and what literals are used.
rg -nP -C3 '\bgpu\s*=\s*' jenkins/ | rg -i 'b200|b300|gb200|gb300' || true
# List gpu wildcard usage across existing test-db to see the established convention.
fd -e yml -e yaml . tests/integration/test_lists | xargs rg -nP "gpu:" -A2 | rg -i 'b200|b300|h100' | head -50

Repository: NVIDIA/TensorRT-LLM

Length of output: 4899


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== relevant list files =="
git ls-files 'tests/integration/test_lists/qa/test-db/qa_b200.yml' \
             'tests/integration/test_lists/qa/test-db/qa_b300.yml' \
             'tests/integration/test_lists/test-db/*gb300*' \
             'tests/integration/test_lists/test-db/*b200*' \
             'tests/integration/test_lists/test-db/*b300*'

echo
echo "== selector/search code for gpu wildcards =="
rg -n --hidden -S "fnmatch|wildcards\.gpu|gpu:" tests jenkins .github -g '!**/node_modules/**' || true

echo
echo "== locate stage-name production references =="
rg -n --hidden -S "gb200|gb300|b200|b300|gpu.*stage|stage.*gpu|mako" jenkins tests .github || true

Repository: NVIDIA/TensorRT-LLM

Length of output: 50376


Tighten the gpu globs to exclude GB200/GB300. wildcards.gpu is matched with case-insensitive fnmatch against the stage-derived mako.gpu, so *b200* also catches gb200 and *b300* catches gb300.

  • tests/integration/test_lists/qa/test-db/qa_b200.yml#L8-L11
  • tests/integration/test_lists/qa/test-db/qa_b300.yml#L8-L11
📍 Affects 2 files
  • tests/integration/test_lists/qa/test-db/qa_b200.yml#L8-L11 (this comment)
  • tests/integration/test_lists/qa/test-db/qa_b300.yml#L8-L11
🤖 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/test_lists/qa/test-db/qa_b200.yml` around lines 8 - 11,
Update wildcards.gpu in tests/integration/test_lists/qa/test-db/qa_b200.yml
lines 8-11 to match B200 GPUs without also matching GB200, and update the
corresponding wildcards.gpu entry in
tests/integration/test_lists/qa/test-db/qa_b300.yml lines 8-11 to match B300
GPUs without matching GB300; preserve the existing Linux distribution wildcard.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

good point, so how to fix?

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.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== QA selector implementation and wildcard semantics =="
rg -n -C 5 -i 'fnmatch|wildcards|mako\.gpu|system_gpu_count' tests jenkins .github \
  -g '!**/node_modules/**' | head -400 || true

echo
echo "== B200/B300/GB200/GB300 stage and GPU-value references =="
rg -n -i -C 4 'gb200|gb300|b200|b300' jenkins tests .github \
  -g '!tests/integration/test_lists/qa/test-db/qa_b200.yml' \
  -g '!tests/integration/test_lists/qa/test-db/qa_b300.yml' | head -500 || true

echo
echo "== Existing GPU wildcard conventions =="
fd -e yml -e yaml . tests/integration/test_lists \
  --exec rg -n -i -C 2 'gpu:|b200|b300|gb200|gb300' {} \; | head -400 || true

Length of output: 100373


@jieli-matrix, replace the broad substring globs with the exact stage-derived GPU values. The matcher treats entries under wildcards.gpu as OR patterns, so list both the standard and DGX B-series names:

# qa_b200.yml — apply in each of its 1/2/4/8-GPU condition blocks
wildcards:
  gpu:
  - b200
  - dgx_b200
  linux_distribution_name: ubuntu*
# qa_b300.yml — apply in each of its 1/2/4/8-GPU condition blocks
wildcards:
  gpu:
  - b300
  - dgx_b300
  linux_distribution_name: ubuntu*

This is safer than attempting a negative glob: the stage parser produces values such as dgx_b200, b300, dgx_b300, gb200, and gb300; exact patterns retain B200/B300 coverage and no longer select GB200/GB300.

Test coverage summary: this PR changes QA test-list data only. Update all four condition blocks in each affected YAML consistently; no test-function change is needed. Coverage verdict: needs follow-up, since no CBTS coverage report was available to verify the resulting pipeline selection.

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.

1 participant