From dbf77646a3d394c334739c1975d350ce25656a2f Mon Sep 17 00:00:00 2001 From: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> Date: Fri, 31 Jul 2026 10:59:52 -0700 Subject: [PATCH] [nvbugs/6525059][fix] Drop broken tileN=8 tactic from FP8 block-scale MoE The TRTLLM-Gen FP8 block-scale MoE picks tile_tokens_dim=8 whenever num_tokens*top_k/local_num_experts <= 8, i.e. for warmup and tiny decode batches. On sm100f/sm103 every DeepSeek-FP8 GEMM2 cubin at that tile (bmm_Bfloat16_E4m3E4m3_Fp32_t128x8x128{,u2}_..._dsFp8_{schedS,schPd4x2x2x3}_bN_...) faults with cudaErrorIllegalAddress in its TMA-OOB epilogue store, so the warmup forward of Qwen3-30B-A3B-FP8 dies. Both the Static and the Persistent variant fault, so the tile size is the discriminator rather than a single bad cubin. Remove 8 from the runner's supported tile list. This covers the autotuner tactic list and the tileN == -1 fallback (which clamps on front()) in one place, and avoids ever constructing the tileN=8 runner -- filtering the cubins in TrtllmGenBatchedGemmRunner::skipQuirks instead would leave that runner with no passing config and throw during construction. FP8 block-scale MoE stays enabled; small batches now run at tileN=16. Unwaive the GB200/GB300 TestQwen3_30B_A3B::test_dummy_load_format entries. Signed-off-by: trtllm-agent <296075020+trtllm-agent@users.noreply.github.com> --- cpp/tensorrt_llm/thop/fp8BlockScaleMoe.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cpp/tensorrt_llm/thop/fp8BlockScaleMoe.cpp b/cpp/tensorrt_llm/thop/fp8BlockScaleMoe.cpp index 9f96152d437c..3fbb9503a2ff 100644 --- a/cpp/tensorrt_llm/thop/fp8BlockScaleMoe.cpp +++ b/cpp/tensorrt_llm/thop/fp8BlockScaleMoe.cpp @@ -417,7 +417,13 @@ class FP8BlockScaleMoeRunner : public torch::CustomClassHolder public: explicit FP8BlockScaleMoeRunner() - : mSupportedTileN{8, 16, 32, 64, 128} + // tileN=8 is excluded: every DeepSeek-FP8 GEMM2 cubin at that tile faults with + // cudaErrorIllegalAddress in its epilogue store on sm100f/sm103, so the tile size is + // broken rather than a single cubin (https://nvbugs/6525059). Dropping it here rather + // than in TrtllmGenBatchedGemmRunner::skipQuirks both raises the fallback clamp floor + // below and avoids constructing a tileN=8 runner, which would throw on an empty + // passing-config list. + : mSupportedTileN{16, 32, 64, 128} { for (int tileN : mSupportedTileN) {