Часть серии о распределенном искусственном интеллекте на нескольких графических процессорах:
Введение
Прежде чем углубляться в продвинутые методы параллелизма, нам необходимо понять ключевые технологии, которые позволяют графическим процессорам взаимодействовать друг с другом.
Но почему графическому процессору вообще необходимо взаимодействовать? При обучении модели ИИ на нескольких графических процессорах каждый графический процессор обрабатывает отдельные пакеты данных, но все они должны оставаться синхронизированными за счет совместного использования градиентов или обмена весами модели во время обратного распространения ошибки. Специфика того, что и когда передается, зависит от вашей стратегии параллелизма, которую мы подробно рассмотрим в следующем сообщении блога. А пока просто знайте, что современное обучение искусственного интеллекта требует интенсивной коммуникации, поэтому эффективная передача данных между графическими процессорами имеет решающее значение для производительности.
коммуникационный стек
компьютер
PCIe (Peripheral Component Interconnect Express) подключает карты расширения, такие как графические процессоры, к материнской плате, используя независимые последовательные линии «точка-точка». Вот что предлагают различные поколения PCIe для графических процессоров, использующих 16 линий:
- поколение 4 x16: ~32 ГБ/с, двунаправленный
- поколение 5 x16: ~64 ГБ/с, двунаправленный
- поколение 6 x16: ~128 ГБ/сек в двунаправленном режиме (к вашему сведению, 16 линий × 8 ГБ/сек/линия = 128 ГБ/сек)
Высокопроизводительные серверные процессоры обычно предлагают 128 линий PCI, а современным графическим процессорам для оптимальной пропускной способности требуется 16 линий. Вот почему вы обычно видите 8 графических процессоров на сервере (128 = 16 x 8). Потребляемая мощность и физическое пространство в серверном корпусе также делают непрактичным использование более 8 графических процессоров в одном узле.
НВЛинк
NVLink обеспечивает прямую связь между графическими процессорами в пределах одного сервера (узла), полностью минуя ЦП. Это запатентованное соединение NVIDIA создает прямой путь между памятью между графическими процессорами с огромной пропускной способностью:
- НВЛинк 3 (А100): ~600 ГБ/с на графический процессор
- НВЛинк 4 (H100): ~900 ГБ/с на графический процессор
- NVLink 5 (Блэквелл): До 1,8 ТБ/с на графический процессор

