Настройка мониторинга GPU-утилизации и VRAM с DCGM

Когда парк ускорителей растёт, разрозненные показатели перестают отвечать на главный вопрос: где простаивает мощность и почему падает отдача. Мы настраиваем мониторинг GPU под ключ — единый сбор метрик по всему парку, понятные отчёты и оповещения для руководителя, а не набор графиков. Передаём регламенты и правила оповещений — команда работает с данными сама.
Часто задаваемые вопросы

Почему мониторинг GPU врёт: где теряются метрики

Утилизация ускорителей почти всегда измеряется усреднением: одна цифра на узел за минуту. Такая метрика скрывает главное — распределение. Средняя загрузка в 60% по восьми картам одинаково описывает и ровный режим, и картину, где половина карт работает на пределе, а половина простаивает и ждёт задач.

Вторая потеря — память. Занятая память процесса и реально доступный объём видеопамяти расходятся: фрагментация, недоосвобождённые буферы и кэш ядра остаются в счётчиках после падения задачи. В итоге новая задача не стартует при формально свободном ресурсе, а система продолжает считать узел здоровым.

Отдельный класс — деградация карты. Снижение частот по температуре и питанию, растущее число исправляемых ошибок памяти, падение пропускной способности: карта отвечает медленнее, но формально не отказывает, поэтому на усреднённом графике её загрузка выглядит нормальной. Простой оборудования при этом не фиксируется, а очередь заданий и время ожидания специалистов растут.

Так мониторинг GPU превращается в отчётность, а не в инструмент. Потеря метрик по отдельным картам — это невидимый простой ускорителей, который оплачивается сроком обучения моделей и повторными запусками. Снимается это сбором показателей напрямую с каждой карты через DCGM: загрузка ядер, занятость памяти, снижение частот и ошибки видны по каждому ускорителю отдельно — разбираем, как это устроено.

Что даёт непрерывный сбор телеметрии ускорителей

Непрерывный сбор телеметрии ускорителей — это не дашборд ради красивых графиков, а набор порогов, по которым команда принимает решения. Если метрики ложатся в хранилище постоянно, а не снимаются раз в сутки, деградацию видно за часы до того, как она превратится в отказ сервиса.

Проверяем по чек-листу: у каждого сигнала есть признак проблемы и заранее описанное действие. Без этого мониторинг превращается в поток цифр, которые никто не читает.

Сигнал Признак проблемы Действие
Загрузка вычислителей Просадка на части узлов при общей норме Перераспределить нагрузку между узлами
Видеопамять Плавный рост потребления без роста запросов Найти утечку, перезапустить воркер до отказа
Ошибки и перезапуски Редкие сбои, незаметные в средних значениях Раннее оповещение дежурному инженеру
Частота под нагрузкой Снижение отдачи при длительной работе Снять задачи с узла, проверить охлаждение
Очередь запросов Рост времени ответа модели Расширить пул ускорителей до насыщения

Собранная по таким правилам телеметрия меняет время реакции: инцидент ловится на этапе отклонения метрики, а не по жалобе пользователя. Выравнивание нагрузки по парку поднимает среднюю утилизацию и убирает ситуацию, когда часть ускорителей простаивает, а часть работает на пределе.

Режимы мониторинга GPU: агент, коллектор, гибрид

Способ сбора показателей утилизации и видеопамяти определяется тем, где запускается процесс, читающий счётчики ускорителя. Если он живёт на каждом узле рядом с рабочими нагрузками, данные точнее привязаны к конкретным процессам; если один общий сборщик опрашивает весь парк по сети, проще эксплуатация. Отсюда три схемы, между которыми обычно выбирают.

Режим Когда подходит Ограничения
Локальный агент на каждом узле Разные команды и нагрузки в одном парке, нужна разбивка по процессам и устройствам Больше точек отказа и обновлений, агент делит ресурсы с рабочей нагрузкой
Общий коллектор Однородный парк, единый владелец, приоритет — простота сопровождения Потеря сети на узле выглядит как тишина, а не как сбой; нет локальной детализации, опрос реже
Гибридная схема Крупный парк, где нужны и детализация, и единая точка обзора Сложнее настройка и отладка, требуется согласованность меток между уровнями

Выбор диктует не размер парка, а требуемая детализация и допустимое время «слепой зоны». Агентная схема даёт привязку метрики к устройству и процессу, поэтому на ней строят разбор инцидентов; общий коллектор дешевле в сопровождении, но при перезапуске узла теряется весь его срез целиком.

Гибрид читается как компромисс: на узлах остаётся лёгкий сборщик, отдающий агрегаты наверх, а детальные срезы запрашиваются по требованию. Единая точка обзора сохраняется, и расследование не упирается в отсутствие локальных данных. Ограничение одно — согласованность имён узлов, устройств и процессов между уровнями, иначе метрики не сходятся при разборе.

Этапы внедрения: от инвентаризации ускорителей до сдачи

Мониторинг ускорителей начинается не с графиков, а с инвентаризации. Пока неизвестно, какие карты стоят в каких узлах, как они связаны между собой и какие команды их делят, любая метрика висит в вакууме. Порядок работ у нас фиксированный — так результат воспроизводим, а не собран из разовых скриптов, которые работают до первой перезагрузки.

  1. Инвентаризация парка. Обходим узлы, фиксируем модель ускорителей, объём памяти, топологию связей и распределение по командам. Параллельно сверяем факт с учётными системами — расхождения обычно и есть источник слепых зон, где задачи падают без объяснимой причины.
  2. Схема сбора. Разворачиваем сборщик метрик уровня оборудования и определяем набор сигналов: загрузка вычислителя, занятая память, температура, снижение частоты при перегреве, ошибки памяти. Частоту опроса выбираем как компромисс между детализацией и объёмом хранилища.
  3. Правила оповещений. Каждый алерт привязываем к действию: что именно должен сделать дежурный, когда он сработал. Пороги ставим от наблюдаемого профиля нагрузки, а не из документации, иначе дежурный тонет в шуме и перестаёт реагировать.
  4. Проверка под нагрузкой. Прогоняем типовые задачи, включая пиковые, и смотрим, ловит ли система просадки и утечки памяти до того, как они положат обучение. Отдельно проверяем поведение при отказе одного узла.
  5. Передача в эксплуатацию. Отдаём регламент реагирования, перечень ответственных и инструкцию по добавлению новых узлов в мониторинг. После сдачи команда заказчика сама расширяет покрытие, не возвращаясь к нам за каждой картой.

Итог — прозрачная картина парка: видно, кто и сколько занимает ускорители, где простой, а где перегруз, и какой сбой уже начался.

Комплект поставки: конфигурации, правила оповещений, регламенты

Комплект поставки — это не скриншоты дашбордов, а рабочая обвязка, которую можно версионировать, ревьюить и разворачивать на новом узле без авторов. Ниже — что именно переходит вашей команде вместе с настроенным мониторингом GPU.

  • Файлы конфигураций сбора. С каких узлов и задач снимаются метрики, интервал опроса, набор счётчиков: утилизация вычислителя, занятая и свободная память, температура, троттлинг, ошибки драйвера.
  • Шаблоны правил оповещений. Пороги с окнами усреднения, разделение на предупреждение и инцидент, подавление повторов и группировка — чтобы дежурного не заваливало одинаковыми сообщениями на всю стойку.
  • Схема сбора и хранения. Поток от узлов до хранилища метрик, срок хранения, разметка по узлам, задачам и командам: по ней видно, чей процесс занял память, а не только что память кончилась.
  • Дашборды. Панели по узлам и по отдельным задачам обучения: загрузка, память, очередь, узкие места — с историей, а не только с текущим срезом.
  • Инструкция дежурному. Что делать при срабатывании: порядок проверки, типовые причины, когда перезапускать задачу, а когда поднимать разработчика, и до какого уровня эскалировать.
  • Регламент сопровождения. Где лежат конфигурации в системе контроля версий, кто и как меняет пороги, как изменение проверяется перед выкаткой на боевые узлы.
  • Скрипты развёртывания и протокол приёмки. Установка экспортёров на новых узлах одной командой плюс записи тестовых срабатываний: подтверждение, что каждое правило доходит до дежурного.

Всё перечисленное передаём в вашем хранилище кода, а не архивом в переписке — команда продолжает работу с тем же комплектом, что и мы.

Кейс: единый сбор метрик для парка ускорителей

Парк ускорителей из нескольких десятков машин обслуживала дежурная команда: занятую память и загрузку проверяли вручную по расписанию, а о перегрузке узнавали от исследователей — запуск падал ночью, и до утра узел простаивал. Руководитель направления называл две цены такого режима: часы дежурного уходили на сбор данных вместо разбора, а сбои находили по факту, сдвигая сроки обучения моделей.

Что изменили

Собрали единый сбор телеметрии на базе DCGM: служба на каждом узле отдаёт загрузку, занятую память, температуру и состояние процессов в общее хранилище, а правила оповещения привязали к порогам, а не к обходам по расписанию. Сигналы развели по критичности: падение процесса и перегрев — немедленный вызов, устойчивый рост памяти — предупреждение с запасом времени на реакцию. Историю храним с разным шагом: часто за последние сутки, реже за месяцы, — этого хватает для разбора инцидентов, а объём данных не растёт бесконтрольно.

Метрики до и после

Доля ручных проверок упала с ежедневного обхода до выборочного контроля раз в неделю — дежурный разбирает отклонения, а не собирает показания. Время обнаружения сбоя сократилось с часов (по жалобе пользователя) до минут: оповещение приходит на отклонении, а не после упавшего запуска. Ушёл отдельный класс отказов — незаметная деградация, когда процессы вытеснялись по памяти и задача молча теряла производительность. Отказоустойчивость выросла за счёт того, что узлы с аномалией выводятся из планирования до попадания на них новой работы.

