Use cuDNN for row-scaled NVFP4 grouped GEMM#3042
Conversation
|
need to rebase and refactor according to recent cute dsl integration |
Signed-off-by: Ziang Li <ziangli@umich.edu>
Signed-off-by: Ziang Li <ziangli@umich.edu>
Signed-off-by: Ziang Li <ziangli@umich.edu>
a0032dd to
96ae951
Compare
|
Rebase/refactor milestone complete.
The draft remains blocked on the cuDNN Frontend side. NVIDIA/cudnn-frontend#251 provides |
Signed-off-by: Ziang Li <ziangli@umich.edu>
|
Full PR diff audit is complete in
Validation on the exact committed sources:
The temporary installed-package scheduler typing patch used for B200 validation was restored afterward. The TE branch still contains no workaround and explicitly depends on the cuDNN Frontend row-scale feature from NVIDIA/cudnn-frontend#251 plus the scheduler correction. |
Summary
general_grouped_gemmforward calls directly through cuDNN Frontend's grouped GEMM quant kernelalpha_tensorand the per-row activation factors inrow_scale_tensor; cuDNN combines them in the accumulator epilogueRequired cuDNN Frontend dependency
This PR explicitly requires the row-scale grouped GEMM feature delivered by NVIDIA/cudnn-frontend#251: a
cudnn.grouped_gemm_quant_wrapper_sm100(...)API that acceptsrow_scale_tensor.The API is present in cuDNN Frontend v1.26.0. Validation with its pinned CUTLASS DSL 4.5.x also exposed missing explicit
Int32conversions in the cuDNN Frontend MoE scheduler. The TE tests pass with those cuDNN-side conversions applied temporarily. This PR intentionally carries neither a scheduler workaround nor a fallback, so it remains draft until the dependency used by TE contains both the row-scale API and the scheduler correction.Motivation
This integration supports the row-scaled NVFP4 work from #2931.
Validation
python3 -m py_compileon the three changed Python filesgit diff --check upstream/mainpre-commit run --all-filesgeneral_gemm, discrete NVFP4 pointer/scale packing, and MXFP8 cuDNN grouped GEMM)[17, 33, 250]passed throughFp8Padding -> GroupedLinear -> Fp8Unpadding, with one cuDNN call and exact padded offsetspylint --errors-onlyon both changed production modules: passed