vllm.utils.flashinfer ¶
Compatibility wrapper for FlashInfer API changes.
Users of vLLM should always import only these wrappers.
Functions:
-
can_use_trtllm_attention–Check if the current configuration supports TRTLLM attention.
-
has_flashinfer–Return
Trueif flashinfer-python package is available. -
has_flashinfer_b12x_gemm–Return True if FlashInfer b12x FP4 GEMM backend is available (SM120+).
-
has_flashinfer_b12x_moe–Return
Trueif FlashInfer CuteDSL SM12x fused MoE is available. -
has_flashinfer_bf16_fp4–Return
Trueif FlashInfer's CuTe-DSL W4A16 GEMM is available. -
has_flashinfer_bf16_gemm–Return whether FlashInfer exposes the BF16 dense GEMM API.
-
has_flashinfer_comm–Return
Trueif FlashInfer comm module is available. -
has_flashinfer_cutedsl_grouped_gemm_nt_masked–Return
Trueif FlashInfer CUTLASS fused MoE is available. -
has_flashinfer_cutedsl_moe_nvfp4–Return
Trueif FlashInfer cute_dsl_fused_moe_nvfp4 is available. -
has_flashinfer_cutlass_fused_moe–Return
Trueif FlashInfer CUTLASS fused MoE is available. -
has_flashinfer_fp8_blockscale_gemm–Return
Trueif FlashInfer block-scale FP8 GEMM is available. -
has_flashinfer_moe–Return
Trueif FlashInfer MoE module is available. -
has_flashinfer_nvlink_one_sided–Return
Trueif FlashInfer trtllm_moe_alltoall module is available. -
has_flashinfer_nvlink_two_sided–Return
Trueif FlashInfer mnnvl all2all is available. -
has_nvidia_artifactory–Return
Trueif NVIDIA's artifactory is accessible. -
is_flashinfer_bf16_gemm_supported–Return whether an exact FlashInfer BF16 backend is available.
-
is_flashinfer_cudnn_fp8_prefill_attn_supported–Check if FP8 ViT attention is supported on this platform.
-
is_flashinfer_cutedsl_bf16_gemm_supported–Return whether the CuTeDSL BF16 dense GEMM backend is available.
-
is_flashinfer_fp8_blockscale_gemm_supported–Return
Trueif FlashInfer block-scale FP8 GEMM is supported. -
supports_trtllm_attention–Return whether TRTLLM attention is available on the current platform
-
use_trtllm_attention–Return
Trueif TRTLLM attention is used.
_flashinfer_concat_mla_k(k, k_nope, k_pe) ¶
Custom op wrapper for flashinfer's concat_mla_k.
This is an in-place operation that concatenates k_nope and k_pe into k.
The kernel is optimized for DeepSeek V3 dimensions: - num_heads=128 - nope_dim=128 - rope_dim=64
Key optimizations: - Warp-based processing with software pipelining - Vectorized memory access (int2 for nope, int for rope) - L2 prefetching for next row while processing current - Register reuse for rope values across all heads
Parameters:
-
(k¶Tensor) –Output tensor, shape [num_tokens, num_heads, nope_dim + rope_dim]. Modified in-place.
-
(k_nope¶Tensor) –The nope part of k, shape [num_tokens, num_heads, nope_dim].
-
(k_pe¶Tensor) –The rope part of k (shared), shape [num_tokens, 1, rope_dim]. This is broadcast to all heads.
Source code in vllm/utils/flashinfer.py
_get_submodule(module_name) ¶
Safely import a submodule and return it, or None if not available.
_lazy_import_wrapper(module_name, attr_name, fallback_fn=_missing) ¶
Create a lazy import wrapper for a specific function.
Source code in vllm/utils/flashinfer.py
_missing(*_, **__) ¶
Placeholder for unavailable FlashInfer backend.
Source code in vllm/utils/flashinfer.py
can_use_trtllm_attention(num_qo_heads, num_kv_heads, is_prefill=False) ¶
Check if the current configuration supports TRTLLM attention.
Source code in vllm/utils/flashinfer.py
flashinfer_mm_mxfp8(a, b, block_scale_a, block_scale_b, out_dtype, backend='cutlass') ¶
MXFP8 MM helper - mirrors flashinfer_scaled_fp4_mm API.
Takes non-transposed weights and handles transpose internally.
CRITICAL: mm_mxfp8 CUTLASS kernel requires SWIZZLED 1D scales for optimal performance and accuracy. Both input and weight scales should be in swizzled format from FlashInfer's mxfp8_quantize(is_sf_swizzled_layout=True).
Source code in vllm/utils/flashinfer.py
force_use_trtllm_attention() ¶
This function should only be called during initialization stage when vllm config is set. Return None if --attention-config.use_trtllm_attention is not set, return True if TRTLLM attention is forced to be used, return False if TRTLLM attention is forced to be not used.
Source code in vllm/utils/flashinfer.py
has_flashinfer() cached ¶
Return True if flashinfer-python package is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_b12x_gemm() cached ¶
Return True if FlashInfer b12x FP4 GEMM backend is available (SM120+).
Source code in vllm/utils/flashinfer.py
has_flashinfer_b12x_moe() cached ¶
Return True if FlashInfer CuteDSL SM12x fused MoE is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_bf16_fp4() cached ¶
Return True if FlashInfer's CuTe-DSL W4A16 GEMM is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_bf16_gemm() cached ¶
Return whether FlashInfer exposes the BF16 dense GEMM API.
Source code in vllm/utils/flashinfer.py
has_flashinfer_comm() cached ¶
Return True if FlashInfer comm module is available.
has_flashinfer_cubin() cached ¶
Return True if flashinfer-cubin package is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_cutedsl() cached ¶
Return True if FlashInfer cutedsl module is available.
has_flashinfer_cutedsl_grouped_gemm_nt_masked() cached ¶
Return True if FlashInfer CUTLASS fused MoE is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_cutedsl_moe_nvfp4() cached ¶
Return True if FlashInfer cute_dsl_fused_moe_nvfp4 is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_cutlass_fused_moe() cached ¶
Return True if FlashInfer CUTLASS fused MoE is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_fp8_blockscale_gemm() cached ¶
Return True if FlashInfer block-scale FP8 GEMM is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_moe() cached ¶
Return True if FlashInfer MoE module is available.
has_flashinfer_nvlink_one_sided() cached ¶
Return True if FlashInfer trtllm_moe_alltoall module is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_nvlink_two_sided() cached ¶
Return True if FlashInfer mnnvl all2all is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_sm90_nope_mla() cached ¶
FlashInfer SM90 NoPE MLA (FP8 KV with in-kernel dequant, kpe=0).
Feature-detected via the ckv_scale_arr run() kwarg introduced with the SM90 NoPE support (FlashInfer >= 0.6.18), so dev builds carry the gate without a version parse.
Source code in vllm/utils/flashinfer.py
has_flashinfer_sparse_mla_sm120() cached ¶
Return True if FlashInfer sparse MLA decode support is available.
Source code in vllm/utils/flashinfer.py
has_flashinfer_sparse_mla_sm120_config(num_q_heads, top_k) cached ¶
Return whether FlashInfer ships an SM120 DSV4 decode specialization.
The public sparse MLA API predates some DSV4 shapes, so checking only that the callable exists can select a package that later aborts or rejects a valid vLLM configuration. Inspect FlashInfer's dispatch table until it exposes a public capability query.
Source code in vllm/utils/flashinfer.py
has_flashinfer_trtllm_fused_moe() cached ¶
Return True if FlashInfer TRTLLM fused MoE is available.
Source code in vllm/utils/flashinfer.py
has_nvidia_artifactory() cached ¶
Return True if NVIDIA's artifactory is accessible.
This checks connectivity to the kernel inference library artifactory which is required for downloading certain cubin kernels like TRTLLM FHMA.
Source code in vllm/utils/flashinfer.py
is_flashinfer_bf16_gemm_supported(backend, compute_capability=None) cached ¶
Return whether an exact FlashInfer BF16 backend is available.
Source code in vllm/utils/flashinfer.py
is_flashinfer_cudnn_fp8_prefill_attn_supported() cached ¶
Check if FP8 ViT attention is supported on this platform.
Requires Blackwell (SM 100) or newer, the FlashInfer cuDNN backend, and cuDNN >= 9.17.1.
cuDNN's FP8 SDPA forward path with bf16/fp16 output (used by MMEncoderAttention._forward_flashinfer) gates internally on prop.major >= 10; on Hopper it raises a misleading cudnnGraphNotSupportedError: ... cuDNN version 9.13.0 and newer even when the installed cuDNN is new enough. See PR #38065 for the original Blackwell-only design intent.
Source code in vllm/utils/flashinfer.py
is_flashinfer_cutedsl_bf16_gemm_supported() cached ¶
Return whether the CuTeDSL BF16 dense GEMM backend is available.
Source code in vllm/utils/flashinfer.py
is_flashinfer_fp8_blockscale_gemm_supported() cached ¶
Return True if FlashInfer block-scale FP8 GEMM is supported.
Source code in vllm/utils/flashinfer.py
pin_host_range_buf(length) ¶
Pin flashinfer's cached host-side arange buffer covering length.
flashinfer's decode plan() builds its host qo_indptr from the cached _get_range_buf entry and copies it to the GPU with non_blocking=True on every call; the cache entry is unpinned, so the copy silently blocks the host. Replace the entry with a pinned copy so the copies stay async.
Source code in vllm/utils/flashinfer.py
supports_trtllm_attention(is_prefill=False) cached ¶
Return whether TRTLLM attention is available on the current platform for the given attention phase.
SM90 (Hopper) and SM12x support the XQA decode kernel but not TRTLLM prefill. SM100+ supports TRTLLM for both phases. All others are unsupported.
Source code in vllm/utils/flashinfer.py
use_trtllm_attention(num_qo_heads, num_kv_heads, num_tokens, max_seq_len, dcp_world_size, kv_cache_dtype, q_dtype, is_prefill, force_use_trtllm=None, has_sinks=False, has_spec=False) ¶
Return True if TRTLLM attention is used.
Source code in vllm/utils/flashinfer.py
583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 | |