Summary
develop regressed from 4 to 43 failing tests in the Blackwell (sm100) OSS test suite. Bisecting the five commits merged since the last good run attributes all 39 new failures to exactly two commits:
| Commit |
PR |
New failures |
b950af1 |
#427 — CSA: add fused Compressor forward+backward CuTe-DSL kernels |
+14 |
57dc579 |
#408 — Relicense to Apache-2.0 |
0 |
5235c2b |
#453 — BSA: fix cute-dsl bulk-copy elect gate |
0 |
ad8f8b5 |
#457 — Tune Rubin FP8 K tiling and output staging |
0 |
708ff87 |
#456 — Integrate Rubin wgrad cutedsl kernel |
+25 |
Baseline for the bisect is 20d62d5 (#435), the last commit with a known-good run (2 failures per shard).
Both regressions have the same underlying cause: the new code calls CuTe-DSL APIs that do not exist in the nvidia-cutlass-dsl version the project's own dependency spec resolves to.
1. b950af1 (#427, CSA compressor) — 14 failures
Every one of the 14 fails identically:
E TypeError: exp2() got an unexpected keyword argument 'approx'
python/cudnn/csa/compressor/compressor_sm100_r128.py:130: in _exp_fast
return cute_math.exp2(y, approx=True, ftz=True)
Affected: all of test/python/fe_api/csa/test_CSA_compressor.py —
test_numerics_vs_references (7 params), test_backward_fills_uninitialized_buffers (4 params),
test_backward_grad_ape_zeroing_contract, test_cuda_graph_capture_r128, test_replay_determinism_r128.
cutlass.cute.math.exp2 has signature (a, fastmath=False, *, loc, ip) — there is no approx or ftz parameter.
2. 708ff87 (#456, Rubin wgrad) — 25 failures
24 × ICE during cute.compile:
cutlass.base_dsl.common.DSLRuntimeError: ICE IR Verification Failed
error: 'cute.get_shape' op using value defined outside the region
at python/cudnn/gemm/.../moe_blockscaled_grouped_gemm_wgrad.py:638
c_smem_layout_staged = sm100_utils.make_smem_layout_epi(...)
note: "BlockScaledMoEGroupedGemmWgradKernel" (...:598): required by region isolation constraints
All 24 are the discrete-output wgrad paths:
test_grouped_gemm_wgrad_discrete_compile_execute_{fp4,fp8},
test_grouped_gemm_wgrad_discrete_accumulate_compile_execute_{fp4,fp8},
test_grouped_gemm_wgrad_discrete_wrapper_{fp4,fp8},
test_grouped_gemm_wgrad_dynamic_tokens_compile_execute_{fp4,fp8}[...-discrete]
(each × 3 cluster/tiler combinations).
1 × missing module:
test_rubin_kernel_dispatch.py::test_grouped_gemm_wgrad_rubin_tmem_plan_rejects_invalid_sf_vector
ModuleNotFoundError: No module named 'cutlass.utils.rubin_helpers'
These same 41 tests pass at ad8f8b5 (the immediately preceding commit) and fail at 708ff87.
Root cause: unpinned cutlass-dsl floor
pyproject.toml specifies only a lower bound:
cutedsl = [ "nvidia-cutlass-dsl[cu13]>=4.5.0", ... ]
Neither 4.5.0 nor 4.5.2 provides cutlass.utils.rubin_helpers, and neither accepts approx= on cute.math.exp2 — verified directly:
cutlass-dsl 4.5.2: rubin_helpers -> ModuleNotFoundError exp2 accepts approx= -> False
cutlass-dsl 4.5.0: rubin_helpers -> ModuleNotFoundError exp2 accepts approx= -> False
So develop currently requires a cutlass-dsl newer than its own spec guarantees, and any fresh environment resolving the floor is broken. (Note there are separate oss:rel:cutlass_dsl_4.6 / cutlass_dsl_internal CI variants; the default oss:rel job is the one that is red.)
Suggested fix
Raise the floor (and ideally add an upper bound) on nvidia-cutlass-dsl in pyproject.toml to the minimum version that actually provides rubin_helpers and exp2(approx=), or make the two call sites version-tolerant.
Not caused by the GEMM reorg
For the record, PR #459 (GEMM fusion reorg) is a pure file move and is not implicated: the two failing kernel files are byte-identical across that PR, python/cudnn/csa/ is untouched by it, and the failures reproduce on 708ff87 with no reorg applied.
Pre-existing (not from these commits)
test_DSA_indexer_top_k (2 tests, test_..._compile_execute and test_..._wrapper) fails at every commit including the baseline, with a numerical mismatch (Mismatched elements: 422/705, Greatest absolute difference: inf). Tracked separately from this regression.
Reproduction
Blackwell sm100, cuDNN 9.25, one shared build with only the Python tree swapped per commit so the tree is the sole variable:
pytest test/python/fe_api/csa/test_CSA_compressor.py \
test/python/fe_api/grouped_gemm/test_grouped_gemm_wgrad.py \
test/python/fe_api/test_rubin_kernel_dispatch.py -m L0
| commit |
wgrad+rubin |
CSA |
20d62d5 … ad8f8b5 |
41 passed, 0 failed |
14 failed from b950af1 onward |
708ff87 |
25 failed, 30 passed |
14 failed |
cc @ the authors of #427 and #456.
Summary
developregressed from 4 to 43 failing tests in the Blackwell (sm100) OSS test suite. Bisecting the five commits merged since the last good run attributes all 39 new failures to exactly two commits:b950af157dc5795235c2bad8f8b5708ff87Baseline for the bisect is
20d62d5(#435), the last commit with a known-good run (2 failures per shard).Both regressions have the same underlying cause: the new code calls CuTe-DSL APIs that do not exist in the
nvidia-cutlass-dslversion the project's own dependency spec resolves to.1.
b950af1(#427, CSA compressor) — 14 failuresEvery one of the 14 fails identically:
Affected: all of
test/python/fe_api/csa/test_CSA_compressor.py—test_numerics_vs_references(7 params),test_backward_fills_uninitialized_buffers(4 params),test_backward_grad_ape_zeroing_contract,test_cuda_graph_capture_r128,test_replay_determinism_r128.cutlass.cute.math.exp2has signature(a, fastmath=False, *, loc, ip)— there is noapproxorftzparameter.2.
708ff87(#456, Rubin wgrad) — 25 failures24 × ICE during
cute.compile:All 24 are the discrete-output wgrad paths:
test_grouped_gemm_wgrad_discrete_compile_execute_{fp4,fp8},test_grouped_gemm_wgrad_discrete_accumulate_compile_execute_{fp4,fp8},test_grouped_gemm_wgrad_discrete_wrapper_{fp4,fp8},test_grouped_gemm_wgrad_dynamic_tokens_compile_execute_{fp4,fp8}[...-discrete](each × 3 cluster/tiler combinations).
1 × missing module:
These same 41 tests pass at
ad8f8b5(the immediately preceding commit) and fail at708ff87.Root cause: unpinned cutlass-dsl floor
pyproject.tomlspecifies only a lower bound:Neither
4.5.0nor4.5.2providescutlass.utils.rubin_helpers, and neither acceptsapprox=oncute.math.exp2— verified directly:So
developcurrently requires a cutlass-dsl newer than its own spec guarantees, and any fresh environment resolving the floor is broken. (Note there are separateoss:rel:cutlass_dsl_4.6/cutlass_dsl_internalCI variants; the defaultoss:reljob is the one that is red.)Suggested fix
Raise the floor (and ideally add an upper bound) on
nvidia-cutlass-dslinpyproject.tomlto the minimum version that actually providesrubin_helpersandexp2(approx=), or make the two call sites version-tolerant.Not caused by the GEMM reorg
For the record, PR #459 (GEMM fusion reorg) is a pure file move and is not implicated: the two failing kernel files are byte-identical across that PR,
python/cudnn/csa/is untouched by it, and the failures reproduce on708ff87with no reorg applied.Pre-existing (not from these commits)
test_DSA_indexer_top_k(2 tests,test_..._compile_executeandtest_..._wrapper) fails at every commit including the baseline, with a numerical mismatch (Mismatched elements: 422/705, Greatest absolute difference: inf). Tracked separately from this regression.Reproduction
Blackwell sm100, cuDNN 9.25, one shared build with only the Python tree swapped per commit so the tree is the sole variable:
20d62d5…ad8f8b5b950af1onward708ff87cc @ the authors of #427 and #456.