Skip to content

[Bug]: trtllm-serve stays alive returning 503 forever after a rank-crash hard kill (no exit for supervisors) #18663

Open

Description

@PierreLeGuen

System Info

  • GPU: 8x NVIDIA H200 NVL (SM90; two 4-GPU NVLink islands, cross-island over PCIe/UPI), driver 595.71.05
  • Host: Ubuntu 24.04.4, 2 TiB RAM, Xeon 6747P
  • Container: nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc25 (CUDA 13.2, Python 3.12.3, torch 2.12.0a0+nv26.5, transformers 5.5.4)
  • TensorRT-LLM: 1.3.0rc25 (tag v1.3.0rc25, 785c948); the code paths cited below were also checked on main @ a6616d6 (2026-09-03)
  • Backend: PyTorch (trtllm-serve --backend pytorch)

Who can help?

No response (trtllm-serve owners: @NVIDIA/trt-llm-runtime-devs per CODEOWNERS)

Information

  • The official example scripts
  • My own modified scripts

Tasks

  • An officially supported task in the examples folder (such as GLUE/SQuAD, ...)
  • My own task or dataset (give details below)

Reproduction

Run trtllm-serve (PyTorch backend, tp_size > 1, MPI orchestrator) in a container with --restart supervision, then make the executor die on one rank (any of the KV-manager failures in #18660 / #18661 reproduces it; so does killing one MPI worker process). Observed sequence:

[TRT-LLM] [E] [_torch][RANK 7] Executor loop crashed on this rank; hard-killing all 8 ranks in 9.99947s (peers cannot make progress without this rank). Set TLLM_RANK_CRASH_HARD_KILL_GRACE=-1 to disable.
[TRT-LLM] [E] [_torch][RANK 4] HangDetector: propagating hard-kill to all ranks via MPI_Abort.
MPI_ABORT was invoked on rank 4 in communicator MPI_COMM_WORLD with errorcode 137.
[TRT-LLM] [E] [executor] Fatal engine error recorded: RuntimeError('MPI worker rank 4 (pid 357) exited unexpectedly')

From then on the frontend process (PID 1, uvicorn) keeps running for hours: GET /health returns 503, /v1/chat/completions returns RuntimeError: LLM is shutting down / EngineDeadError: Engine has died for every request, GPU memory is released, and the process never exits.

Expected behavior

After a fatal engine error the server process exits with a non-zero status (after optionally draining in-flight responses), so container restart policies and process supervisors restart it. Alternatively /health should report a terminal "dead" state distinct from "starting" so a supervisor can act on it.

actual behavior

The process stays alive indefinitely in a state where it can never serve again; a restart policy (docker --restart unless-stopped, Kubernetes liveness on /health only if configured for 503) is not triggered because the process is up. We had to detect it externally (503 on /health plus "HangDetector" in the log) and kill the container by hand.

additional notes

Before submitting a new issue...

  • Make sure you already searched for relevant issues, and checked the documentation and examples for answers to frequently asked questions.

Activity

  1. added
    Inference runtime<NV>General operational aspects of TRTLLM execution not in other categories.
    Pytorch<NV>Pytorch backend related issues
    on Sep 3, 2026
  2. roma5087 commented on Sep 3, 2026

    @roma5087

    Can this be assigned to me?

  3. karljang commented on Sep 8, 2026

    @karljang
    Collaborator

    @roma5087 , contributions are always welcome 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Inference runtime<NV>General operational aspects of TRTLLM execution not in other categories.Pytorch<NV>Pytorch backend related issues

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions