Пошаговое руководство о том, как получить максимальную отдачу от ваших графических процессоров

Управление ресурсами графического процессора так же важно, как и управление средой Python, особенно если вы работаете над несколькими проектами или сотрудничаете с командой. Как мы обсуждали в предыдущем сообщении в блоге (посмотрите здесь), конфликтующие обучающие задания, запущенные на одном и том же оборудовании, и ненужное выделение GPU могут быстро стать головной болью.

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

Почему это важно?

Вы когда-нибудь оказывались посреди проекта по науке о данных, жонглируя несколькими задачами и сроками, когда вдруг ваш прогон терпит неудачу после 8 часов обучения, незадолго до того, как он должен был закончиться? Кто-то явно пытался запустить что-то на вашем GPU, когда он уже использовался. Это стресс, снижает производительность вашей команды и вызывает задержки в проектах.

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

Итак, давайте засучим рукава и запачкаем руки в мире управления средой графических процессоров с помощью Genv!

Настройка: объедините их всех, управляйте ими всеми

Если у вас есть несколько компьютеров с несколькими графическими процессорами, первое, что нужно сделать, — это объединить их все для совместного использования. Объединив несколько машин вместе и используя Genv для управления ими, вы можете создать мощный кластер, способный решать сложные задачи глубокого обучения. Это легко сделать, создав текстовый файл с IP-адресами машин, а затем используя Genv remote, чтобы увидеть их.

$ cat hostfile.txt 
gpu-server-1 
gpu-server-2
$ genv remote --hostfile hostfile.txt devices
HOST               TOTAL                  AVAILABLE
gpu-server-1         1                        1
gpu-server-2         2                        2

Total 3 devices with 3 available on 2 hosts

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

Пример проекта

Допустим, у нас в команде 3 специалиста по данным. И угадай что; у нас ограниченные ресурсы. У нас есть 2 графических процессора вместо традиционного лабораторного подхода. Каждый ученый/исследователь данных работает над своим проектом. DS #1 хочет обучить языковую модель и нуждается в целом графическом процессоре. DS № 2 нужно отладить свой код, а DS № 3 работает над визуализацией данных, чтобы понять, как работать над разработкой функций на следующем этапе. Как вы могли заметить, DS #2 и #3 не нуждаются в целом GPU, так как их задачи не являются задачами, интенсивно использующими GPU.

Чтобы сделать всех счастливыми и обеспечить их продуктивную работу без каких-либо перерывов из-за нехватки ресурсов, мы позволим DS № 1 выделить 1 GPU, а № 2 и № 3 — разделить второй GPU с использованием дробей.

Итак, обо всем по порядку, мы активируем Genv, что означает, что мы находимся в среде Genv. Итак, мы идем дальше и настраиваем 1 GPU для DS 1. Поскольку ей нужен 1 GPU, она готова к обучению.

Как видно на Рис. 2, весь GPU готов для DS #1, и она не может видеть другой в своей среде. Она также увидит только свои процессы ниже, как только запустит свой скрипт.

Итак, у нас осталось только 1 GPU для DS #2 и DS #3. Поскольку у них нет тренировочных заданий, требующих интенсивного использования графического процессора, им будет достаточно совместного использования 1 графического процессора. Второй специалист по обработке и анализу данных настраивает среду с 1 графическим процессором, но настраивает для себя 4 ГБ памяти. Если он превысит этот лимит, он получит предупреждение о превышении лимита. Если вы хотите вести честную игру в качестве системного администратора или руководителя отдела обработки данных, вы также можете установить различные типы ограничений, такие как максимальный объем памяти для каждого пользователя или максимальное количество устройств, которые пользователь может подключить к среде. Genv завершит процессы, которые не соблюдают установленные правила.

Когда мы сейчас запустим nvidia-smi, вы увидите, что память графического процессора настроена в зависимости от настроенной емкости.

После того, как DS #3 выполнит ту же настройку, все настроено. Целый день обучения, отладки и визуализации может начаться прямо сейчас.

Когда все начинают работать над своими задачами, это использование и результаты процесса, которые мы видим вне какой-либо среды (см. рис. 5). Как я упоминал ранее, каждый специалист по данным будет видеть только свои собственные процессы и GPU, а не друг друга. DS #1 выделила GPU 0, и она выполняет свою работу, используя почти 90% GPU. DS #2 и DS #3 выделили GPU 1, используя в общей сложности 64% GPU. Это показывает нам, что нет необходимости давать 1 GPU на человека в каждом сценарии. Если вы тренируетесь на одном графическом процессоре и не используете максимальное использование, увеличьте размер пакета — если вы отлаживаете или выполняете нетяжелые задания, просто выделите часть графического процессора, чтобы максимально использовать общее использование. Что может быть печальнее, чем видеть, как ваш GPU бездействует? Видно более 1 бездействующего графического процессора!

Теперь предположим, что DS #2 закончил отладку своего кода и хочет начать обучение мультиклассового классификатора изображений. На этот раз 4G явно недостаточно. Когда он попытается выделить 1 целый GPU, он получит сообщение об ошибке, потому что все GPU заняты другими (вместо сбоя всех текущих тренировочных прогонов, его и других). Теперь он может поговорить с другими, чтобы узнать, когда они будут сделаны, чтобы он мог начать свою тренировочную работу. Предотвращен еще один кризис — больше не нужно разбивать или замедлять чужие прогоны.

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

Заключение

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

Обо мне

Ученый по данным, уделяющий особое внимание использованию графических процессоров и оптимизации инфраструктуры + член совета директоров TUM.ai в свободное время. Я знаю, звучит как Бойцовский клуб 😛 Я забочусь об инфраструктуре ИИ, чтобы предотвратить надоедливые проблемы, на решение которых уходят дни — айкык. В науке о данных меня особенно интересуют приложения для распределенного обучения, такие как федеративное обучение в области здравоохранения. Так что, если вы ищете кого-то, кто разбирается в науке о данных и надоедливых инфраструктурных узких местах, напишите мне в LinkedIn или Discord — давайте вместе разберемся в нашей любви к данным, графическим процессорам и всему, что связано с искусственным интеллектом.

LinkedIn | Клуб инфраструктуры искусственного интеллекта

Рекомендации

[1]Репозиторий Genv Github

[2]Документация Genv

[3]Расширение кода Genv VS

[4]Есть вопросы, пожелания?: Ссылка на сервер Discord

[5]Genv в центре внимания Open-Source Spotlight от Data Talks Club на Youtube

[6]Демонстрация Genv на Youtube