Как построить многофункциональную систему с несколькими графическими процессорами для глубокого обучения в 2023 году

Многофункциональная система с несколькими графическими процессорами для глубокого обучения в 2023 году' can be condensed to 'Система с несколькими графическими процессорами для глубокого обучения в 2023 году

Моя сборка глубокого обучения - работа в процессе :).

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

Цель

Создать многоядерную систему для обучения моделей компьютерного зрения и LLMs без разорения банка! 🏦

Шаг 1. GPUs

Начнем с интересной (и дорогой 💸💸💸) части!

Чудовище H100! Изображение от NVIDIA.

Основные аспекты при покупке GPU:

  • память (VRAM)
  • производительность (тензорные ядра, тактовая частота)
  • ширина слота
  • потребляемая мощность (TDP)

Память

Для задач глубокого обучения сегодня нам нужно очень много памяти. LLMs являются огромными даже для настройки и задачи компьютерного зрения могут требовать интенсивного использования памяти, особенно с 3D-сетями. Естественно, самым важным аспектом является память GPU VRAM. Для LLMs я рекомендую как минимум 24 ГБ памяти, а для задач компьютерного зрения не менее 12 ГБ.

Производительность

Вторым критерием является производительность, которая может быть оценена по количеству операций FLOPS (вещественные операции в секунду):

В прошлом ключевым числом было количество CUDA-ядер в схеме. Однако с появлением глубокого обучения NVIDIA представила специализированные тензорные ядра, которые могут выполнять гораздо больше операций FMA (умножение с добавлением) в такт. Они уже поддерживаются основными фреймворками глубокого обучения и это то, на что вы должны обратить внимание в 2023 году.

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

Сырая производительность GPU на основе ядер CUDA и тензорных ядер (TFLOPs).

Обратите внимание, что нужно быть особенно внимательным при сравнении производительности разных GPU. Тензорные ядра разных поколений/архитектур несравнимы. Например, A100 выполняет 256 операций FP16 FMA за такт, в то время как V100 выполняет «всего» 64 операции. Кроме того, более старые архитектуры (Turing, Volta) не поддерживают 32-битные тензорные операции. Что делает сравнение более сложным, так это то, что NVIDIA не всегда сообщает о FMA, даже в белых бумагах, и GPU одной и той же архитектуры могут иметь разные значения FMA. Я забивал голову об этом 😵‍💫. Также обратите внимание, что NVIDIA часто рекламирует тензорные FLOPS с разреженностью, что является функцией, которая используется только во время вывода.

Чтобы определить лучшую GPU с точки зрения цены, я собрал данные о ценах на ebay с использованием ebay API и вычислил относительную производительность на доллар (USD) для новых карт:

Относительная производительность на доллар GPU на основе ядер CUDA и тензорных ядер (TFLOPs / USD). Цены основаны на текущих ценах на ebay (сентябрь 2023 года).

Я сделал то же самое для б/у карт, но так как рейтинги не меняются слишком сильно, я опускаю график.

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

Рекомендация видеокарты для разных бюджетов на основе текущих цен на ebay (сентябрь 2023 года).

Если вы хотите углубиться в более технические аспекты, я советую прочитать отличное руководство Тима Деттмерса о выборе видеокарты для глубокого обучения.

Ширина слота

При создании много-GPU системы нам нужно спланировать, как физически разместить видеокарты в корпусе ПК. Поскольку видеокарты становятся все больше и больше, особенно игровые серии, это становится большой проблемой. Пользовательские материнские платы имеют до 7 слотов PCIe, и корпусы ПК строятся вокруг этой конфигурации. Например, 4090 может занимать 4 слота в зависимости от производителя, поэтому вы можете понять, почему это становится проблемой. Кроме того, между видеокартами, которые не имеют вентилятора или водяного охлаждения, следует оставлять как минимум 1 слот, чтобы избежать перегрева. У нас есть следующие варианты:

Водяное охлаждениеВарианты с водяным охлаждением занимают до 2 слотов, но они дороже. Вы также можете переделать обычную видеокарту с воздушным охлаждением, но это аннулирует гарантию. Если вы не используете готовые (AIO) решения, вам придется создать собственный водяной контур. То же самое относится и к ситуации, когда вы хотите установить несколько видеокарт с водяным охлаждением, так как радиаторы AIO могут не поместиться в корпус. Создание собственного контура связано с определенными рисками, и я бы не рекомендовал делать это с дорогими картами. Я бы предпочел покупать готовые решения напрямую от производителей (с учетом рисков 🙈).

