Skip to main content
vLLM Doctor

Package version Supported Python versions

Diagnose vLLM server bottlenecks from live metrics.

vllm-doctor demo

vLLM Doctor reads vLLM server metrics and turns them into diagnostic findings: what looks unhealthy, why it may be happening, and which vLLM settings are worth checking first.

vllm-doctor diagnose http://localhost:8000/metrics

vLLM Doctor is not a dashboard replacement or benchmark runner. It is a fast server-side diagnostic snapshot for a single vLLM server or Prometheus target.

Features

  • Built-in diagnosis rules — queue pressure, TTFT/TPOT bottlenecks, KV cache pressure, low throughput, error rate, replica imbalance, prefix cache efficiency, preemption pressure, queue latency
  • Local history — persist runs with --save, review with history list and history show
  • Watch change-log — --save --watch only persists when state changes (health or firing rules)
  • Dual input — Prometheus or direct /metrics scrape
  • Structured output — rich text tables or JSON for automation
  • Configurable thresholds — per-rule tuning via TOML

Why not just a dashboard?

Dashboards show metrics. vLLM Doctor explains server-side inference behavior.

Dashboards vLLM Doctor
Shows raw metrics ✓ ✓
Explains what's wrong ✗ ✓
Recommends vLLM configs ✗ ✓
Requires setup ✓ ✗
Works on a single server ✗ ✓

How does this relate to GuideLLM?

GuideLLM is a good fit for generating workloads and measuring endpoint behavior. vLLM Doctor is a good fit for explaining server-side symptoms from vLLM metrics.

Used together, GuideLLM can create or replay load while vLLM Doctor helps explain bottlenecks such as queue pressure, KV cache pressure, high TTFT, or high TPOT.

Installation

With pip:

pip install vllm-doctor

With uv:

uv tool install vllm-doctor

Quickstart

Direct scrape:

vllm-doctor diagnose http://localhost:8000/metrics

Prometheus:

vllm-doctor diagnose http://localhost:9090

Run with Docker

A prebuilt image is published to GitHub Container Registry:

docker run --rm ghcr.io/aminalaee/vllm-doctor diagnose <url>

<url> is your vLLM /metrics or Prometheus endpoint — the same argument the CLI takes — reachable from inside the container.

Example verbose output

─────────────────────────────────── vLLM Doctor  ·  Health: CRITICAL  ·  Since: now ────────────────────────────────────

╭─ ✖ KV cache pressure  [high confidence] ─────────────────────────────────────────────────────────────────────────────╮
│   GPU KV cache usage: 94% (threshold: 90%)  ·  Waiting requests: 7 (blocked by full cache)                           │
│                                                                                                                      │
│   → Reduce max_num_seqs to limit concurrent sequences                                                                │
│   → Reduce max_num_batched_tokens to cap memory per step                                                             │
│   → Increase gpu_memory_utilization if GPU memory headroom exists                                                    │
│   → Route long-context requests to a dedicated replica                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ ⚠ High time to first token (TTFT)  [high confidence] ───────────────────────────────────────────────────────────────╮
│   TTFT p95: 3.200s  ·  TPOT p95: 0.050s  ·  Waiting requests: 7                                                      │
│                                                                                                                      │
│   → Enable or tune chunked prefill (--enable-chunked-prefill)                                                        │
│   → Reduce max prompt length or filter long requests                                                                 │
│   → Inspect queue depth — consider adding replicas                                                                   │
│   → Separate long-context traffic to dedicated instances                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ ⚠ Replica imbalance  [high confidence] ─────────────────────────────────────────────────────────────────────────────╮
│   meta-llama/Llama-3.1-8B: running vllm-1=10 vs vllm-0=2; cache 94% vs 41%; waiting vllm-1=7 vs vllm-0=0             │
│                                                                                                                      │
│   → Check the load balancer / service routing and session affinity settings                                          │
│   → Verify readiness probes — an unready replica receives no traffic                                                 │
│   → Compare per-replica latency and restart any unhealthy replica                                                    │
│   → Confirm newly added replicas are registered with the load balancer                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ ⚠ Queue pressure  [low confidence] ─────────────────────────────────────────────────────────────────────────────────╮
│   Waiting requests: 7 (threshold: 5)                                                                                 │
│                                                                                                                      │
│   → Add replicas or increase concurrency limits                                                                      │
│   → Inspect autoscaling thresholds                                                                                   │
│   → Separate long-context traffic to a dedicated replica                                                             │
│   → Reduce incoming request rate                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  KV Cache Pressure          ✖ critical    [high]
  High TTFT                  ⚠ warning     [high]
  Replica Imbalance          ⚠ warning     [high]
  Queue Pressure             ⚠ warning     [low]
  Queue Latency              ✓ ok
  Preemption Pressure        ✓ ok
  Low Throughput             ✓ ok
  Error Rate                 ✓ ok
  High TPOT                  ✓ ok
  Prefix Cache Efficiency    ✓ ok

─────────────────────────────────────────────────── Observed Metrics ───────────────────────────────────────────────────

  Summary
  Requests Running                               12
  Requests Waiting                                7
  GPU Cache Usage          ███████████████████░ 94%
  Prefill Tokens/s                            390.0
  Decode Tokens/s                             252.0
  Requests Success                              114
  Requests Error                                  0
  Requests Aborted                                0
  TTFT p95 (s)                                3.200
  TPOT p95 (s)                                0.050
  Queue Time p95 (s)                          0.800
  Preemptions Total                               0
  Prefix Cache Hit Rate                         50%

─────────────────────────────────────────────── Observed Metrics per pod ───────────────────────────────────────────────

                       vllm-1    vllm-0
  Requests Running         10         2
  Requests Waiting          7         0
  GPU Cache Usage         94%       41%
  Prefill Tokens/s       80.0     310.0
  Decode Tokens/s        42.0     210.0
  Requests Success         30        84
  Requests Error            0         0
  Requests Aborted          0         0
  Preemptions Total         0         0

Documentation

Read the full documentation: https://aminalaee.github.io/vllm-doctor

Metadata

Release files for vllm-doctor 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vllm-doctor 0.6.0
File Size Uploaded
vllm_doctor-0.6.0.tar.gz 28.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vllm-doctor 0.6.0
File Interpreter ABI Platform
vllm_doctor-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 74.5 kB

Release files / vllm_doctor-0.6.0.tar.gz

Download URL vllm_doctor-0.6.0.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
76b7d60eaeeaed064c1f369a5db0579a8b687645f4ad8152fdd9274109882963
BLAKE2b-256 checksum
How to use checksums
0d2adee3793eae9269b7464cc2df58c4f2a0836e2be803803fbb45490a99754f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vllm_doctor-0.6.0-py3-none-any.whl

Download URL vllm_doctor-0.6.0-py3-none-any.whl
Size 46.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
820e1bda76ce99de685249c3967430c7c1fbe3be10bc60f97aec7b47775f4d10
BLAKE2b-256 checksum
How to use checksums
c617eee3364db5f09e2b3bd7bfe07513cd2d541f6bbdf157d6c9be2e5125509c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page