sgl-project/sglang · error · RuntimeError
HiSparse destination device indices are not supported by PD…
Error message
HiSparse destination device indices are not supported by PD DCP relayout
What it means
When the target rank requires DCP (DeepSeek sparse cache) relayout, the relayout derives destination indices from dst_kv_indices only; per-request destination device indices cannot be honored and the transfer is rejected.
Solutions
- Disable the feature producing dst_device_kv_indices (e.g. hicache device placement for these requests)
- Disable DCP relayout on the decode side so the normal path runs
- Route such requests to a non-DCP decode pool
Defensive patterns
Strategy: fallback
Validate before calling
if target_registration.requires_dcp_relayout:
req.dst_device_kv_indices = None # route via dst_kv_indices only Prevention
- Segment workloads so hicache-device requests never target DCP-relayout decoders
When it happens
Trigger: transfer_worker handling a request with dst_device_kv_indices != None where target_rank_registration_info.requires_dcp_relayout is true.
Common situations: Mixing HiCache device-resident requests with a decode side that performs DCP relayout — an unsupported combination.
Related errors
- get_split_heads_page_buffer_meta requires…
- Page size mismatch: prefill server has page_size=
- Unsupported layout for models with head_dim != v_head_dim
- Ascend PD transfer does not support HiSparse destination…
- AttentionOffsetCache should not store data
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/b1eae779957fbb8b.
Report an issue: GitHub.
Appendix: source
Thrown at python/sglang/srt/disaggregation/mooncake/conn.py:1676
self.sync_status_to_decode_endpoint(
req.endpoint,
req.dst_port,
req.room,
KVPoll.Failed,
prefill_unique_rank,
)
break
target_rank_registration_info: KVArgsRegisterInfo = (
self.decode_kv_args_table[req.mooncake_session_id]
)
is_dcp_transfer = (
target_rank_registration_info.requires_dcp_relayout
)
chunked_dst_device_kv_indice = None
if is_dcp_transfer:
if req.dst_device_kv_indices is not None:
raise RuntimeError(
"HiSparse destination device indices are not "
"supported by PD DCP relayout"
)
chunked_dst_kv_indice = req.dst_kv_indices
else:
chunked_dst_kv_indice = req.dst_kv_indices[
kv_chunk.index_slice
]
if req.dst_device_kv_indices is not None:
chunked_dst_device_kv_indice = (
req.dst_device_kv_indices[kv_chunk.index_slice]
)
# NOTE: This is temporarily a workaround to deal with the case where the prefill_kv_indices
# is mismatched with the dst_kv_indices when page size > 1, this should never happen.
if len(chunked_dst_kv_indice) < len(
kv_chunk.prefill_kv_indices
):View on GitHub (pinned to 0132848349)