Видеокарты с воздушным охлаждением, занимающие 2–3 слота, и PCI-E разъемыВ этом сценарии видеокарты размещаются на слотах PCI-E, а также соединены с помощью кабелей PCI-E. Карты PCI-E могут быть размещены внутри корпуса ПК или в открытом воздухе. В любом случае, убедитесь, что видеокарты надежно закреплены (см. также раздел о корпусах ПК).

Питание (TDP)

Современные видеокарты становятся все более потребительскими в плане энергии. Например, 4090 требует 450 Вт, в то время как H100 может потреблять до 700 Вт. Кроме оплаты электроэнергии, возникают проблемы с подключением трех и более видеокарт. Это особенно актуально для США, где розетки могут выдавать до 1800 Вт.

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

sudo nvidia-smi -i <индекс_видеокарты> -pl <ограничение_мощности>где:индекс_видеокарты: индекс (номер) карты, который отображается с помощью nvidia-smiограничение_мощности: мощность в Вт, которую вы хотите использовать

Установка ограничения мощности на 10-20% показала, что это снижает производительность менее чем на 5% и сохраняет карты в холоде (эксперимент проводился Puget Systems). Установка ограничения мощности для, например, четырех 3090 на 20% снизит их потребление до 1120 Вт и легко поместится в блок питания мощностью 1600 Вт/розетку мощностью 1800 Вт (при условии, что остальные компоненты потребляют 400 Вт).

Шаг 2. Материнская плата и ЦПУ

Следующим шагом построения является выбор материнской платы, позволяющей использовать несколько видеокарт. Здесь главным фактором являются линии PCI-E. Нам необходимо, как минимум, слоты PCIe 3.0 с x8 линиями для каждой карты (см. пост Тима Деттмерса). PCI-E 4.0 или 5.0 являются реже встречающимися и не требуются для большинства задач глубокого обучения.

Помимо типа слота, расстояние между слотами определит, куда можно разместить видеокарты. Убедитесь, что вы проверили это расстояние и что ваши видеокарты действительно могут быть размещены там, где вы хотите. Обратите внимание, что большинство материнских плат будут использовать конфигурацию x8 для некоторых слотов x16 при использовании нескольких видеокарт. Единственный способ получить эту информацию – из руководства по карте.

Самый простой способ сэкономить часы исследований и также обеспечить защиту вашей системы в будущем – выбрать материнскую плату, где у каждого слота x16. Вы можете использовать PCPartPicker и отфильтровать материнские платы с 7+ слотами PCIe x16. Это даст нам 21 продукт для выбора. Затем мы сокращаем список, выбирая минимальное количество ОЗУ, которое нам нужно (например, 128 ГБ) с типом DDR4 / DDR5, чтобы уменьшить его до 10 продуктов:

Материнские платы с не менее чем 7 слотами PCIe x16 и 128 ГБ оперативной памяти DDR4/DDR5 на основе PCPartPicker.

Поддерживаемые разъемы процессоров из вышеперечисленного списка: LGA2011–3 и LGA2066. Затем мы переходим к выбору процессора и выбираем процессоры с нужным количеством ядер. Они главным образом необходимы для загрузки данных и подготовки пакетов. Старайтесь иметь как минимум 2 ядра / 4 потока на GPU. Также следует проверить количество линий PCIe, которое поддерживает выбранный процессор. Любой процессор последнего десятилетия должен поддерживать как минимум 40 линий (поддерживающих 4 GPU с 8-ю линиями каждый), но лучше перестраховаться. При фильтрации, например, 16+ ядер с использованием вышеуказанных разъемов, мы получаем следующие процессоры:

  • Intel Xeon E5 (LGA2011–3): 8 результатов
  • Intel Core i9 (LGA2066): 9 результатов

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

И LGA2011–3, и LGA2066 являются очень старыми разъемами (соответственно 2014 и 2017 годов), поэтому на ebay можно найти хорошие предложения как на материнские платы, так и на процессоры. Например, материнская плата ASRock X99 WS-E и 18-ядерный процессор Intel Xeon E5–2697 V4 могут стоить вам менее 300 долларов в использованном состоянии. Не покупайте более дешевые версии ES или QS для процессоров, так как они являются инженерными образцами и могут выйти из строя ⚠️️.

Если вы хотите купить что-то более мощное или более современное, либо процессор AMD, вы можете обратить внимание на материнские платы, которые имеют, например, 4+ слота PCIe x16, но убедитесь, что проверили расстояние между слотами.

