Проблема стандартных мониторов
Стандартный диспетчер задач Windows или nvidia-smi часто показывают лишь общую цифру: «15 ГБ использовано». Это не отвечает на ключевые вопросы разработчиков и дата-сайентистов: какие именно модели занимают память? Сколько весит KV-кэш? Загружена ли модель полностью в VRAM или работает через системную память (spilling)?
Проект GPU Task Manager (автор — Шон Шансельман) позиционируется как htop для GPU. Он связывает активность процессов с загруженными рантаймами, файлами моделей и детальной разбивкой буферов LLM.
Ключевые возможности и метрики
Инструмент работает локально, поддерживая Windows, Linux (включая WSL) и macOS на Apple Silicon. Он измеряет не только общую загрузку, но и:
- Per-process VRAM: сколько памяти занимает каждый процесс.
- Engine Activity: загрузка SM, энкодера и декодера (для NVIDIA).
- LLM Breakdowns: разделение памяти на веса модели, KV-кэш и вычислительные буферы (на основе анализа GGUF и mapped files).
- Spill / Paged Memory: выявление случаев, когда данные выгружаются в системную RAM.
Поддержка платформ и драйверов
Инструмент использует нативные API: NVML для NVIDIA и AMD ADL для AMD. Он не требует установки CUDA Toolkit или Python-окружения при использовании портативных версий.
| Платформа / Среда | Поддержка NVIDIA | Поддержка AMD | Особенности работы |
|---|---|---|---|
| Windows (Native) | Полная (WDDM) | Полная (ADL) | Детальный разбор процессов, VRAM, температур и PCIe. |
| Linux (Native) | Полная (NVML) | Частичная (amdgpu) | AMD: загрузка, температура, мощность через sysfs. Без ROCm. |
| WSL 2 | Полная (NVML) | Не поддерживается | Работает в режиме интероперабельности. Видит процессы хоста. |
| Docker / Containers | Полная | Не поддерживается | Автоматическое сопоставление PID хоста и контейнера через libcuda. |
| macOS (Apple Silicon) | Не поддерживается | Не поддерживается | Поддержка Metal-утилит для GPU Apple. |
Практическое применение
В тестах инструмент успешно идентифицировал процессы PyTorch в контейнерах (Vast.ai), показывая точное распределение памяти (1.12, 2.52 и 1.59 ГБ) и загрузку GPU. Для LLM-раннеров (например, Ollama с моделью qwen3:0.6b) он автоматически определял источник модели, разделял память на веса и KV-кэш, а также отображал это в терминальном интерфейсе (TUI).
Важно отметить: инструмент является экспериментальным. Классификация моделей и разбивка памяти основаны на эвристиках (анализ mapped files, командных строк и метрик NVML), а не на прямом дампе VRAM. Это означает, что некоторые данные могут быть оценочными, особенно для сложных сценариев с несколькими моделями в одном процессе.
Установка
Инструмент доступен через PyPI и как портативные сборки для Windows (x64 и ARM64). Для установки через uv (рекомендуемый способ):
uv tool install gputaskman
Или через pipx:
pipx install gputaskman
Для Windows без Python можно скачать портативный ZIP с GitHub Releases. Запуск осуществляется командой .\gputaskman.exe или .\gputaskman.exe --json для вывода в формате JSON.
Источник: Github ↗
