MLOps и инструменты 16 просмотров

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

Связанные термины

Используется в
Включает

Попробуйте на практике

Арендуйте GPU и запустите ML-модели в Intelion Cloud

Начать работу