{"record":{"id":"244894d4e3cfe730","repo":"sgl-project/sglang","slug":"triton-runner-was-supported-but-it-s-temporarily-d","errorCode":null,"errorMessage":"triton runner was supported but it's temporarily disabled","messagePattern":"triton runner was supported but it's temporarily disabled","errorType":"error_code","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/layers/moe/token_dispatcher/deepep.py","lineNumber":635,"sourceCode":"        return (\n            recv_x,\n            recv_topk_ids,\n            recv_topk_weights,\n            num_recv_tokens_per_expert,\n            event,\n        )\n\n    def combine_a(\n        self,\n        hidden_states: torch.Tensor,\n        topk_ids: torch.Tensor,\n        topk_weights: torch.Tensor,\n    ):\n\n        if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM or _use_aiter or _is_npu:\n            output = hidden_states\n        else:\n            raise NotImplementedError()  # triton runner was supported but it's temporarily disabled\n\n        previous_event = Buffer.capture() if self.async_finish else None\n        return output, previous_event\n\n    def combine_b(self, output, previous_event):\n        hidden_states, event = self._combine_core(output, previous_event)\n        event.current_stream_wait() if self.async_finish else ()\n        self.handle = None\n        self.src2dst = None\n        return hidden_states\n\n    def _combine_core(self, x: torch.Tensor, previous_event):\n        buffer = self._get_buffer()\n        _deepep_precompile_tp_barrier()\n        combined_x, _, event = buffer.combine(\n            x,\n            self.handle,\n            async_finish=self.async_finish,","sourceCodeStart":617,"sourceCodeEnd":653,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/layers/moe/token_dispatcher/deepep.py#L617-L653","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Enable DeepGEMM: remove --disable-deepgemm / unset SGLANG_ENABLE_JIT_DEEPGEMM=0-related flags and ensure the deep_gemm package is installed and enabled","Switch --moe-a2a-backend away from deepep (e.g. naive) if you must run without DeepGEMM","Upgrade (or pin to a version where) the triton combine path is re-enabled / deepep+triton is rejected earlier with a clearer message"],"exampleFix":"# before\n--moe-a2a-backend deepep --disable-deepgemm  # combine_a raises NotImplementedError\n\n# after\n--moe-a2a-backend deepep  # with deep_gemm installed/enabled","handlingStrategy":"validation","validationCode":"if server_args.moe_a2a_backend == \"deepep\" and server_args.disable_deepgemm:\n    raise SystemExit(\"deepep currently requires DeepGEMM enabled (or aiter/NPU)\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Don't combine --disable-deepgemm with deepep a2a backend","Verify deep_gemm imports cleanly before launching EP servers"],"tags":["deepep","deepgemm","triton","moe","not-implemented","feature-flag"],"backgroundTag":"disabled-feature-combination","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}