sgl-project/sglang · error · ValueError

moe_a2a_backend='pplx' only supports low-latency mode; set -

Error message

moe_a2a_backend='pplx' only supports low-latency mode; set --deepep-mode to 'low_latency' or 'auto'.

What it means

Raised when --moe-a2a-backend pplx is used with --deepep-mode normal. The pplx (ParallelRL) a2a backend only implements the low-latency masked dispatch path. 'auto' mode is auto-declared to low_latency, so only an explicit 'normal' triggers the error.

Source

Thrown at python/sglang/srt/server_args.py:7809

                    deepep_mode="normal",
                )
                logger.warning("auto set deepep_mode=`normal` for MORI EP")

            # Check chunked prefill for mori
            # Skip validation if chunked prefill is disabled (i.e., size <= 0).
            # Skip validation if disaggregation mode is decode.
            if cfg.chunked_prefill_size > 0 and cfg.disaggregation_mode != "decode":
                assert (
                    self._required_mori_dispatch_tokens_per_rank()
                ) <= envs.SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK.get(), (
                    "SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK (default 4096) "
                    "must be >= the per-rank MoRI dispatch tokens "
                    "(chunked_prefill_size by default)"
                )

        if a2a_backend == "pplx":
            if cfg.deepep_mode == "normal":
                raise ValueError(
                    "moe_a2a_backend='pplx' only supports low-latency mode; "
                    "set --deepep-mode to 'low_latency' or 'auto'."
                )
            if cfg.deepep_mode == "auto":
                self._declare(
                    "_handle_a2a_moe",
                    deepep_mode="low_latency",
                )
                logger.warning("auto set deepep_mode=`low_latency` for PPLX EP")
            # pplx-kernels' AllToAll needs numDPGroups (== attention dp_size) > 1;
            # without DP attention numDPGroups == 1 and construction fails deep in
            # the kernel. This also implies ep_size >= 2.
            assert resolved_view(self).enable_dp_attention and cfg.dp_size >= 2, (
                "moe_a2a_backend='pplx' requires --enable-dp-attention with at "
                "least 2 DP groups (--dp-size >= 2)."
            )
            # pplx runs the masked DeepGEMM expert path (sm_90a): reject other
            # runners and resolve auto -> deep_gemm. Unquantized bf16 pplx needs

View on GitHub (pinned to 0132848349)

Solutions

  1. Set --deepep-mode low_latency
  2. Set --deepep-mode auto (resolver forces low_latency for pplx)
  3. If normal-mode dispatch is required, use --moe-a2a-backend deepep instead of pplx

Example fix

# before
--moe-a2a-backend pplx --deepep-mode normal
# after
--moe-a2a-backend pplx --deepep-mode low_latency
Defensive patterns

Strategy: validation

Validate before calling

if a2a_backend == "pplx" and deepep_mode == "normal":
    deepep_mode = "low_latency"

Prevention

When it happens

Trigger: Launching with --moe-a2a-backend pplx and --deepep-mode normal.

Common situations: Migrating a pplx-based RL serving stack onto a config template that pinned --deepep-mode normal for prefill-heavy workloads; mixing flags from different deployment playbooks.

Related errors


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