Skip to content

[Feature]: Add SM120 (RTX 6000/5000 Blackwell) support for native NVFP4 MoE kernels #31085

Description

@Ramalama2

🚀 The feature, motivation and pitch

Summary

SM120 (RTX 6000 Pro Blackwell, compute capability 12.0) is not recognized in the MXFP4 backend selection logic, causing fallback to Marlin instead of using native NVFP4 kernels.

Environment

  • vLLM version: 0.13.0
  • GPU: NVIDIA RTX 6000 Pro (Blackwell, SM120a)
  • Compute Capability: (12, 0)
  • Model: gpt-oss-120b (MXFP4 quantization)

Current Behavior

Startup log shows:
WARNING [marlin_utils_fp4.py:226] Your GPU does not have native support for FP4
computation but FP4 quantization is being used. Weight-only FP4 compression will
be used leveraging the Marlin kernel. This may degrade performance for compute-heavy workloads.

And:
INFO [mxfp4.py:161] Using Marlin backend

Root Cause

The MXFP4 backend selection in vllm/model_executor/layers/quantization/mxfp4.py only checks for SM100 family:

# Line 121-126
elif (
    current_platform.is_device_capability_family(100)  # Only matches SM10x
    and has_flashinfer()
    ...

SM120 ((12, 0)) doesn't match is_device_capability_family(100) since it's a different major version.

Similarly, the Triton backend check excludes SM120:
Line 96: and (9, 0) <= current_platform.get_device_capability() < (11, 0)

Evidence of SM120 Kernel Support

The NVFP4 SM120 kernels ARE compiled and available in vLLM 0.13.0:
-> csrc/quantization/fp4/nvfp4_scaled_mm_sm120_kernels.cu
-> csrc/quantization/fp4/nvfp4_blockwise_moe_kernel.cu (with ENABLE_NVFP4_SM120)
-> Commit e502098 - "[Kernel] Add NVFP4 MoE CUTLASS support for SM120"
-> Commit c0dfc89 - "SM120 / NVFP4: add device guard and runtime SM dispatch"

The support check also returns True:

>>> from vllm._custom_ops import cutlass_scaled_mm_supports_fp4
>>> cutlass_scaled_mm_supports_fp4(120)
True

Expected Behavior

SM120 should use native NVFP4 kernels similar to SM100, not fall back to Marlin.

Suggested Fix

Add SM120 family detection to get_mxfp4_backend() in mxfp4.py:

elif (
    (current_platform.is_device_capability_family(100) or
     current_platform.is_device_capability_family(120))
    and has_flashinfer()
    ...

Or create dedicated SM120 backend paths if the kernel interfaces differ.

Affected Hardware

  • NVIDIA RTX 6000 Pro (Blackwell) - SM120
  • NVIDIA RTX 5090/5080 (Blackwell) - SM120
  • Other consumer/pro Blackwell cards using SM120/SM120a

Related Commits

  • e502098 - [Kernel] Add NVFP4 MoE CUTLASS support for SM120
  • c0dfc89 - SM120 / NVFP4: add device guard and runtime SM dispatch
  • a00d889 - [EPLB] Support EPLB w/ NVFP4

Alternatives

No response

Additional context

No response

Before submitting a new issue...

  • Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature requestNew feature or requestunstaleRecieved activity after being labelled stale

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions