Skip to main content

top/htop-style GPU monitor for CV and AI workloads -- splits CUDA/Tensor/FP* compute from NVENC/NVDEC media engines

Project description

dltop

A htop/nvitop-style GPU monitor, tailored for computer-vision and deep-learning workloads.

Where nvitop gives you one uniform compute-utilization bar, dltop splits live GPU utilization into the two things an AI/CV engineer actually cares about on the same GPU:

  • Compute utilization — CUDA Streaming Multiprocessor / Tensor / FP32 / FP16 / FP64 activity (via DCGM)
  • Media engines — NVENC (encode) and NVDEC (decode) throughput (via NVML)

This helps identify the choke point for different scales of load on a streaming-analytics pipeline. Many metrics share one interleaved chart instead of stacking into tall bars: overlapping series alternate colour cell-by-cell, so no line is ever hidden behind another while each keeps its true value.

When DCGM is unavailable (consumer GeForce cards, or DCGM not installed), dltop falls back to NVML's single lumped SM% (the aggregate compute-utilization proxy shown by nvidia-smi) and prints a footer telling you how to enable the full split on a data-center GPU.

Multi-GPU

Every chart is grouped one domain per GPU — never mixed onto a shared axis. On a box with more than one GPU, dltop adds a host chart plus one chart per GPU per tab (so a 2-GPU box shows 3 stacked charts on the Compute tab: Host, GPU 0, GPU 1), an info card row per GPU, and a toggle bar to show/hide individual GPUs across every chart at once.

Screenshots

Captured in --demo mode (synthetic 2-GPU telemetry — see Demo mode). Five tabs, all on one shared time-series axis.

All

The default overview — every metric on one axis, with CPU, RAM, GPU SM and GPU VRAM on by default. Glance once: is anything busy?

dltop — All tab

Compute

Host CPU plus the GPU compute engines. On data-center GPUs the DCGM split breaks SM into Tensor, FP32, FP16 and FP64 — see exactly which math your model is doing.

dltop — Compute tab

Memory

Host RAM, GPU VRAM and VRAM bandwidth — watch memory fill as a model loads and catch bandwidth saturation.

dltop — Memory tab

System

PCIe in/out, GPU power draw, disk and network — the plumbing around the GPU.

dltop — System tab

Table

Every series — host, per-GPU, and any auto-discovered Prometheus metric — as a row of rolling-window stats (Now, Mean, Median, Stddev) over the last --window seconds. Four buttons copy the current snapshot straight to the clipboard: Markdown, web table (HTML), Excel (TSV), or a capture-metadata block (timestamp, dltop version, hostname, OS, CPU, RAM, GPU(s), driver/CUDA versions, and any Prometheus endpoints) — handy for pasting into a bug report or a training-run log.

dltop — Table tab

Installation

From PyPI (recommended)

pipx install dltop

pipx installs dltop into its own isolated environment while still putting the dltop command on your PATH — the right way to install a standalone CLI tool. A plain pip install works too:

pip install dltop

For development

git clone https://github.com/rsnk96/dltop && cd dltop
pip install -e ".[test]"

Python 3.11+ required. The tool is Linux-only (needs NVML + optionally dcgmi).

Usage

Once installed, dltop is callable from any directory — the same way htop is:

dltop                   # 0.5s refresh, DCGM if available
dltop -i 1              # 1s refresh
dltop --no-dcgm         # NVML-only (skip DCGM even if installed)
dltop --window 120      # stats window for the Table tab, seconds (default 60)
dltop --no-discover     # disable Prometheus /metrics auto-discovery
dltop --demo            # synthetic 2-GPU telemetry, no NVIDIA hardware needed
dltop --demo 4          # synthetic N-GPU telemetry
dltop --version         # print the installed version and exit
dltop --help

Key bindings (in the TUI)

Key Action
q, Q Quit
space, p Pause / resume sampling

Switch tabs (All · Compute · Memory · System · Table) by clicking them, or with / when the tab bar is focused. Each chart has per-series checkboxes underneath to toggle individual lines on or off.

