sgl-project/sglang · error · ValueError

Reserved serve backend names cannot be used: {names}

Error message

Reserved serve backend names cannot be used: {names}

What it means

The final default case of deterministic_all_reduce's dtype switch: only Float, Half, and (on gfx8+ / non-arch builds) BFloat16 are supported. Any other dtype throws this error.

Source

Thrown at python/sglang/cli/serve_backends.py:86


@dataclass(frozen=True)
class RegisteredServeBackend:
    """A loaded backend together with its discovery metadata."""

    name: str
    backend: ServeBackend
    distribution: str | None = None


class ServeBackendRegistry:
    """Registry of built-in and installed out-of-tree serve backends."""

    def __init__(self, builtins: Mapping[str, ServeBackend]) -> None:
        invalid_builtin_names = set(builtins) & RESERVED_SERVE_BACKEND_NAMES
        if invalid_builtin_names:
            names = ", ".join(sorted(invalid_builtin_names))
            raise ValueError(f"Reserved serve backend names cannot be used: {names}")

        self._builtins = dict(builtins)
        self._entry_points = self._discover_entry_points()
        self._loaded: dict[str, RegisteredServeBackend] = {
            name: RegisteredServeBackend(name=name, backend=backend)
            for name, backend in self._builtins.items()
        }

        reserved = (set(self._builtins) | RESERVED_SERVE_BACKEND_NAMES) & set(
            self._entry_points
        )
        if reserved:
            names = ", ".join(sorted(reserved))
            raise RuntimeError(
                "Out-of-tree serve backends cannot replace reserved or built-in "
                f"backends: {names}"
            )

View on GitHub (pinned to 0132848349)

Solutions

  1. Cast tensors to float32/float16/bfloat16 before the call
  2. Exclude such tensors from the deterministic custom path (use RCCL)
  3. Note bf16 requires gfx8+ hardware (__HIP_ARCH__ >= 800)

Example fix

# before
deterministic_all_reduce(fa, x_double, out)
# after
deterministic_all_reduce(fa, x_double.float(), out.float())
Defensive patterns

Strategy: type-guard

Type guard

def det_ar_supported(t: torch.Tensor) -> bool:
    return t.dtype in (torch.float32, torch.float16, torch.bfloat16)

Try / catch

try:
    deterministic_all_reduce(fa, inp, out)
except RuntimeError as e:
    if 'only supports' in str(e):
        deterministic_all_reduce(fa, inp.float(), out.float())
    else:
        raise

Prevention

When it happens

Trigger: Calling deterministic_all_reduce with dtype float64, integer, or fp8 tensors.

Common situations: Deterministic inference mode enabled for models producing non-fp16/bf16/fp32 tensors; accidental double precision from a cast; fp8 pathways routed into deterministic allreduce.

Related errors


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