vllm-project/vllm · error · NotImplementedError

mori currently only support arch gfx942 and gfx950

Error message

mori currently only support arch gfx942 and gfx950

What it means

Raised in _make_all2all_kwargs for the mori all2all/EP path when the AMD GPU is neither gfx942 (MI300X) nor gfx950 (MI350). The mori kernel launch parameters (warp/block counts for dispatch-combine) are only tuned/implemented for those two architectures, so building kwargs on any other ROCm gfx target raises NotImplementedError.

Source

Thrown at vllm/distributed/device_communicators/all2all.py:965

            warp_num_per_block = 16
            block_num = 80
        else:
            # Multi-node: kernel follows --all2all-backend (mirrors deepep_* split).
            # mori_low_latency → InterNodeV1LL; mori_high_throughput → V1.
            if self._all2all_backend == "mori_low_latency":
                kernel_type = mori.ops.EpDispatchCombineKernelType.InterNodeV1LL
            else:
                kernel_type = mori.ops.EpDispatchCombineKernelType.InterNodeV1
            if on_gfx942():
                warp_num_per_block = 16
                block_num = 32
                rdma_block_num = 16
            elif on_gfx950():
                warp_num_per_block = 8
                block_num = 64
                rdma_block_num = 32
            else:
                raise NotImplementedError(
                    "mori currently only support arch gfx942 and gfx950"
                )

        return dict(
            rank=rank,
            world_size=num_ep_ranks,
            data_type=quant_dtype,
            hidden_dim=token_hidden_size,
            scale_dim=scale_dim,
            scale_type_size=scale_type_size,
            max_token_type_size=input_dtype.itemsize,
            max_num_inp_token_per_rank=max_num_tokens_per_dp_rank,
            num_experts_per_rank=num_local_experts,
            num_experts_per_token=num_experts_per_token,
            warp_num_per_block=warp_num_per_block,
            block_num=block_num,
            kernel_type=kernel_type,
            rdma_block_num=rdma_block_num,

View on GitHub (pinned to c794754062)

Solutions

  1. Switch to a supported all2all/EP backend for this GPU (do not select mori on gfx != 942/950).
  2. If you believe your GPU is MI300X/MI350, verify the detected arch (rocminfo / torch.version.hip / HSA_OVERRIDE_GFX_VERSION) — an override can mask the real target.
  3. Check the mori project's support matrix for newly added architectures and update mori + vLLM together.

Example fix

# before
VLLM_ALL2ALL_BACKEND=mori  # on gfx90a
# after: use a backend valid for this GPU
VLLM_ALL2ALL_BACKEND=<non-mori backend supported on gfx90a>
Defensive patterns

Strategy: validation

Validate before calling

from vllm.platforms.rocm import on_gfx942, on_gfx950

if backend == "mori" and not (on_gfx942() or on_gfx950()):
    raise SystemExit("mori all2all requires gfx942 (MI300X) or gfx950 (MI350)")

Type guard

def mori_supported_on_this_gpu() -> bool:
    from vllm.platforms.rocm import on_gfx942, on_gfx950
    return on_gfx942() or on_gfx950()

Try / catch

try:
    kwargs = manager._make_all2all_kwargs(**kw)
except NotImplementedError as e:
    if "gfx942" in str(e):
        switch_all2all_backend_and_relaunch()
    raise

Prevention

When it happens

Trigger: Selecting the mori all2all backend for expert parallelism on a ROCm GPU other than gfx942/gfx950 (e.g. gfx90a MI210, gfx1100 consumer parts); on_gfx942() and on_gfx950() both return false while the mori path is taken.

Common situations: Porting an EP deployment from MI300X to older/newer AMD parts; a container where the ROCm arch flag resolves differently than expected; using a mori build that defaults on for all ROCm GPUs.

Related errors


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/d6ae31ab2658e21d. Report an issue: GitHub.