{"record":{"id":"d22e9f6842422f13","repo":"sgl-project/sglang","slug":"self-op-label-no-triton-backend","errorCode":null,"errorMessage":"{self._op_label()}: no triton backend","messagePattern":"(.+?): no triton backend","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/sglang/kernels/fused_op.py","lineNumber":426,"sourceCode":"            if klass is BaseFusedOp:\n                return None\n            if method_name in klass.__dict__:\n                return getattr(self, method_name)\n        return None\n\n    # --- kernel backends: native is required; the rest are opt-in overrides ---\n\n    @abstractmethod\n    def forward_native(self, *args, **kwargs):\n        \"\"\"Pure-``torch`` reference implementation (correctness ground truth).\"\"\"\n\n    def forward_torch_compile(self, *args, **kwargs):\n        if self._compiled_native is None:\n            self._compiled_native = torch.compile(self.forward_native)\n        return self._compiled_native(*args, **kwargs)\n\n    def forward_triton(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no triton backend\")\n\n    def forward_jit(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no jit backend\")\n\n    def forward_aot(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no aot backend\")\n\n    def forward_cute_dsl(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no cute_dsl backend\")\n\n    def forward_flashinfer(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no flashinfer backend\")\n\n    def forward_deepgemm(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no deepgemm backend\")\n\n    def forward_aiter(self, *args, **kwargs):\n        raise NotImplementedError(f\"{self._op_label()}: no aiter backend\")","sourceCodeStart":408,"sourceCodeEnd":444,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/kernels/fused_op.py#L408-L444","documentation":"The FusedOp dispatcher routes by backend name to methods like forward_triton. The base class implements them as NotImplementedError stubs so an unimplemented backend fails loudly instead of silently falling back, telling you exactly which op lacks a Triton path.","triggerScenarios":"A FusedOp instance without an overridden forward_triton is invoked with backend='triton' (or the dispatcher selects triton), e.g. an op that only implements forward_native/forward_aot.","commonSituations":"Selecting a backend via config/env (SGLANG kernel backend flags) for an op that was never ported to it; running new ops on a backend where porting is still pending.","solutions":["Use a supported backend for the op (check the subclass for which forward_* methods are overridden, e.g. 'native' or 'aot')","Implement forward_triton for your op if Triton support is required","Check for an existing op-specific Triton implementation to delegate to instead of the base stub"],"exampleFix":"# before\nclass MyOp(FusedOp):\n    def forward_native(self, x): return x * 2\nout = MyOp()(x, backend='triton')\n# after\nout = MyOp()(x, backend='native')","handlingStrategy":"fallback","validationCode":"backend = 'triton' if type(op).forward_triton is not FusedOp.forward_triton else 'native'","typeGuard":"def has_backend(op, name): return getattr(type(op), f'forward_{name}') is not getattr(FusedOp, f'forward_{name}')","tryCatchPattern":"except NotImplementedError: op(x, backend='native')","preventionTips":["Introspect overridden forward_* before selecting backends"],"tags":["fused-op","backend-dispatch","not-implemented","triton"],"backgroundTag":"backend-not-implemented","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}