vllm-project/vllm · error · Error

data parallel rank {rank} is not connected to this frontend;

Error message

data parallel rank {rank} is not connected to this frontend; connected ranks: {connected_ranks:?}

What it means

EngineCoreError::InvalidDataParallelRank is returned when the frontend is asked to route work to a data-parallel rank that has no connected engine-core behind it. The error lists the ranks that ARE connected, making the wiring mismatch directly visible.

Source

Thrown at rust/src/engine-core-client/src/error.rs:71

    UnexpectedCoordinatorOutput { message: String },
    #[error("unexpected output on main dispatcher path: {message}")]
    UnexpectedDispatcherOutput { message: String },
    #[error("coordinator requires a Python-compatible two-byte engine id, got {engine_id:?}")]
    UnsupportedCoordinatorEngineId { engine_id: Vec<u8> },
    #[error("unsupported auxiliary frame(s): expected 1 frame, got {frame_count}")]
    UnsupportedAuxFrames { frame_count: usize },
    #[error("external coordinator mode is not implemented yet")]
    UnsupportedExternalCoordinator,
    #[error("unsupported field `{field}` in {context}")]
    UnsupportedField {
        context: &'static str,
        field: &'static str,
    },
    #[error("engine control channel closed unexpectedly: {message}")]
    ControlClosed { message: String },
    #[error("request `{request_id}` is already in flight")]
    DuplicateRequestId { request_id: String },
    #[error(
        "data parallel rank {rank} is not connected to this frontend; connected ranks: {connected_ranks:?}"
    )]
    InvalidDataParallelRank {
        rank: u32,
        connected_ranks: Vec<u32>,
    },
    #[error("engine-core output dispatcher closed: {message}")]
    DispatcherClosed { message: String },
    #[error("engine-core client is closed: {message}")]
    ClientClosed { message: String },
    #[error("request output stream for `{request_id}` closed unexpectedly")]
    RequestStreamClosed { request_id: String },
    #[error("utility call `{method}` failed (call_id={call_id}): {message}")]
    UtilityCallFailed {
        method: String,
        call_id: UtilityCallId,
        message: String,
    },

View on GitHub (pinned to c794754062)

Solutions

  1. Match the requested rank against the connected_ranks listed in the error message
  2. Ensure data_parallel_size equals the number of engine-core processes spawned/connected to this frontend
  3. Check engine-core startup logs for the missing rank to find why it never connected (crash, wrong endpoint)
Defensive patterns

Strategy: validation

Validate before calling

// Validate rank before constructing the per-rank client
let connected = frontend.connected_dp_ranks();
assert!(connected.contains(&rank), "rank {rank} not in {connected:?}");
EngineCoreClient::for_dp_rank(rank, ...)

Try / catch

if let Err(vllm_engine_core_client::Error::InvalidDataParallelRank { rank, connected_ranks }) = res {
    return Err(anyhow::anyhow!("rank {rank} unavailable; connected: {connected_ranks:?}"));
}

Prevention

When it happens

Trigger: Creating an EngineCoreClient for data_parallel_rank = N when only ranks 0..K (K <= N) are connected; specifying data_parallel_size larger than the number of engine-core processes actually spawned/connected.

Common situations: data_parallel_size in engine config disagrees with the number of launched engine cores; a rank's engine process failed to start (so it never connected) while the frontend proceeds; bringing up partial DP clusters during testing.

Related errors


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/67a1d91af6d56608. Report an issue: GitHub.