Skip to content

rank-exception-fatal

Source: fixes/rank-exception-fatal/

Stop the engine when a tensor-parallel worker fails a call whose result is read from another rank, instead of serving with the ranks out of step.

Affects every multi-card deployment that uses vLLM's multiprocessing executor (TP > 1, the default executor on one node)
Releases v0.26.0, v0.30.0
Patches vllm/v1/executor/multiproc_executor.py
Upstream not filed yet (the same code is on vLLM main)
Test test_rank_exception_fatal.py (stdlib only; needs a vLLM source tree, see below)

Problem

Each worker process of MultiprocExecutor runs RPCs from a broadcast queue. When a call raises, the worker logs WorkerProc hit an exception. and sends the exception back only if it is the call's output rank. For execute_model and sample_tokens that is rank 0, so on every other rank the exception is logged and dropped. The engine keeps going with rank 0's result while the failed rank skipped the rest of that call.

Symptom

After one rank fails (for example a device memory allocation failure during a long prefill), the ranks are out of step and every later response is wrong, often one repeated token from NaN logits, even for short prompts. /health keeps returning 200 and nothing restarts. The only trace is WorkerProc hit an exception. in the worker log.

Who is affected

Anyone running vLLM with tensor parallelism through the multiprocessing executor. Nothing in the failing path is specific to Gaudi. Single-card servers and the Ray executor are not affected.

The fix

When a call fails on a rank that is not the call's output rank, the worker logs an error and exits with status 1. The executor's worker monitor sees the dead process and shuts the engine down, so the server fails visibly and an orchestrator restarts it. Failures on the output rank and on calls that every rank answers are still returned to the caller as before.

Verify

python3 fixes/rank-exception-fatal/apply.py --check   # 0 = applied, 1 = not applied, 2 = source drifted
GAUDI_FIXES_ROOT=<dir holding vllm/> pytest fixes/rank-exception-fatal

The test extracts the worker loop from the patched file and drives it with a fake queue: a failing non-output rank must exit, the output rank must reply and continue. Without GAUDI_FIXES_ROOT it uses the installed vLLM, and it is skipped when neither is available.