Примечание: по NVLink для связи CPU-GPU.
Некоторые архитектуры ЦП поддерживают NVLink в качестве замены PCIE, что значительно ускоряет обмен данными между ЦП и графическим процессором за счет преодоления узкого места PCIE при передаче данных, например, при передаче пакетов обучения из ЦП в ГП. Эта возможность CPU-GPU NVLink делает разгрузку ЦП (метод, позволяющий экономить видеопамять за счет хранения данных в оперативной памяти) практичной для реальных приложений искусственного интеллекта. Поскольку масштабирование оперативной памяти обычно более рентабельно, чем масштабирование VRAM, этот подход обеспечивает значительные экономические выгоды.
К процессорам с поддержкой NVLink относятся IBM POWER8, POWER9 и NVIDIA Grace.
Однако есть одна загвоздка. В сервере с 8 процессорами H100 каждый графический процессор должен взаимодействовать с 7 другими, разделяя 900 ГБ/с на семь двухточечных соединений со скоростью около 128 ГБ/с каждое. Вот тут-то и приходит на помощь NVSwitch.
НВСвитч
NVSwitch действует как центральный узел для связи графических процессоров, динамически маршрутизируя данные между графическими процессорами по мере необходимости (переключаясь, если хотите). Благодаря NVSwitch каждый графический процессор Hopper может одновременно обмениваться данными со всеми остальными графическими процессорами Hopper со скоростью 900 ГБ/с, а это означает, что пиковая пропускная способность не зависит от количества взаимодействующих графических процессоров. Именно это делает NVSwitch «неблокирующим». Каждый графический процессор подключается к нескольким чипам NVSwitch через несколько соединений NVLink, обеспечивая максимальную пропускную способность.
Хотя NVSwitch начинался как внутриузловое решение, он был расширен для соединения нескольких узлов, создавая кластеры графических процессоров, поддерживающие до 256 графических процессоров с комплексной связью со всеми почти на родных скоростях NVLink.
Поколения NVSwitch:
- первое поколение: поддержка до 16 графических процессоров на сервер (совместимо с Tesla V100)
- второе поколение: также поддерживает до 16 графических процессоров с лучшей пропускной способностью и меньшей задержкой.
- третье поколение: Разработан для графического процессора H100, поддерживает до 256 графических процессоров.
бесконечный диапазон
InfiniBand обеспечивает связь между узлами. Хотя он намного медленнее (и дешевле), чем NVSwitch, он обычно используется в центрах обработки данных для масштабирования до тысяч графических процессоров. Современный InfiniBand поддерживает NVIDIA GPUDirect® RDMA (прямой удаленный доступ к памяти), который позволяет сетевым адаптерам напрямую обращаться к памяти графического процессора без участия процессора (без дорогостоящего копирования в оперативную память хоста).
Текущие скорости InfiniBand включают:
- HDR: ~25 ГБ/сек на порт
- отчет о недоставке: ~50 ГБ/сек на порт
- ндр200: ~100 ГБ/сек на порт
Эти скорости значительно медленнее, чем внутриузловые NVLink, из-за накладных расходов сетевого протокола и необходимости двух обходов PCIe (одного у отправителя и одного у получателя).
Основные принципы проектирования
Понимание линейного масштабирования
Линейное масштабирование — это Святой Грааль распределенных вычислений. Проще говоря, это означает, что удвоение производительности графического процессора удвоит пропускную способность и вдвое сократит время обучения. Это происходит, когда накладные расходы на связь минимальны по сравнению со временем вычислений, что позволяет каждому графическому процессору работать на полную мощность. Однако идеальное линейное масштабирование редко встречается в рабочих нагрузках ИИ, поскольку требования к связи растут с увеличением количества устройств, и обычно невозможно добиться идеального перекрытия вычислений и связи (поясняется далее).
Важность дублирования компьютерных коммуникаций
Когда графический процессор простаивает в ожидании передачи данных, прежде чем их можно будет обработать, вы тратите ресурсы впустую. Операции связи должны максимально перекрываться с вычислениями. Когда это невозможно, мы называем такое общение «разоблаченной операцией».
Внутриузловое и межузловое взаимодействие: падение производительности
Современные материнские платы серверного уровня поддерживают до 8 графических процессоров. В этом диапазоне часто можно добиться почти линейного масштабирования благодаря высокой пропускной способности и малой задержке внутриузловой связи.
Как только вы выйдете за пределы 8 графических процессоров и начнете использовать несколько узлов, подключенных через InfiniBand, вы заметите значительное падение производительности. Связь между узлами происходит намного медленнее, чем внутриузловая NVLink, что приводит к накладным расходам сетевого протокола, более высокой задержке и ограничениям пропускной способности. По мере добавления большего количества графических процессоров каждому графическому процессору придется координировать свои действия с большим количеством узлов, тратя больше времени на ожидание завершения передачи данных.
заключение
Следуйте за мной на X, чтобы увидеть больше бесплатного контента об искусственном интеллекте @l_cesconetto
Поздравляем с доведением до конца! Из этого поста вы узнали о:
- Основы связи CPU-GPU и GPU-GPU:
- PCIe, NVLink, NVSwitch и InfiniBand
- Ключевые принципы проектирования распределенных вычислений на графических процессорах
- Теперь вы можете принимать более обоснованные решения при разработке рабочих нагрузок ИИ.
В следующем сообщении блога мы подробно узнаем о нашем первом методе параллелизма — параллелизме распределенных данных.
- блог nvidia
- прямой графический процессор