На этом этапе хорошей идеей будет начать сборку на PCPartPicker. 🛠️ PCPartPicker проверит совместимость компонентов для вас и облегчит вашу жизнь.

Шаг 3. Оперативная память 🐏

Здесь самым важным аспектом является объем оперативной памяти. Оперативная память используется в разных этапах цикла глубокого обучения: загрузка данных с диска для создания пакетов, загрузка модели и, конечно же, прототипирование. Требуемый объем зависит в значительной степени от вашего приложения (например, для 3D-изображений потребуется гораздо больше оперативной памяти), но вы должны стремиться к 1x–2x от общего объема VRAM ваших GPU. Тип оперативной памяти должен быть как минимум DDR4, но частота памяти не очень важна, поэтому не тратьте деньги там 🕳️.

При покупке оперативной памяти вы должны убедиться, что форм-фактор, тип, количество модулей и объем памяти на модуль соответствуют спецификациям вашей материнской платы (PCPartPicker – ваш друг!).

Шаг 4. Диски

Еще один компонент, на котором можно сэкономить, – это диски 😌. Опять же, объем дискового пространства важен и зависит от приложения. Вам не обязательно нужны ультра-быстрые диски или NVME, так как они не повлияют на производительность глубокого обучения. Данные будут все равно загружаться в оперативную память, и чтобы не создавать узкое место, вы можете просто использовать больше параллельных процессоров ЦП.

Шаг 5. Источник питания (БП) 🔌

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

Расчет мощности, предоставленный PCPartPicker для вашей сборки.

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

Важным критерием является эффективность блока питания (PSU), которая отображается рейтингом 80 PLUS. Блок питания достигает заявленной мощности, но теряет некоторую энергию в процессе. Блоки питания 80 PLUS Bronze оцениваются с эффективностью 82% по сравнению с, например, золотыми блоками, которые достигают эффективности 87%. Если у нас есть система, потребляющая 1600 Вт, и мы используем ее 20% времени, мы сэкономим 22 доллара в год с блоком питания с золотым рейтингом, при условии стоимости 0,16 доллара за киловатт-час. При сравнении цен учтите это в своих расчетах.

Рейтинг эффективности блока питания. Таблица от Techguided.

При полной нагрузке некоторые блоки питания более шумные по сравнению с другими, поскольку используют вентилятор с высокими оборотами. Если вы работаете (или спите!) рядом с корпусом, это может иметь некоторое влияние, поэтому рекомендуется проверить децибелы по руководству 😵.

При выборе блока питания нам необходимо убедиться, что у него достаточно разъемов для всех наших компонентов. В частности, GPU используют 8-пиновые (или 6+2) кабели. Важное замечание здесь заключается в том, что для каждого слота питания GPU мы должны использовать отдельный 8-пиновый кабель и не использовать несколько выходов одного кабеля (цепочечное подключение). 8-пиновые кабели обычно рассчитаны на нагрузку около 150 Вт. Если использовать один кабель для нескольких слотов питания, GPU может не получить достаточно питания и снизить производительность.

Шаг 6. Корпус ПК

Не менее важно выбрать корпус ПК. GPU могут быть огромными, и некоторые корпусы могут не подходить для них. Например, 4090 может иметь длину 36 см 👻!

Кроме того, монтаж GPU с помощью PCIe-адаптеров может потребовать некоторых хаков. Есть некоторые новые корпусы, которые позволяют установить дополнительную карту, особенно корпуса с двойной системой, например Phanteks Enthoo 719. Другой вариант – это Lian-Li O11D EVO, который может разместить GPU в вертикальном положении с помощью держателя Lian-Li Upright GPU Bracket. У меня нет этих корпусов, поэтому я не уверен, насколько хорошо они подходят для установки нескольких GPU 3090 / 4090 и т. д. Однако вы все равно можете установить GPU в вертикальном положении, даже если ваш корпус ПК не поддерживает это напрямую, с помощью кронштейна Lian-Li. Вам нужно будет просверлить 2-3 отверстия в корпусе, но это несложно (инструкция будет следовать!).

Установка Titan Xp в вертикальном положении с помощью кронштейна Lian Li

Конец

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

Примечание: Если не указано иное, все изображения принадлежат автору. Я включил некоторые партнерские ссылки на Amazon. Покупка товара по этим ссылкам не влечет дополнительных затрат, и я могу получить небольшую комиссию.