▮ Низкая загрузка графического процессора

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

Сегодня я хотел бы рассказать, где могут быть узкие места, вызывающие это, и как их настроить, чтобы достичь коэффициента использования графического процессора, близкого к 90%.

▮ Мониторинг показателей графического процессора

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

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

nvidia-smi \
--query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.free,memory.used\--query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.free,memory.used\
--format=csv \
-l 1

Результат будет следующим.

timestamp, name, utilization.gpu [%], utilization.memory [%], memory.used [MiB], memory.free [MiB], memory.used [MiB]
2023/03/14 07:52:07.454, NVIDIA GeForce RTX 3080 Ti, 81 %, 57 %, 5959 MiB, 6148 MiB, 5959 MiB
2023/03/14 07:52:08.455, NVIDIA GeForce RTX 3080 Ti, 82 %, 56 %, 5959 MiB, 6148 MiB, 5959 Mi3/03/14 07:52:07.454, NVIDIA GeForce RTX 3080 Ti, 81 %, 57 %, 5959 MiB, 6148 MiB, 5959 MiB
2023/03/14 07:52:09.456, NVIDIA GeForce RTX 3080 Ti, 78 %, 52 %, 5959 MiB, 6148 MiB, 5959 MiB

▮ Методы использования

Основной рабочий процесс при обучении модели будет состоять из следующего шага.

  1. Загрузить пакетные данные
  2. Запустить вывод
  3. Рассчитать метрики для оценки модели

Обычно шаги 1 и 3 выполняются на ЦП, и это может легко стать узким местом при обучении модели. Это связано с тем, что независимо от того, насколько быстро выполняется вывод на графическом процессоре, если шаги на ЦП медленные, графическому процессору придется ждать поступления следующих данных. Во время этого «ожидания» машина не сможет использовать GPU.

Учитывая вышеизложенное, вот несколько способов улучшить использование графического процессора.

Способ 1. Предварительная загрузка данных

Как и в рабочем процессе из предыдущего раздела, в некоторых случаях во время обучения используется «ленивая загрузка» (считывание изображения при получении пакета данных). Это означает, что вам придется загружать данные с использованием ЦП каждый раз, когда процесс обращается за следующими входными пакетными данными.

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

Если вам интересно, посмотрите мой предыдущий пост о реализации предварительной загрузки с помощью PyTorch.

Метод 2. Удаление ненужных расчетов показателей

Допустим, наш процесс обучения вычисляет оценку F1 и долговую расписку после прогнозирования модели для оценки модели.

Расчет каждой метрики выполняется с помощью ЦП, поэтому это также может стать узким местом. Если вам не нужны ВСЕ показатели, удаление некоторых из них может помочь улучшить использование графического процессора.

Способ 3. Размер пакета

Изменение размера пакета также может помочь увеличить загрузку графического процессора. Увеличение размера пакета означает, что в модель вводится больше данных, что приводит к более параллельным вычислениям.

Однако то, насколько вы можете увеличить размер пакета, зависит от ваших аппаратных ресурсов. Если вы слишком сильно увеличите размер пакета, процесс обучения может быть остановлен из-за нехватки памяти.

Метод 4. Методы выделения памяти

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