sgl-project/sglang · error · ValueError
experimental_sgl_marlin EP requires --moe-a2a-backend none
Error message
experimental_sgl_marlin EP requires --moe-a2a-backend none
What it means
Startup validation for the experimental SGLang Marlin runner: when expert parallelism (ep_size > 1) is combined with an actual --moe-a2a-backend other than 'none', the experimental runner refuses to start because its EP path does not implement the deepep-style all-to-all dispatch.
Source
Thrown at python/sglang/srt/lora/marlin_lora_temp/policy.py:22
tests. The backend deliberately supports a narrow configuration: widening it
requires implementing the corresponding Marlin activation/EP semantics first.
"""
from __future__ import annotations
from typing import Any
def validate_experimental_sgl_marlin_server_args(
server_args: Any, resolved_args: Any
) -> None:
"""Validate startup options before the experimental runner is constructed."""
from sglang.srt.arg_groups.overrides import resolving_view
cfg = resolving_view(server_args)
if resolved_args.ep_size > 1 and resolved_args.moe_a2a_backend != "none":
raise ValueError("experimental_sgl_marlin EP requires --moe-a2a-backend none")
# A provided adapter path implicitly enables LoRA later unless it was
# explicitly disabled. No-LoRA delegates to the stock Marlin fused path.
lora_enabled = bool(resolved_args.enable_lora) or (
resolved_args.enable_lora is None and bool(cfg.lora_paths)
)
if not lora_enabled:
return
if not cfg.lora_use_virtual_experts:
raise ValueError(
"experimental_sgl_marlin LoRA requires --lora-use-virtual-experts"
)
if cfg.lora_backend != "triton":
# The temporary dense/sink kernels consume Triton SGEMM batch metadata
# directly; other global backends are not adapted in this tree.
raise ValueError("experimental_sgl_marlin LoRA requires --lora-backend triton")
if resolved_args.ep_size <= 1:View on GitHub (pinned to 0132848349)
Solutions
- Set --moe-a2a-backend none when using experimental_sgl_marlin with EP > 1
- Run with EP disabled (tp-only) for the experimental path
- Fall back to the stock MoE runner backend if a2a is required
Example fix
# before --ep-size 8 --moe-a2a-backend deepep # after --ep-size 8 --moe-a2a-backend none
Defensive patterns
Strategy: validation
Validate before calling
assert not (server_args.ep_size > 1 and server_args.moe_a2a_backend != 'none'), 'experimental_sgl_marlin EP requires --moe-a2a-backend none'
Prevention
- Don't reuse production deepep configs with the experimental runner
- Keep an experimental launch script separate from production EP scripts
When it happens
Trigger: Launching with resolved ep_size > 1 and --moe-a2a-backend set to something other than none (e.g. deepep) while the experimental_sgl_marlin runner/policy is active.
Common situations: Copying a production multi-GPU EP config (deepep a2a) onto a node being used to test the experimental Marlin LoRA path.
Related errors
- experimental_sgl_marlin EP requires trivial expert placement
- experimental_sgl_marlin LoRA requires --lora-use-virtual-exp
- experimental_sgl_marlin LoRA requires --lora-use-virtual-exp
- experimental_sgl_marlin LoRA requires --lora-backend triton
- experimental_sgl_marlin configuration is unsupported: + ";
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/1e70b415b5fcbbef.
Report an issue: GitHub.