sgl-project/sglang · error · RuntimeError

PD disagg: PP>1 not supported for MiniMax sparse index yet.

Error message

PD disagg: PP>1 not supported for MiniMax sparse index yet.

What it means

MiniMax sparse index (minimax_index_k) state transfer does not support pipeline parallelism: if pp_size > 1 on the prefill side, the sender aborts. The sparse index is a single global structure that has no per-PP-rank partitioning in the transfer path yet.

Source

Thrown at python/sglang/srt/disaggregation/mori/conn.py:1379

        dst_state_indices: npt.NDArray[np.int32],
        src_state_mem_descs: List[MemoryDesc],
        src_state_item_lens: List[int],
        dst_state_mem_descs: List[MemoryDesc],
        state_type: str,
    ) -> List[TransferStatus]:
        # TP mismatch check for non-MLA SWA
        if (
            state_type == "swa"
            and not self.is_mla_backend
            and peer_info.decode_tp_size != self.attn_tp_size
        ):
            raise RuntimeError(
                f"PD state transfer does not support TP-mismatched non-MLA SWA models "
                f"(prefill_tp_size={self.attn_tp_size}, decode_tp_size={peer_info.decode_tp_size})"
            )
        if state_type == "minimax_index_k":
            if self.pp_size is not None and self.pp_size > 1:
                raise RuntimeError(
                    "PD disagg: PP>1 not supported for MiniMax sparse index yet."
                )
            if peer_info.decode_tp_size != self.attn_tp_size:
                raise RuntimeError(
                    "PD disagg: heterogeneous TP not supported for MiniMax sparse index yet."
                )

        common_len = min(src_state_indices.size, dst_state_indices.size)
        if (
            state_type == "c128_state"
            and common_len == 0
            and src_state_indices.size == 0
            and dst_state_indices.size == 0
        ):
            return []
        if common_len == 0 and max(src_state_indices.size, dst_state_indices.size) > 0:
            raise RuntimeError(
                f"No overlapping state indices for state_type={state_type}"

View on GitHub (pinned to 0132848349)

Solutions

  1. Remove pipeline parallelism (--pp-size 1) on the MiniMax prefill/decode instances
  2. Scale with TP instead of PP for MiniMax sparse-attention models under disagg
  3. Wait for upstream support of PP-partitioned MiniMax sparse index transfer

Example fix

# before
--disaggregation-prefill --pp-size 2

# after
--disaggregation-prefill --pp-size 1 --tp 8
Defensive patterns

Strategy: validation

Validate before calling

if "minimax_index_k" in (kv_args.state_types or []):
    assert not (conn.pp_size and conn.pp_size > 1), (
        "MiniMax sparse index requires pp_size == 1"
    )

Prevention

When it happens

Trigger: send_state with state_type=='minimax_index_k' while self.pp_size is set and greater than 1 (prefill launched with --pp-size 2 or more on a MiniMax sparse-attention model).

Common situations: Scaling MiniMax prefill capacity with pipeline parallelism in a PD-disaggregated deployment; works with TP-only but fails once PP is added.

Related errors


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