Skip to content

[#19362][fix] Name the act fusion in the skip reason - #19448

Open
100milliongold wants to merge 3 commits into
NVIDIA:mainfrom
100milliongold:fix/cute-dsl-nvfp4-skip-reason
Open

100milliongold wants to merge 3 commits into
NVIDIA:mainfrom
100milliongold:fix/cute-dsl-nvfp4-skip-reason

Conversation

@100milliongold

@100milliongold 100milliongold commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Addresses the second option in #19362.

Problem

test_cute_dsl_nvfp4 and test_cute_dsl_nvfp4_4gpus skip on anything other than SM 100 or 103 with:

CuTe DSL blockscaling mm supports SM 100 and 103 only

That reads as though CuTe DSL blockscaling matmul as a whole stops at SM 103. It no longer does: #18761 and #18765 added SM107 CuTe DSL dense GEMM and BMM ops, with their own *_rubin test files. What these two tests need and do not have is the NVFP4 GEMM with fused SwiGLU, which is gated separately in cute_dsl_custom_ops.py:

CuteDSL NVFP4 SwiGLU backend requires SM 100 (B200) or SM 103 (B300)
CuteDSL NVFP4 SwiGLU FP4Out requires SM 100 or SM 103

Someone reading the skip on an SM107 run is pointed at the wrong thing.

Change

-            pytest.skip("CuTe DSL blockscaling mm supports SM 100 and 103 only")
+            pytest.skip(
+                "CuTe DSL NVFP4 GEMM+SwiGLU act fusion supports SM 100 and 103 only"
+            )

Two sites, the same string, no behaviour change: the same host states skip, for the same reason, with the reason stated accurately. Both docstrings already describe these tests as "GEMM+SwiGLU fusion for shared experts", so the message now agrees with them.

The message names only the act fusion. An intermediate revision also named the CUTEDSL MoE backend, following the {moe_backend} backend supports SM 100 and 103 only skips elsewhere in this file, but those are test-level gates rather than the backend contract: CuteDslFusedMoE accepts NVFP4 on SM 107 when Rubin support in CuTe DSL is present, so that wording was dropped again. The SM 100/103 gate in these two tests is carried by the act fusion alone.

I kept the message self-describing rather than linking the issue, since the skips in this file reference https://nvbugs/... and not GitHub issue numbers.

Verification

  • grep finds exactly the two occurrences of the old string in the repository; both are changed.
  • yapf --style pyproject.toml -d (v0.43.0, the version pinned in .pre-commit-config.yaml) reports no diff on the file.
  • The file byte-compiles.

What this is not

This is the reporting half of #19362. Porting the NVFP4 SwiGLU and FP4Out act-fusion GEMMs to SM107 is the other option there, and it is not this change: #18761 and #18765 added roughly 4,400 lines of SM107-specific kernels and dispatch between them, so that work belongs with whoever owns those kernels. I have not touched any gate.

Dev Engineer Review

The two NVFP4 skip messages now identify the NVFP4 GEMM+SwiGLU act fusion as the operation limited to SM100 and SM103. The hardware conditions remain unchanged. The file also has import formatting changes and two string literals changed to docstrings; no functional impact from these edits is evident.

QA Engineer Review

The changed file is tests/integration/defs/accuracy/test_llm_api_pytorch.py. The two existing test functions keep their selectors and skip conditions; only their skip messages change. No test-list files changed, and no test execution results were provided. Coverage verdict: needs follow-up.

Per-File QA Perspective

  • tests/integration/defs/accuracy/test_llm_api_pytorch.py: The NVFP4 integration tests cover GEMM+SwiGLU act fusion and retain their SM100/SM103 hardware gate. No test-list changes were made; the supplied list search does not establish whether these specific test functions are listed.

test_cute_dsl_nvfp4 and its 4-GPU variant skip on anything other than SM 100
or 103 with:

    CuTe DSL blockscaling mm supports SM 100 and 103 only

That reads as though CuTe DSL blockscaling matmul as a whole stops at SM 103,
which is no longer where the line is. NVIDIA#18761 and NVIDIA#18765 added SM107 CuTe DSL
dense GEMM and BMM ops. What these two tests need and do not have is the
NVFP4 GEMM with fused SwiGLU, gated separately in cute_dsl_custom_ops.py:

    CuteDSL NVFP4 SwiGLU backend requires SM 100 (B200) or SM 103 (B300)
    CuteDSL NVFP4 SwiGLU FP4Out requires SM 100 or SM 103

Say that instead. The docstrings on both tests already describe them as
"GEMM+SwiGLU fusion for shared experts", so the message now agrees with them.

This is the second of the two options in NVIDIA#19362 and changes no behaviour: the
same host states skip, for the same reason, with the reason stated accurately.
Porting the act-fusion variants to SM107 is the other option and is not this.

Signed-off-by: 김재억 <gadian88@gmail.com>
@coderabbitai

coderabbitai Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: NVIDIA/TensorRT-LLM/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 47787bd9-cd9b-4957-9f5c-4618303705ab

📥 Commits

Reviewing files that changed from the base of the PR and between eb66cfc and abb4b19.

📒 Files selected for processing (1)
  • tests/integration/defs/accuracy/test_llm_api_pytorch.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/integration/defs/accuracy/test_llm_api_pytorch.py

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.


Walkthrough

Both CuTe DSL NVFP4 test skip messages now identify NVFP4 GEMM+SwiGLU activation fusion as the SM100/SM103-only feature. The architecture checks are unchanged.

Changes

NVFP4 skip message clarification

Layer / File(s) Summary
Clarify NVFP4 test skip messages
tests/integration/defs/accuracy/test_llm_api_pytorch.py
The single-GPU and four-GPU test skip messages identify NVFP4 GEMM+SwiGLU activation fusion as the SM100/SM103-only feature. The architecture checks are unchanged.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Other

Suggested reviewers: bowenfu

Merge Risk: ⚪ Minimal · up to abb4b

The tests retain their existing hardware gates and now report a more specific reason when those gates skip them. No merge-blocking risk was identified.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files.
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 fix: updating the skip reason to name the act fusion. It follows the required ticket and type format.
Description check ✅ Passed The description clearly explains the problem, the exact message change, unchanged behavior, scope, and verification steps. It provides sufficient coverage for the repository template.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

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

@100milliongold 100milliongold changed the title fix https://github.com/NVIDIA/TensorRT-LLM/issues/19362: name the act fusion in the skip reason [#19362][fix] Name the act fusion in the skip reason Sep 20, 2026

@brnguyen2 brnguyen2 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approving — the comments below are optional touch-ups, not blockers.

Checked the gates: the act-fusion ops (cute_dsl_custom_ops.py:1778, :2310) are SM 100/103 independently of the dense GEMM/BMM path, so the new wording is the accurate one. Both old occurrences are gone.

One thing the message leaves out: these tests also set moe_config=MoeConfig(backend="CUTEDSL"), which is separately restricted to SM 100/103 (see the {moe_backend} backend supports SM 100 and 103 only skips elsewhere in this file). Both restrictions happen to be the same SM set today, so nothing misleads — but if the MoE backend ever diverges, the skip reason will name the wrong half again. Optional: "CuTe DSL NVFP4 GEMM+SwiGLU act fusion and CUTEDSL MoE backend support SM 100 and 103 only".

(The CodeRabbit summary claiming this diff only reformats imports is wrong; the diff does what the description says.)

@github-actions

Copy link
Copy Markdown

Automatically added "ci: full pre-merge approved" because this PR has satisfied the required GitHub review approvals. Unresolved review conversations and other required checks remain independent merge requirements.

@svc-trtllm-gh-bot svc-trtllm-gh-bot added the Community want to contribute PRs initiated from Community label Sep 21, 2026
@svc-trtllm-gh-bot

Copy link
Copy Markdown
Collaborator

Generated by an AI-assisted triage bot; please correct any mistaken assumptions.

Your updated messages make it clearer why these two tests skip on other GPUs, without suggesting that all CuTe DSL blockscaling matmul is unsupported there. Because the same tests still skip under the same conditions, the demonstrated benefit is limited to clearer reporting.

Based on the assessment above, we're giving this PR lower review priority for now and adding waiting for feedback and stale.

A practical benefit beyond clarifying the skip reason, such as a change that restores test execution or coverage, would warrant reconsideration.

You're welcome to reply, update the PR description, or request maintainer review; a code change is not necessarily required. If there is no further activity for 14 days, this PR will be automatically closed.

Both tests also run with MoeConfig(backend="CUTEDSL"), which is restricted
to SM 100/103 independently of the act-fusion GEMM (see the
"{moe_backend} backend supports SM 100 and 103 only" skips elsewhere in
this file). The two restrictions cover the same SM set today, but if they
ever diverge the skip reason would again name only half of the story.

Name both, as suggested in review.

Signed-off-by: 김재억 <gadian88@gmail.com>
@100milliongold

Copy link
Copy Markdown
Contributor Author

Folded in @brnguyen2's suggestion (eb66cfc): the skip reason now names both restrictions these tests hit, the act-fusion GEMM and the CUTEDSL MoE backend. The description is updated to match.

On the triage assessment: the scope is intentional. This implements the second option @farazkh80 asked for in #19362 ("keep the SM100/103 gate and make the skip reason ... say that the SwiGLU fusion is the missing piece"). The kernel port that would restore SM107 coverage is the other option, and it belongs with the owners of #18761/#18765.

@mzweilz @schetlur-nv @ZhanruiSunCh, could one of you take a look when you have a moment?

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

The previous commit said the CUTEDSL MoE backend supports SM 100 and 103
only. It does not: CuteDslFusedMoE accepts NVFP4 on SM 107 when Rubin
support in CuTe DSL is present ("NVFP4 - SM in {100, 103, 107}" in
fused_moe_cute_dsl.py). The SM 100/103 gate in these two tests is
justified by the NVFP4 GEMM+SwiGLU act fusion alone, which raises on any
other SM.

The "{moe_backend} backend supports SM 100 and 103 only" skips elsewhere
in this file are test-level gates, not the backend contract, so they were
the wrong evidence for naming the backend here.

Restore the wording from the first commit.

Signed-off-by: 김재억 <gadian88@gmail.com>
@100milliongold

Copy link
Copy Markdown
Contributor Author

@brnguyen2 I've taken the MoE-backend half back out of the skip reason in abb4b19; the message again names only the act fusion.

The semantic check above is right. CuteDslFusedMoE accepts NVFP4 on SM 107 when Rubin support in CuTe DSL is present (fused_moe_cute_dsl.py#L828-L840), and that is true at this PR's head as well as on current main. The {moe_backend} backend supports SM 100 and 103 only skips in test_nvfp4 and test_nvfp4_4gpus (L1059, L1279) are test-level gates, not the backend's contract, so they were the wrong evidence for naming the backend here. Naming it would have pointed an SM 107 reader at the wrong thing again, which is what #19362 is about.

The SM 100/103 gate in these two tests is carried by the NVFP4 GEMM+SwiGLU act fusion alone, which raises on any other SM (cute_dsl_custom_ops.py#L1776-L1778). The description is updated to match.

Whether the test-level CUTEDSL gates in test_nvfp4* should open up for SM 107 is a separate question; I haven't touched them.

Checked on the new head: yapf 0.43.0 (--style pyproject.toml -d) reports no diff, the file byte-compiles, and no CUTEDSL MoE backend string remains.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Semantic conflict review

The verdict of record is the Semantic conflict with target branch / PR #19448 commit status on the requested head commit. This summary updates on reply events and may lag between a new request and its reply.

Latest recorded state: No semantic conflict found (best effort) for head abb4b1993f90404f2f10987d42286f90e397f769, target a81da8a5a8380c4ec8c2d3eafabb8cfc55d7ad56, merge base 9855bc8f368f146be27e946f13f02b2d0bb2aa7e (request f7fc8858-36c2-4f93-a7cf-569548d90d91). CodeRabbit analysis.

Best-effort AI judgment for the recorded revisions. PASS, FAIL and INCONCLUSIVE may be incomplete or incorrect. PR authors and reviewers should independently verify the evidence and relevant behavior. This semantic review and its status/workflow are advisory, not required merge checks under current repository rules; other merge requirements still apply. Advisory status does not make a confirmed defect safe to ignore.

Requested (UTC) Head Target Verdict Comment
2026-10-02T10:38:12Z abb4b1993f90 a81da8a5a838 PASS reply
2026-10-02T04:41:06Z abb4b1993f90 8a3c90311ea9 PASS reply
2026-10-01T20:45:36Z abb4b1993f90 80509acfc073 PASS reply
2026-10-01T12:52:18Z abb4b1993f90 ee510fc85d39 PASS reply
2026-10-01T06:56:05Z abb4b1993f90 0d3bbd257d35 PASS reply
2026-09-30T22:37:57Z abb4b1993f90 fc2f8543e039 PASS reply
2026-09-30T16:40:24Z abb4b1993f90 324a51deff2a PASS reply
2026-09-30T08:46:30Z abb4b1993f90 7fe1dd2ba608 PASS reply
2026-09-30T01:16:25Z abb4b1993f90 bdd012579f89 PASS reply
2026-09-29T18:43:46Z abb4b1993f90 bcb288a21105 PASS reply
2026-09-29T10:39:04Z abb4b1993f90 d949656a4f87 PASS reply
2026-09-29T04:42:05Z abb4b1993f90 ae4aa5d6c932 PASS reply
2026-09-28T20:37:15Z abb4b1993f90 7dfacfb583e2 PASS reply
2026-09-28T14:41:05Z abb4b1993f90 0c58480ca680 PASS reply
2026-09-28T07:08:08Z eb66cfcb33d9 f00e9627fa98 FAIL reply

Processed request and reply comments are minimized to reduce timeline noise; they remain expandable for audit.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@trtllm-agent

This comment has been minimized.

@coderabbitai

This comment has been minimized.

@LarryXFly LarryXFly left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

QA review of abb4b19: approved.

The patch changes only the two pytest.skip reason strings. Both full files parse, and their ASTs are identical after normalizing those two string constants. Test selectors, hardware gates, configuration, and assertions are unchanged. The dense NVFP4 GEMM+SwiGLU BF16 and FP4Out ops independently retain their SM100/SM103 gates, so the revised reasons accurately identify the restriction relevant to these shared-expert tests.

Non-blocking wording refinement: adding "dense" or "for shared experts" would distinguish this path from Rubin grouped MoE activation fusion. CUTEDSL MoE should not be described as universally SM100/SM103-only, since its NVFP4 eligibility includes SM107 with Rubin support and other eligibility conditions.

No GPU integration tests were run in this review. Static verification is sufficient for this diagnostic-only change; this approval does not establish numerical-test results or additional SM107 coverage. Required repository CI checks still apply.

This branch has not been deployed

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants