nvidia-smi
NVIDIA System Management Interface
nvidia-smi — утилита командной строки для мониторинга и управления GPU NVIDIA. Показывает утилизацию, потребление VRAM, температуру, мощность и запущенные процессы.
Что такое nvidia-smi
nvidia-smi (NVIDIA System Management Interface) — CLI-утилита, поставляемая с драйвером NVIDIA. Основной инструмент для мониторинга GPU на серверах.
Основные команды
# Общий статус всех GPU
nvidia-smi
# Непрерывный мониторинг (каждые 1 сек)
nvidia-smi -l 1
# Только утилизация и память (компактно)
nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv
# Процессы, использующие GPU
nvidia-smi pmon -c 1
# Подробная информация о GPU
nvidia-smi -q -i 0
Чтение вывода
+---------------------------+
| GPU Name TCC/WDDM |
| Fan Temp Power GPU-Util|
| Memory-Usage |
+===========================+
| 0 NVIDIA A100 Off |
| N/A 42C 65W 78% |← GPU Utilization
| 45231MiB / 81920MiB |← VRAM (used/total)
+---------------------------+
GPU Utilization — что на самом деле показывает эта метрика
Важно: GPU-Util в nvidia-smi — одна из самых обманчивых метрик. Она показывает не процент загрузки вычислительных ядер, а долю времени за последний период (1-2 секунды), в течение которого хотя бы один CUDA-kernel выполнялся на GPU.
Другими словами, если GPU выполнял хотя бы один kernel (пусть даже тривиальный cudaStreamQuery) хотя бы часть каждого интервала — метрика покажет 100%.
Почему это вводит в заблуждение
Команда Яндекса при обучении foundation-моделей на суперкомпьютерах обнаружила, что GPU показывали 100% утилизации при минимальном потреблении энергии (~78 Вт вместо 300+ Вт). Причина: библиотека NCCL при синхронизации данных между GPU использует busy_loop с постоянными вызовами cudaStreamQuery, ожидая завершения обмена данными через InfiniBand. Этот polling-цикл создаёт непрерывную «активность» на GPU, хотя реальных вычислений нет.
nvidia-smi --query-gpu=gpu_bus_id,power.draw,temperature.gpu,utilization.gpu --format=csv
pci.bus_id, power.draw [W], temperature.gpu, utilization.gpu [%]
00000000:08:00.0, 78.41 W, 32, 100 % ← 100% util, но всего 78W!
00000000:0E:00.0, 77.84 W, 31, 100 % ← A100 TDP = 300W
00000000:48:00.0, 81.60 W, 31, 100 % ← GPU холодные (31-32°C)
Принцип Ландауэра: если нет потребления энергии — нет вычислений. 100% утилизация при 78 Вт на A100 (TDP 300 Вт) — верный признак фейковой нагрузки.
Как правильно оценивать загрузку GPU
Вместо utilization.gpu используйте комбинацию метрик:
| Метрика | Что показывает | Как получить |
|---|---|---|
| Power Draw | Реальное потребление (Вт) — самый честный индикатор | nvidia-smi --query-gpu=power.draw |
| SM Active | % времени, когда SM реально выполняют warps | DCGM: sm_active |
| SM Occupancy | % слотов warp, занятых на активных SM | DCGM: sm_occupancy |
| DRAM Active | % времени активной передачи данных в/из VRAM | DCGM: dram_active |
| Tensor Active | % времени, когда Tensor Cores заняты | DCGM: tensor_active |
| Temperature | Под нагрузкой GPU горячие (70-83°C), без — холодные | nvidia-smi --query-gpu=temperature.gpu |
Кардиограмма GPU: метод Яндекса
Для диагностики проблем в распределённом обучении строят «кардиограмму» — график потребления энергии GPU с частотой ~1 сек. На масштабе в десятки секунд становятся видны:
- Периоды простоя — GPU ждут обмена данными (AllReduce)
- Зависания — GPU стоят минуты из-за проблем с InfiniBand
- Закон Амдала — последовательные операции (checkpoint на медленное хранилище) останавливают все GPU
# «Кардиограмма» GPU — мониторинг энергопотребления
nvidia-smi --query-gpu=index,power.draw,temperature.gpu --format=csv -l 1
Ключевые метрики
| Метрика | Описание | Норма |
|---|---|---|
| GPU-Util | % времени с активным kernel (не загрузка!) | См. power.draw |
| Power Draw | Потребление (Вт) — лучший индикатор нагрузки | 60-90% от TDP |
| Memory-Usage | Использование VRAM | Зависит от модели |
| Temperature | Температура GPU | < 83°C |
| SM Clock | Частота ядер | Throttling если < max |
Мониторинг в продакшене
Для production-мониторинга используйте:
- DCGM (Data Center GPU Manager) — метрики для Prometheus (sm_active, sm_occupancy, tensor_active)
- nvitop — интерактивный TUI (аналог htop для GPU)
- gpustat — компактный вывод для скриптов
# nvitop — лучший интерактивный мониторинг
pip install nvitop
nvitop
# DCGM — профессиональный мониторинг
dcgmi dmon -e 155,156,203,204,210
# 155=sm_active, 156=sm_occupancy, 203=tensor_active, 204=dram_active, 210=power