sgl-project/sglang · error · ValueError
--enable-dsa-cache-layer-split currently only supports the m
Error message
--enable-dsa-cache-layer-split currently only supports the mooncake transfer backend (mooncake / mooncake_tcp). Got --disaggregation-transfer-backend {cfg.disaggregation_transfer_backend!r}. mori/nixl support will be added later by the community. What it means
DSA cache-layer-split relies on the mooncake all-CP-rank KV/indexer transfer path, so it currently only works with the mooncake transfer backend (mooncake / mooncake_tcp). mori and nixl backends are rejected until support is added.
Source
Thrown at python/sglang/srt/server_args.py:5955
"require ordinary local decode cache semantics."
)
if cfg.enable_dsa_cache_layer_split and (
not cfg.enable_prefill_cp or cfg.cp_strategy != "interleave"
):
raise ValueError(
"--enable-dsa-cache-layer-split requires "
"--enable-prefill-cp and --cp-strategy interleave "
"(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.")View on GitHub (pinned to 0132848349)
Solutions
- Set --disaggregation-transfer-backend mooncake (or mooncake_tcp)
- Remove --enable-dsa-cache-layer-split if you must stay on mori/nixl
- Watch for community-added mori/nixl support in later releases
Example fix
# before --enable-dsa-cache-layer-split --disaggregation-transfer-backend nixl # after --enable-dsa-cache-layer-split --disaggregation-transfer-backend mooncake
Defensive patterns
Strategy: validation
Validate before calling
if args.get("enable_dsa_cache_layer_split") and args.get("disaggregation_transfer_backend", "mooncake") != "mooncake":
args["disaggregation_transfer_backend"] = "mooncake" # or fail fast Prevention
- Pin the transfer backend explicitly rather than relying on cluster defaults
- Document backend limitations per optimization flag in your deployment runbook
When it happens
Trigger: Running a PD prefill worker with --enable-dsa-cache-layer-split and --disaggregation-transfer-backend set to 'mori', 'nixl', or anything other than 'mooncake'.
Common situations: Clusters standardized on nixl/mori transfer backends trying the DSA optimization; forgetting to switch the backend when adopting the flag.
Related errors
- PD decode DCP requires --disaggregation-transfer-backend moo
- --enable-dsa-cache-layer-split is not supported on decode wo
- --enable-dsa-cache-layer-split is only supported on PD prefi
- SGLANG_DISAGG_STAGING_BUFFER requires disaggregation_transfe
- --enable-dsa-cache-layer-split is only supported for DSA (De
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/82f33f900579de6b.
Report an issue: GitHub.