What gputaskman is, and how fresh it is
Hanselman describes gputaskman as an htop-style task manager for GPUs. He shares it under the permissive MIT license and calls it "experimental software." Release tags v0.1.0, v0.2.0 and v0.3.0 all appeared on November 3. By the time of the NeoTeo report, GitHub's Releases page labeled v0.3.5 "Latest."
I could not independently read the v0.3.5 release notes. The following timeline comes from the NeoTeo report and project documentation:
- v0.3.1: Apple Silicon macOS and native Linux AMD support.
- v0.3.4: an optional slim view, and recovery after Windows adapter changes.
- v0.3.5: Linux Intel GPU support and JSON session recording.
Treat that as the reported changelog, not something I verified against the release page.
Measured versus estimated
This is the most useful part of the documentation for anyone running local AI.
- Measurements: device and process counters. These include GPU memory, GPU-accessible system memory and engine activity by process.
- Estimates: model classifications and GGUF-derived breakdowns, including estimated model weights and KV-cache cost.
The documentation also warns against over-reading what the tool detects:
- Seeing a PyTorch/CUDA DLL in a process does not identify a model or prove it is training.
- A mapped model file does not prove the model is resident on the GPU or active.
A practical rule: use process counters to answer "which process is tied to this GPU memory?" Treat the model label and the weights/KV-cache split as clues, not proof.
A missing value is not zero
The documentation says unavailable values appear as N/A in the text and terminal display, and as null in JSON. A reported zero is a real measured zero. Examples of where data goes missing:
- WSL with host interop disabled (or
--no-host): per-process VRAM is unavailable. Device-wide readings may still appear. - Native Linux: there are no Windows-style shared-memory or commit counters, so those fields stay blank.
- Apple Silicon: CPU and GPU share unified memory, so there is no separate VRAM pool to report. The documentation also says process activity isn't split into 3D, compute, copy and video engines, and that clocks, power and temperature aren't available on this path.
- WSL with interop on: the tool matches GPU memory to Linux processes using evidence and heuristics.
*marks a match and?marks a guess, and host rows carry aW:prefix. The memory size is measured, but the inferred owner is less certain.
Scope is local GPU workloads only. CPU-only, NPU-only and cloud workloads are outside it.
Platform support
| Platform | Documented support |
|---|---|
| Windows | 64-bit Windows 10 or 11, NVIDIA or AMD GPU, current WDDM driver; portable x64 and ARM64 builds |
| Native Linux | x64 and ARM64; NVIDIA via NVML, AMD via amdgpu, Intel via i915; portable builds need glibc 2.35 or newer |
| WSL | NVIDIA documented; behavior depends on host interop |
| macOS | Apple Silicon only; run from a clone, with no portable download |
Metrics vary by vendor and driver. Neowin likewise notes that gputaskman works on Windows, Linux, WSL and Apple Silicon Macs, but that the available metrics vary by platform. The project's own example check on an AMD Radeon 860M reported per-process VRAM and activity, clocks and ASIC power, but not temperature, memory activity or PCIe readings.
Getting it running
Windows portable build (no Python needed):
- Download the x64 or ARM64 ZIP from the project's Releases page.
- Extract the whole archive.
- Keep the
_internalfolder besidegputaskman.exe. - Launch the executable from PowerShell or Windows Terminal.
The builds are unsigned. One report advises checking hashes and your own software policy before deploying it, since it's a personal GitHub repo. That is sensible advice for admins.
Python route: uv tool install gputaskman or pipx install gputaskman, then run gputaskman. Python 3.11 or later is required. The project metadata classifies it as "Development Status :: 3 - Alpha."
Useful commands documented by the project:
gputaskman --onceprints a one-time text snapshot.gputaskman --jsonprints one JSON snapshot.gputaskman record -o session.jsonlwrites periodic JSONL snapshots, with interval and duration options.gputaskman diff before.json after.jsoncompares two JSON snapshots.
Each line of a recording is a complete JSON snapshot, and recording appends to the file. A power loss can cost the last few seconds, so skip a final line that doesn't parse. The diff command is handy for a before-and-after test. For example, you could snapshot, load a model, snapshot again and compare.
The Tom's Hardware test
Tom's Hardware reported testing v0.3.0 on an RTX 4060 Laptop GPU. The reviewer found no tasks using the discrete GPU at first, then launched Unigine Valley and watched live GPU-load, VRAM and temperature charts. That is one machine and one early version. It doesn't validate v0.3.5 or every counter on every platform.
Tom's Hardware also said the most VRAM-hungry app on Hanselman's own RTX 4080S system was the desktop window manager. That is a good reminder that Windows itself can be a surprisingly large VRAM tenant.
Bottom line
gputaskman is young, alpha-stage and unsigned, so test it before putting it on managed machines. Its biggest strength is honesty about uncertainty. If you run local LLMs on Windows, WSL or Linux, trust the process counters. Treat model names and KV-cache splits as hints. And never read N/A as "zero".
References
- gputaskman GPU memory monitor: what its readings mean - NeoTeo NeoTeo · 2026-11-10T19:45:28+00:00
- github.com github.com
- gputaskman/pyproject.toml at main · shanselman/gputaskman · GitHub github.com