sgl-project/sglang · error · NotImplementedError

triton runner was supported but it's temporarily disabled

Error message

triton runner was supported but it's temporarily disabled

What it means

In DeepEP combine_a, after experts compute, the dispatcher needs a deep-GEMM-compatible layout: it passes hidden_states through only when JIT DeepGEMM is enabled, aiter is used, or on NPU. On plain GPU without deep_gemm (e.g. triton runner), the branch is a NotImplementedError placeholder because the triton combine path was temporarily disabled upstream.

Source

Thrown at python/sglang/srt/layers/moe/token_dispatcher/deepep.py:635

        return (
            recv_x,
            recv_topk_ids,
            recv_topk_weights,
            num_recv_tokens_per_expert,
            event,
        )

    def combine_a(
        self,
        hidden_states: torch.Tensor,
        topk_ids: torch.Tensor,
        topk_weights: torch.Tensor,
    ):

        if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM or _use_aiter or _is_npu:
            output = hidden_states
        else:
            raise NotImplementedError()  # triton runner was supported but it's temporarily disabled

        previous_event = Buffer.capture() if self.async_finish else None
        return output, previous_event

    def combine_b(self, output, previous_event):
        hidden_states, event = self._combine_core(output, previous_event)
        event.current_stream_wait() if self.async_finish else ()
        self.handle = None
        self.src2dst = None
        return hidden_states

    def _combine_core(self, x: torch.Tensor, previous_event):
        buffer = self._get_buffer()
        _deepep_precompile_tp_barrier()
        combined_x, _, event = buffer.combine(
            x,
            self.handle,
            async_finish=self.async_finish,

View on GitHub (pinned to 0132848349)

Solutions

  1. Enable DeepGEMM: remove --disable-deepgemm / unset SGLANG_ENABLE_JIT_DEEPGEMM=0-related flags and ensure the deep_gemm package is installed and enabled
  2. Switch --moe-a2a-backend away from deepep (e.g. naive) if you must run without DeepGEMM
  3. Upgrade (or pin to a version where) the triton combine path is re-enabled / deepep+triton is rejected earlier with a clearer message

Example fix

# before
--moe-a2a-backend deepep --disable-deepgemm  # combine_a raises NotImplementedError

# after
--moe-a2a-backend deepep  # with deep_gemm installed/enabled
Defensive patterns

Strategy: validation

Validate before calling

if server_args.moe_a2a_backend == "deepep" and server_args.disable_deepgemm:
    raise SystemExit("deepep currently requires DeepGEMM enabled (or aiter/NPU)")

Prevention

When it happens

Trigger: Using deepep dispatch with the triton MoE runner and no DeepGEMM (ENABLE_JIT_DEEPGEMM false, not _use_aiter, not NPU) — the second stage combine_a hits the disabled path. Typically from disabling deepgemm (--disable-deepgemm or env) while keeping --moe-a2a-backend deepep on a non-Ascend setup.

Common situations: Toggling off DeepGEMM to debug or on GPUs where deepgemm wheels are unavailable, leaving deepep dispatcher with no supported combine layout; version regressions after the triton path was disabled.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/244894d4e3cfe730. Report an issue: GitHub.