Мониторинг и управление GPU NVIDIA через nvidia-smi

nvidia-smi (NVIDIA System Management Interface) — штатная CLI для мониторинга и частичного управления GPU NVIDIA. Идёт вместе с драйвером, отдельный «тяжёлый» стек не нужен. Ниже — базовая сводка, query/format, power limit, процессы и простое логирование.

Базовая сводка по GPU

Команда без аргументов показывает таблицу по всем видимым картам:

nvidia-smi

В шапке обычно видны версия драйвера и заявленная поддержка CUDA. В таблице по GPU:

  • имя модели, bus-id, persistence mode;
  • вентилятор, температура, perf state, power draw / power cap;
  • занятая / суммарная видеопамять;
  • GPU-Util, compute mode;
  • ниже — процессы, которые держат контекст на GPU (PID, тип, память).

Условный фрагмент вывода (цифры и модель зависят от железа):

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05   Driver Version: 535.104.05   CUDA Version: 12.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|   0  NVIDIA RTX 4090      On  | 00000000:01:00.0 Off |                  Off |
| 34%   65C    P8   15W / 450W  |  4000MiB / 24576MiB  |     12%      Default |
+-------------------------------+----------------------+----------------------+

Обновление «как top» через watch:

watch -n 2 nvidia-smi

Либо встроенный loop у самой утилиты: nvidia-smi -l 2 (интервал в секундах).

Версия драйвера и CUDA

Для скриптов удобнее машинночитаемый CSV через --query-gpu и --format:

nvidia-smi --query-gpu=driver_version,cuda_version --format=csv

Пример ответа:

driver_version, cuda_version
535.104.05, 12.2

Поле cuda_version в nvidia-smi — это максимальная версия CUDA, которую заявляет драйвер, а не обязательно то, что установлено в /usr/local/cuda. Для точной версии toolkit смотрите nvcc --version, если toolkit реально стоит.

Энергопотребление и power limit

Текущий draw:

nvidia-smi --query-gpu=power.draw,power.limit,power.max_limit --format=csv

Ограничить power limit (Вт), например до 100:

sudo nvidia-smi -pl 100
# или для конкретной карты:
sudo nvidia-smi -i 0 -pl 100

Лимит должен попадать в допустимый для модели диапазон (min/max limit). На многих системах нужны root-права и иногда включённый persistence mode. После ребута лимит часто сбрасывается — для постоянства обычно ставят unit/cron или включают persistence и скрипт на старте.

Persistence mode (драйвер не выгружается, быстрее «просыпается» GPU):

sudo nvidia-smi -pm 1

Процессы на GPU

Кто держит карту — внизу обычного nvidia-smi или через process monitor:

nvidia-smi pmon -s um

Условный вид:

# gpu   pid  type  sm   mem  enc  dec  command
  0    1245   C    50%  ...    0    0  python3
  0    3765   G     5%  ...    0    0  Xorg
  • C — compute (CUDA и подобные нагрузки);
  • G — graphics (Xorg, композитор, игры и т.п.);
  • C+G — смешанный тип, если показывается.

Список в CSV:

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

Зависший job — сначала мягко kill PID, при необходимости kill -9 PID. На shared-серверах сначала убедитесь, что процесс ваш: чужой CUDA-job «убивать» без договорённости — плохая идея.

Логирование

Простой поток полного вывода каждые 5 секунд в файл:

nvidia-smi -l 5 > gpu_log.txt

Для метрик удобнее сразу query + CSV (его проще парсить и класть в Prometheus/Grafana через exporter или свой скрипт):

nvidia-smi --query-gpu=timestamp,name,temperature.gpu,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw --format=csv -l 5 > gpu_metrics.csv

Выборочный разбор уже записанного «красивого» лога:

grep -E 'MiB|%' gpu_log.txt | head

Полезные query-поля

Частый набор для мониторинга одной строкой:

nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used,memory.total,power.draw,power.limit --format=csv,noheader,nounits

Полный список поддерживаемых полей:

nvidia-smi --help-query-gpu

На что смотреть на практике

  • Memory-Usage почти full, util низкий — часто «утёк» или закеширован контекст, либо модель лежит в VRAM без активных kernel.
  • Util 100%, power у cap — карта упёрлась в лимит мощности или термолимиты (смотрите temp и throttling через dmesg/другие утилиты при необходимости).
  • Несколько GPU-i 0,1 или фильтр в query; проверяйте, что job сел на нужный device (CUDA_VISIBLE_DEVICES).
  • MIG / vGPU — вывод и возможности отличаются; для MIG есть отдельные режимы и query.

Итог

nvidia-smi закрывает повседневные задачи: живая картина по загрузке и VRAM, версии драйвера, power limit, кто занимает GPU, простое логирование в CSV. Для продакшен-мониторинга кластера обычно дополняют DCGM, Prometheus nvidia_gpu_exporter или облачными агентами — но для отладки на конкретной машине достаточно одной утилиты из комплекта драйвера.

Источники и ссылки


Комментарии загружаются…