sgl-project/sglang · error · RuntimeError

SGLANG_DISAGG_STAGING_BUFFER does not support prefill contex

Error message

SGLANG_DISAGG_STAGING_BUFFER does not support prefill context parallelism.

What it means

Prefill context parallelism (CP) rewrites index_slice per rank, which breaks the fixed page-aligned chunk grid that SGLANG_DISAGG_STAGING_BUFFER relies on, so enabling both is rejected at startup in the prefill controller.

Source

Thrown at python/sglang/srt/disaggregation/prefill.py:185

            # and the grid cannot disagree after a post-publish override.
            chunked_prefill_size = get_schedule().chunked_prefill_size
            cps = chunked_prefill_size or 8192
            # Staging slices each send into a fixed page-aligned grid, so an
            # unbounded (-1) or non-page-aligned chunk size has no valid grid.
            if cps <= 0 or cps % page_size != 0:
                raise RuntimeError(
                    f"SGLANG_DISAGG_STAGING_BUFFER requires a positive "
                    f"chunked_prefill_size that is a multiple of page_size "
                    f"({page_size}); got {chunked_prefill_size}."
                )
            if self.pp_size > 1 and self.transfer_backend != TransferBackend.MOONCAKE:
                raise RuntimeError(
                    "SGLANG_DISAGG_STAGING_BUFFER with pp_size > 1 is only "
                    "supported by Mooncake."
                )
            if get_parallel().enable_prefill_context_parallel:
                # CP rewrites index_slice per rank, breaking the chunk grid.
                raise RuntimeError(
                    "SGLANG_DISAGG_STAGING_BUFFER does not support "
                    "prefill context parallelism."
                )
        self.kv_manager = self._init_kv_manager()

    def _init_kv_manager(self) -> CommonKVManager:
        kv_args_class = get_kv_class(self.transfer_backend, KVClassType.KVARGS)
        kv_args = kv_args_class()
        kv_args.engine_rank = self.tp_rank
        kv_args.pp_rank = self.pp_rank
        kv_args.system_dp_rank = self.scheduler.ps.dp_rank
        kv_args.kv_cache_dtype_str = (
            self.scheduler.tp_worker.model_runner.kv_cache_dtype_str
        )
        layer_shard_enabled = getattr(
            self.token_to_kv_pool, "layer_shard_enabled", False
        )
        layer_shard_rank = getattr(self.token_to_kv_pool, "layer_shard_rank", None)

View on GitHub (pinned to 0132848349)

Solutions

  1. Disable prefill context parallelism (remove the CP flag) when using SGLANG_DISAGG_STAGING_BUFFER.
  2. Or unset SGLANG_DISAGG_STAGING_BUFFER and keep context parallelism.

Example fix

# before
export SGLANG_DISAGG_STAGING_BUFFER=1
python -m sglang.launch_server --enable-prefill-context-parallel ...
# after (choose one optimization)
unset SGLANG_DISAGG_STAGING_BUFFER
python -m sglang.launch_server --enable-prefill-context-parallel ...
Defensive patterns

Strategy: validation

Validate before calling

if envs.SGLANG_DISAGG_STAGING_BUFFER.get():
    assert not get_parallel().enable_prefill_context_parallel, \
        'staging buffer is incompatible with prefill CP'

Prevention

When it happens

Trigger: SGLANG_DISAGG_STAGING_BUFFER=1 with get_parallel().enable_prefill_context_parallel true (e.g. --enable-prefill-context-parallel or equivalent server arg).

Common situations: Long-context workloads enabling prefill CP for throughput while also enabling the staging buffer optimization for KV transfer in a disaggregated deployment.

Related errors


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