sgl-project/sglang · error · ValueError

--enable-dsa-cache-layer-split is not supported with pipelin

Error message

--enable-dsa-cache-layer-split is not supported with pipeline parallelism (pp_size > 1) yet. It requires prefill context parallelism, and CP + PP has not been validated for this feature.

What it means

--enable-dsa-cache-layer-split requires prefill context parallelism, and CP+PP has not been validated for this feature, so it is rejected whenever pipeline parallelism (pp_size > 1) is active.

Source

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

                        "(or legacy --enable-nsa-prefill-context-parallel with "
                        "--nsa-prefill-cp-mode round-robin-split)."
                    )
                # Layer split relies on the mooncake all-CP-rank KV/indexer
                # transfer path. mori/nixl support is a temporary limitation
                # and will be added later by the community.
                if (
                    cfg.enable_dsa_cache_layer_split
                    and cfg.disaggregation_transfer_backend != "mooncake"
                ):
                    raise ValueError(
                        "--enable-dsa-cache-layer-split currently only supports "
                        "the mooncake transfer backend (mooncake / mooncake_tcp). "
                        f"Got --disaggregation-transfer-backend "
                        f"{cfg.disaggregation_transfer_backend!r}. mori/nixl "
                        "support will be added later by the community."
                    )
                if cfg.enable_dsa_cache_layer_split and cfg.pp_size > 1:
                    raise ValueError(
                        "--enable-dsa-cache-layer-split is not supported with "
                        "pipeline parallelism (pp_size > 1) yet. It requires "
                        "prefill context parallelism, and CP + PP has not been "
                        "validated for this feature."
                    )

            else:
                # DeepSeek V3/R1/V3.1
                if cfg.cuda_graph_config.prefill.backend != Backend.DISABLED:
                    logger.info("Piecewise CUDA graph is enabled, use MLA for prefill.")

                # The sm100 trtllm_mla fill moved to the override registry
                # (arg_groups/overrides.py: _deepseek_family_overrides).

                # MLA prefill CP auto-config: the field declarations moved to
                # the override registry (arg_groups/overrides.py:
                # _deepseek_family_overrides).
                if cfg.enable_prefill_cp and self.use_mla_backend():

View on GitHub (pinned to 0132848349)

Solutions

  1. Set --pp-size 1 when using --enable-dsa-cache-layer-split (scale with CP/TP instead)
  2. Or remove --enable-dsa-cache-layer-split if PP is required
  3. Track upstream validation of CP+PP for this feature

Example fix

# before
--enable-dsa-cache-layer-split --pp-size 2
# after
--enable-dsa-cache-layer-split --pp-size 1 --cp-size 2
Defensive patterns

Strategy: validation

Validate before calling

if args.get("enable_dsa_cache_layer_split") and args.get("pp_size", 1) > 1:
    raise SystemExit("dsa-cache-layer-split requires pp_size=1; use CP/TP to scale")

Prevention

When it happens

Trigger: Combining --enable-dsa-cache-layer-split with --pp-size > 1 on a PD prefill worker.

Common situations: Large multi-node deployments that use PP for memory scaling also enabling the DSA cache-layer-split optimization; cluster templates with pp-size preset.

Related errors


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