sgl-project/sglang · error · ValueError

DeepEP v2 MoE has not validated fused shared experts yet. Re

Error message

DeepEP v2 MoE has not validated fused shared experts yet. Remove --enforce-shared-experts-fusion when using --moe-a2a-backend deepep_v2.

What it means

Raised when deepep_v2 is combined with --enforce-shared-experts-fusion. Fused shared experts have not been validated against the DeepEP v2 path, so the resolver rejects it rather than risk silent numerical issues. Note some waterfill tests force shared experts fusion, making this combo easy to hit in test configs.

Source

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

                self._declare("_handle_a2a_moe", moe_runner_backend="deep_gemm")
                logger.warning(
                    "DeepEP v2 MoE: resolved --moe-runner-backend auto -> deep_gemm."
                )
            elif resolved_runner != "deep_gemm":
                raise ValueError(
                    "DeepEP v2 MoE currently supports only "
                    f"--moe-runner-backend deep_gemm. Got {resolved_runner!r}. "
                    "Add a runner adapter before enabling DeepEP v2 with other "
                    "MoE runners."
                )
            if cfg.enable_two_batch_overlap or cfg.enable_single_batch_overlap:
                raise ValueError(
                    "DeepEP v2 MoE has not implemented the TBO/SBO overlap hooks yet. "
                    "Disable --enable-two-batch-overlap and "
                    "--enable-single-batch-overlap when using --moe-a2a-backend deepep_v2."
                )
            if cfg.enforce_shared_experts_fusion:
                raise ValueError(
                    "DeepEP v2 MoE has not validated fused shared experts yet. "
                    "Remove --enforce-shared-experts-fusion when using "
                    "--moe-a2a-backend deepep_v2."
                )
            # Prefill reads host counts and is not graph-capturable.
            self._declare(
                "_handle_a2a_moe",
                cuda_graph_config=with_phase(
                    cfg.cuda_graph_config, Phase.PREFILL, backend=Backend.DISABLED
                ),
            )
            logger.warning(
                f"DeepEP v2 MoE is enabled. The expert parallel size is adjusted to be the same as the tensor parallel size[{cfg.tp_size}]."
            )
            logger.warning(
                "DeepEP v2 MoE is using deepep_v2_mode=%s. This controls "
                "ElasticBuffer direct/hybrid mode and is independent from "
                "--deepep-mode normal/low_latency. DeepEP v2 MoE enables the "

View on GitHub (pinned to 0132848349)

Solutions

  1. Remove --enforce-shared-experts-fusion when using deepep_v2
  2. Use --moe-a2a-backend deepep if fused shared experts are required

Example fix

# before
--moe-a2a-backend deepep_v2 --enforce-shared-experts-fusion
# after
--moe-a2a-backend deepep_v2
Defensive patterns

Strategy: validation

Validate before calling

if a2a_backend == "deepep_v2" and enforce_shared_experts_fusion:
    enforce_shared_experts_fusion = False

Prevention

When it happens

Trigger: Launching with --moe-a2a-backend deepep_v2 and --enforce-shared-experts-fusion set in the resolved config.

Common situations: Deploying a DeepSeek-style model where shared-experts fusion was previously enforced for perf; test harnesses that set the fusion flag globally for all backends.

Related errors


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