Demo mode (no GPU needed)

--demo [N] swaps NVML/DCGM for a synthetic N-GPU source (default 2) so you can try, develop, or screenshot dltop on a laptop with no NVIDIA hardware at all — it's also what scripts/capture_screenshots.py uses to generate the images above.

Prometheus auto-discovery

Local services — training loops, inference runtimes like vLLM, node exporters — often already publish metrics in Prometheus format. On startup (unless --no-discover is passed), dltop pulls those in automatically, in three steps:

  1. Finds local web services — enumerates the TCP ports listening on localhost (via psutil, falling back to ss -lnt).
  2. Checks each for a /metrics endpoint — probes with a short-timeout GET /metrics and keeps any response that parses as Prometheus text-exposition format.
  3. Renders them — up to 30 gauge/counter metrics per endpoint become series in their own peak-scaled Prometheus chart on the All tab (and rows on the Table tab), shown by default and scraped on a background thread every max(--interval, 1) seconds. Toggle any off with the per-series checkboxes.

Histograms and summaries are skipped (their component series aren't meaningful as single lines). Disable the whole probe with --no-discover if you'd rather not have dltop touch other local sockets.

Related projects

dltop owes a lot to the terminal monitors that came before it:

  • htop — the classic interactive process and CPU monitor.
  • btop — a polished all-round system monitor (CPU, memory, disk, network).
  • nvtop — an htop-style monitor for AMD / NVIDIA / Intel GPUs.
  • nvitop — an interactive NVIDIA GPU process viewer.

We use and admire all of these. None of them, individually or together, met the needs we had internally: a single view that splits GPU compute into the lanes a CV/AI engineer reasons about — SM, Tensor, FP16/FP32/FP64 — and the media engines (NVENC/NVDEC), overlaid against host CPU/RAM/IO on one time-series, so you can see where a streaming-analytics pipeline actually bottlenecks. So we built dltop.

Enabling the full compute split (DCGM)

On a data-center GPU (A100, H100, L4, T4, etc.) you can install DCGM to unlock the per-lane breakdown:

# Ubuntu / Debian
sudo apt install datacenter-gpu-manager
sudo systemctl --now enable nvidia-dcgm

Consumer GeForce cards (RTX 4090, 3090, etc.) have these profiling fields gated by NVIDIA at the driver level — DCGM will install but return no profiling data. dltop detects this at startup and falls back silently.

Runtime requirements

  • NVIDIA driver + CUDA runtime (any version supported by nvidia-ml-py)
  • DCGM service (optional, for the full compute-lane split)
  • A terminal (TTY) if you want the keyboard shortcuts — piping to a non-TTY still renders frames but disables keystroke handling

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dltop-0.2.2.tar.gz (52.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dltop-0.2.2-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file dltop-0.2.2.tar.gz.

File metadata

  • Download URL: dltop-0.2.2.tar.gz
  • Upload date:
  • Size: 52.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dltop-0.2.2.tar.gz
Algorithm Hash digest
SHA256 6ea74b1c129d8a524f3cff7a25955f4f66015e273d29860a563cbfde8fcc0df1
MD5 bd4d31ecb95b9192694444bc11becc48
BLAKE2b-256 7d82c1804661eac19bdc1322f3365b93b9ae1b515ebcba49acc04e0b9a592b79

See more details on using hashes here.

Provenance

The following attestation bundles were made for dltop-0.2.2.tar.gz:

Publisher: release.yml on rsnk96/dltop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dltop-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: dltop-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dltop-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 47cb7c41284d3c5f6198d1a97f56fed4d0573c00b209e2b5d926d6ddade01daf
MD5 5d3e020cdb84952cace8851124f5f078
BLAKE2b-256 75fd6628d7dea2dcc86297818c3fef53e017328dd8cc519d354238c440b0f815

See more details on using hashes here.

Provenance

The following attestation bundles were made for dltop-0.2.2-py3-none-any.whl:

Publisher: release.yml on rsnk96/dltop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page