Что делать, если DCGM уже развёрнут, но метрики не сходятся?

Расхождение показаний почти никогда не означает, что сломан сборщик метрик. Существующая схема обычно тянет данные из нескольких источников: счётчики ускорителя, метрики по отдельным процессам и агрегаты, которые уже собрала система хранения. Утилизация считается по занятости вычислительных блоков, а память — по выделению со стороны драйвера, поэтому эти цифры описывают разные вещи.

Начинаем со сверки источников. Снимаем значения прямо с агента на узле, сравниваем с тем, что доехало до системы хранения, и с суммой по контейнерам. Расхождение на первом шаге — настройка агента, на втором — потери при передаче и агрегации, на третьем — разная разметка по процессам.

Самый частый виновник — интервал опроса. Если период сбора длиннее цикла перераспределения памяти внутри задачи, пики сглаживаются, и сумма по узлу перестаёт сходиться с суммой по процессам. Интервал выравнивают на всех звеньях, а детальные счётчики по процессам включают точечно, иначе сбор начинает конкурировать с самой задачей.

Бывает, что после правки конфигурации цифры не меняются: агент NVIDIA DCGM поднимает старый набор счётчиков из собранного образа. Нужна пересборка агента с обновлённым описанием полей и перезапуск контейнеров — задачи при этом не останавливаются, сбор идёт параллельно с вычислениями.

Дальше сверка на истории: сутки данных по старой и новой схеме, отдельно по утилизации и отдельно по памяти. Остаточная разница между зарезервированным и реально используемым объёмом памяти — норма, всё прочее указывает на незакрытый источник.

Технические сомнения: накладные расходы, доступы, шум

Три возражения инженеры задают раньше остальных: сколько ресурсов съедает сам сбор, как вытащить метрики из закрытого контура и не превратится ли оповещение в поток писем, который начнут игнорировать. Ниже — как мы закрываем каждое на этапе настройки, а не после запуска.

Сбор метрик замедлит вывод модели?

Агент снимает агрегированные счётчики ускорителя — загрузку, занятую память, температуру — и не читает содержимое памяти, поэтому сбор идёт фоновым процессом. Частота опроса настраивается раздельно: деградацию ловим на коротком интервале, отчётность по утилизации — раз в минуту. Долю времени, потерянного на сбор, видно на самом дашборде.

Контур закрыт, наружу метрики не отдать

Агент ставится на хосты отдельным сервисом с минимальными правами, а метрики уходят в локальный коллектор внутри периметра. Если выход наружу запрещён полностью, разворачиваем сборщик в контуре, а выгрузку отдаём уже согласованным каналом — файлом по расписанию или через веб-интерфейс. Учётные данные не хранятся открытым текстом.

Алерты будут ложными и шумными

Порог срабатывает не по мгновенному значению, а по удержанию в течение окна — одиночный всплеск не будит дежурного. Правила разные для памяти, температуры и падения производительности, уровни — предупреждение, рабочая смена и ночной вызов. Первую неделю пороги подкручиваем по факту, чтобы оповещений оставалось мало.

Все три пункта фиксируем в документации вместе с конфигурацией — чтобы дежурный менял пороги и частоту опроса сам, без нашей помощи.

Обсудим задачу: что нужно знать перед стартом

Чтобы вернуться с оценкой, а не с общими словами, нам достаточно нескольких вводных. Опишите, где живут ускорители — свой кластер или арендованные мощности, сколько узлов и карт, какие задачи на них выполняются и как делятся между командами. Этого уже хватает, чтобы понять объём: развёртывание агента сбора на каждом узле, хранилище временных рядов и панели мониторинга отличаются по трудозатратам в разы в зависимости от масштаба.

Что стоит подготовить к разговору:

  • перечень узлов и ускорителей: сколько карт, какие модели, кто и как их занимает;
  • текущее состояние наблюдаемости: штатный сборщик метрик производителя или собственный агент, куда пишутся данные, где смотрят графики;
  • доступы: какой уровень прав готовы выдать на узлы и систему мониторинга, кто подтверждает изменения;
  • характер нагрузки: обучение или вывод модели, ожидаемые пики, есть ли окна на перезапуск агентов;
  • правила оповещений: кому и как приходят сигналы, какие пороги считаются критичными;
  • целевые показатели: что нужно видеть в первую очередь — загрузку вычислителей, заполнение видеопамяти, ошибки вычислений или простои.

В ответ вы получите план внедрения по этапам с порядком работ и сроками, состав панелей и правила оповещений, схему развёртывания с ролями доступа, а также перечень метрик, попадающих в регулярную отчётность. Если на старте чего-то не хватает, часть вводных уточняем сами в ходе короткого разбора.

Опишите задачу в свободной форме: конфигурацию, узкие места, ограничения по окнам работ. Вернёмся с оценкой и планом внедрения.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142