sgl-project/sglang · error · KeyError
No '{backend.value}' backend registered for op {op!r}
Error message
No '{backend.value}' backend registered for op {op!r} What it means
Registry.get_backend(op, backend) found no registered implementation for the requested op under the given backend, so collective/kernel dispatch cannot proceed.
Source
Thrown at python/sglang/kernels/registry.py:56
f"{other.target!r} != {spec.target!r}"
)
return spec
existing.append(spec)
return spec
def get(self, op: str) -> List[KernelSpec]:
"""All registered specs for ``op`` (empty list if none)."""
return list(self._by_op.get(op, ()))
def get_backend(self, op: str, backend: KernelBackend) -> KernelSpec:
"""The spec for ``op`` provided by ``backend``.
Raises ``KeyError`` if no such implementation is registered.
"""
for spec in self._by_op.get(op, ()):
if spec.backend == backend:
return spec
raise KeyError(f"No '{backend.value}' backend registered for op {op!r}")
def has(self, op: str) -> bool:
return bool(self._by_op.get(op))
def ops(self) -> List[str]:
"""Sorted list of all registered operator ids."""
return sorted(self._by_op.keys())
def all_specs(self) -> List[KernelSpec]:
specs: List[KernelSpec] = []
for op in self.ops():
specs.extend(self._by_op[op])
return specs
# Process-wide registry. Group packages register into this instance on import.
registry = KernelRegistry()
View on GitHub (pinned to 0132848349)
Solutions
- Ensure the module containing the registration is imported before get_backend (add to the package's registration entry point).
- Register the op for the backend being requested, or fall back to another registered backend via registry.has/ops().
- Check for typos in the op id string.
Example fix
// before
spec = registry.get_backend('my_op', Backend.CUDA) # never registered
// after
from sglang.kernels.ops import my_op # triggers registration
spec = registry.get_backend('my_op', Backend.CUDA) Defensive patterns
Strategy: fallback
Validate before calling
if not registry.has(op):
import sglang.kernels.ops # ensure registrations ran Try / catch
try:
spec = registry.get_backend(op, backend)
except KeyError:
spec = registry.get_backend(op, fallback_backend) Prevention
- Import op registration modules eagerly from the package __init__.
- Use registry.has(op) before dispatching; check op id spelling.
When it happens
Trigger: Requesting e.g. Backend.TRITON for an op that only registered a Backend.CUDA implementation, or dispatching an op whose registration module was never imported (lazy import missing).
Common situations: Custom/allreduce init paths (initialize_model_parallel, custom allreduce node checks) querying backends before the registering module is imported; adding a new op id but forgetting to register it for all queried backends.
Related errors
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/13839df5238b5eb8.
Report an issue: GitHub.