nvtop for vLLM — an interactive terminal dashboard for vLLM serving performance
Project description
vllmstat
nvtop for vLLM — a zero-infrastructure interactive terminal dashboard for vLLM serving performance.
Why vllmstat?
The standard observability stack for vLLM is Prometheus + Grafana: powerful, but heavyweight. You need a running Prometheus instance, a Grafana server, a dashboard JSON import, and a browser tab — all just to see whether your inference server is busy.
vllmstat replaces that for day-to-day monitoring. One command, no infrastructure. It scrapes the vLLM server's built-in /metrics endpoint directly and renders everything in your terminal, refreshing every second.
There is one other terminal tool (vllm-top on PyPI), but it is a basic watch-style metrics printer: no interactivity, no GPU panel, no latency percentiles, no speculative-decoding acceptance, no KV-compression ratio. vllmstat fills that gap — it is closer to nvtop than to watch.
Install
pip install vllmstat
Or with pipx (isolated install, globally available):
pipx install vllmstat
Or run it ephemerally without installing:
uvx vllmstat
Usage
Point it at your vLLM server and it starts immediately:
vllmstat
# Different host / port
vllmstat --url http://my-gpu-host:8000
# Try the dashboard without a real server (uses synthetic data)
vllmstat --mock
# Print a single snapshot as JSON and exit — useful for scripting / alerting
vllmstat --once --json
Key bindings
| Key | Action |
|---|---|
q |
Quit |
p |
Pause / resume polling |
g |
Toggle GPU panel on/off |
+ / = |
Halve the refresh interval (faster) |
- |
Double the refresh interval (slower) |
Flags
| Flag | Default | Description |
|---|---|---|
-u / --url |
http://localhost:8000 |
vLLM server base URL |
--metrics-path |
/metrics |
Prometheus metrics path |
-i / --interval |
1.0 |
Refresh interval in seconds |
--api-key |
— | Bearer token (VLLM_API_KEY env var also accepted) |
--no-gpu |
— | Disable the GPU panel entirely |
--mock |
— | Use synthetic data — no server required |
--once --json |
— | Print one snapshot as JSON and exit |
--version |
— | Print version and exit |
What it shows
- Concurrency — running requests, waiting queue depth, preemption rate, with mini sparklines.
- Throughput — generation tok/s, prompt tok/s, tokens per iteration, requests per second.
- Cache & KV memory — prefix-cache hit rate (windowed and lifetime), token-source breakdown (compute vs. cache-hit vs. external KV transfer), KV-cache utilisation percentage, KV-cache capacity in tokens, and — when a quantised KV dtype is detected — the dtype (
fp8_e4m3,turboquant_k3v4_nc, …), effective compression ratio vs. fp16, and how much fp16 memory the model's full context would require. For example, aturboquant k3v4cache shows ~4.6× compression and a note that the full context would need 25.8 GB in fp16. - Latency percentiles — TTFT, TPOT, end-to-end, and queue-wait time, each at p50 / p90 / p99, computed over a rolling window so recent spikes are visible immediately.
- Speculative decoding — acceptance rate, accepted tokens per draft, per-position acceptance (when the server reports it). The panel is hidden when spec-decode is not active.
- Per-GPU stats — utilisation %, VRAM used / total, temperature, power draw vs. limit, clocks, fan. Works on NVIDIA, AMD, and Intel GPUs (see GPU support for what each vendor reports). Multi-GPU and mixed-vendor hosts show every GPU.
GPU support
vllmstat detects each GPU's vendor from its DRM device and reads stats from the best source available. Every field degrades to — when its source is unavailable, and a missing driver, tool, or sysfs file never crashes the dashboard — it just shows less.
| Vendor | What works | Prerequisite |
|---|---|---|
| NVIDIA | Full: util %, VRAM used/total, temperature, power draw/limit, SM & memory clocks, fan %. | NVIDIA driver. The bundled nvidia-ml-py uses NVML; nvidia-smi on PATH is used as a fallback. |
| AMD | Full: util %, VRAM used/total, temperature, power draw/limit, fan RPM, clock — via the amdgpu kernel driver's sysfs. |
amdgpu kernel driver (in-tree on modern Linux). Install ROCm's amd-smi (or rocm-smi) for richer data; it's used automatically when on PATH. |
| Intel | Temperature, power draw/limit, clock, and fan RPM out of the box via the xe/i915 sysfs. util % and VRAM are best-effort and usually unavailable on the xe driver. |
xe or i915 kernel driver. No extra tools needed for temp/power/clock/fan. |
Intel limitation (known): the xe driver exposes no gpu_busy_percent and no mem_info_vram_*, so utilisation and VRAM cannot be read from sysfs. vllmstat makes a best-effort attempt to derive util % from per-process drm-cycles in /proc/*/fdinfo (which typically requires root and is unsupported on xe), and otherwise shows — with a (util/VRAM: see prereqs) hint. intel_gpu_top only supports i915, so it is not used for xe. Full Intel util/VRAM via Level-Zero / xpu-smi is planned for a future release. Intel power is derived from the energy1_input counter, so it appears one refresh after the panel opens.
Remote and containerised setups
vllmstat does not need to run on the GPU machine. If no GPU is reachable from the machine you run it on — no NVML/nvidia-smi, no amdgpu/xe sysfs — for example when monitoring a remote server or when vLLM is isolated in its own GPU container, the GPU panel shows "unavailable" and all the vLLM telemetry panels (concurrency, throughput, cache, latency, spec-decode) continue to work normally. Pass --no-gpu to suppress the panel entirely.
Requirements
- Python ≥ 3.10
- A running vLLM server that exposes its Prometheus
/metricsendpoint (all vLLM ≥ 0.4 deployments do this by default) - A GPU driver — optional, only needed for the GPU panel. NVIDIA (NVML/
nvidia-smi), AMD (amdgpu), or Intel (xe/i915); see GPU support.
Development
See CONTRIBUTING.md.
License
Apache-2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vllmstat-0.2.0.tar.gz.
File metadata
- Download URL: vllmstat-0.2.0.tar.gz
- Upload date:
- Size: 172.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbaf682b72b79f9e61d19f49ea8a93727579e19740030002c5a9dcd9d99fa570
|
|
| MD5 |
1958f0e9c94b69c3fa8f9d4d11a67a56
|
|
| BLAKE2b-256 |
15bd99b3e3972e3834cf3fb882c94728168640379c49ed362ab9a6dde5df350a
|
File details
Details for the file vllmstat-0.2.0-py3-none-any.whl.
File metadata
- Download URL: vllmstat-0.2.0-py3-none-any.whl
- Upload date:
- Size: 35.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96357e141d7e6b3b540cc8ff2d115a224151ef61e4e537f3f768127b0042dc13
|
|
| MD5 |
b8d526887654988c061fdb0f40e77176
|
|
| BLAKE2b-256 |
597ed16f08db9676e388d41e2109d9c7f14d111b0e4d81d0782dbe12cba1c7fb
|