[PD] Allow decode radix cache and HiCache L1/L2 with DCP (#40263)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Khoa Pham
2026-09-18 17:54:35 -07:00
committed by GitHub
co-authored by Cursor
parent d507accadc
commit 10b0bcfd18
3 changed files with 3 additions and 40 deletions
@@ -63,16 +63,6 @@ def handle_pd_disaggregation(server_args: ServerArgs) -> None:
"mooncake, nixl, or fake for synthetic benchmarking, got "
f"{cfg.disaggregation_transfer_backend!r}."
)
if cfg.disaggregation_decode_enable_radix_cache:
raise ValueError(
"PD decode DCP currently requires chunk cache; "
"--disaggregation-decode-enable-radix-cache is not supported."
)
if cfg.enable_hierarchical_cache:
raise ValueError(
"PD decode DCP currently requires chunk cache; "
"--enable-hierarchical-cache is not supported."
)
if cfg.disaggregation_mode == "decode":
if cfg.disaggregation_decode_enable_radix_cache:
@@ -86,7 +76,7 @@ def handle_pd_disaggregation(server_args: ServerArgs) -> None:
"--disaggregation-decode-enable-radix-cache is incompatible "
"with --disaggregation-transfer-backend fake"
)
if cfg.speculative_algorithm is not None:
if cfg.speculative_algorithm not in (None, "DSPARK"):
raise ValueError(
"--disaggregation-decode-enable-radix-cache is incompatible "
"with speculative decoding "
@@ -257,8 +257,8 @@ def build_kv_cache(
# Decode-side radix cache supports SWA only through the unified tree, whose
# component pools preserve the full-attention prefix while transferring the
# SWA window fresh. The legacy SWA cache and hybrid SSM pools remain
# incompatible with the prefix-match-and-lock allocation path.
# SWA window fresh. Hybrid SSM/KDA uses UnifiedRadixCache's Mamba
# component (match + lock + CoW), the same path as colocated serving.
if (
get_disagg().disaggregation_decode_enable_radix_cache
and get_disagg().disaggregation_mode == "decode"
@@ -287,11 +287,6 @@ def build_kv_cache(
"--disaggregation-decode-enable-radix-cache does not support "
"SWA-compress models (e.g. Gemma4 / MiMo-V2) yet."
)
if is_hybrid_ssm:
raise ValueError(
"--disaggregation-decode-enable-radix-cache is incompatible "
"with Mamba/SSM models"
)
effective_chunked_prefill_size = get_schedule().chunked_prefill_size
if model_config.is_multimodal and uses_transformers_backend: