Skip to content

vllm.model_executor.layers.hpc.gated_mla

Enablement gate for the HPC fused gated-MLA GEMM.

hpc.gated_mla_gemm fuses the MLA output gating -- the gate projection, the sigmoid and the elementwise product -- into a single kernel launch, replacing the eager attn_out * sigmoid(hidden_states @ weight.T) sequence.

Kernel constraints
  • Requires VLLM_ENABLE_HPC_OPS=1
  • Requires the hpc package (.so) built for the current arch
  • Only sm100 / sm103 (compute capability 100, 103)
  • All three operands must be bfloat16 and contiguous
  • The gate width must be a multiple of 256
  • Only elementwise gating (headwise has no fused form)

Functions:

hpc_gated_mla_gemm(x, weight, atten_output)

Fused atten_output * sigmoid(x @ weight.T).

Parameters:

  • x

    (Tensor) –

    [m, k] bfloat16, contiguous.

  • weight

    (Tensor) –

    [n, k] bfloat16, contiguous and row-major (the kernel transposes it). n must be a multiple of 256.

  • atten_output

    (Tensor) –

    [m, n] bfloat16, contiguous.

Returns:

Source code in vllm/model_executor/layers/hpc/gated_mla.py
def hpc_gated_mla_gemm(
    x: torch.Tensor,
    weight: torch.Tensor,
    atten_output: torch.Tensor,
) -> torch.Tensor:
    """Fused ``atten_output * sigmoid(x @ weight.T)``.

    Args:
        x: ``[m, k]`` bfloat16, contiguous.
        weight: ``[n, k]`` bfloat16, contiguous and row-major (the kernel
            transposes it). ``n`` must be a multiple of 256.
        atten_output: ``[m, n]`` bfloat16, contiguous.

    Returns:
        ``[m, n]`` bfloat16.
    """
    from hpc.gemm import gated_mla_gemm

    return gated_mla_gemm(x, weight, atten_output)

hpc_gated_mla_supported(gating_type, attn_output_gate)

Gate for running the MLA output gating through hpc.gated_mla_gemm.

Source code in vllm/model_executor/layers/hpc/gated_mla.py
def hpc_gated_mla_supported(
    gating_type: str | None, attn_output_gate: torch.nn.Module | None
) -> bool:
    """Gate for running the MLA output gating through hpc.gated_mla_gemm."""
    if not envs.VLLM_ENABLE_HPC_OPS:
        return False

    if attn_output_gate is None:
        return False

    if not has_hpc():
        logger.warning_once(
            "HPC gated MLA disabled: 'hpc' package is not installed. "
            "Please install the HPC library (.so) to enable the fused kernel."
        )
        return False

    from vllm.platforms import current_platform

    if not current_platform.is_cuda():
        logger.warning_once("HPC gated MLA disabled: only CUDA is supported.")
        return False

    capability = current_platform.get_device_capability()
    if capability is None or capability.to_int() not in _HPC_GATED_GEMM_CAPABILITIES:
        logger.warning_once(
            "HPC gated MLA disabled: compute capability %s not in %s.",
            capability,
            _HPC_GATED_GEMM_CAPABILITIES,
        )
        return False

    # Headwise gating broadcasts one scalar per head over v_head_dim; the
    # kernel only implements the elementwise product.
    if gating_type != "elementwise":
        logger.warning_once(
            "HPC gated MLA disabled: gating_type '%s' has no fused form.",
            gating_type,
        )
        return False

    weight = getattr(attn_output_gate, "weight", None)
    if weight is None or weight.dtype != torch.bfloat16:
        logger.warning_once(
            "HPC gated MLA disabled: gate weight dtype is %s, the kernel needs "
            "bfloat16 (keep the layer out of quantization).",
            None if weight is None else weight.dtype,
        )
        return False

    if weight.shape[0] % _HPC_GATED_GEMM_N_ALIGN != 0:
        logger.warning_once(
            "HPC gated MLA disabled: gate width %d is not a multiple of %d.",
            weight.shape[0],
            _HPC_GATED_GEMM_N_ALIGN,
        )
        return False

    logger.info_once("HPC gated MLA enabled by set VLLM_ENABLE_HPC_OPS.")
    return True