Технологии распределенных коммуникаций на графическом процессоре: PCle, NVLink, NVSwitch

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

Кроме того, один рабочий поток графического процессора имеет ограниченную память, а размер многих крупных моделей превышает объем одного графического процессора. Следовательно, необходимо реализовать обучение модели на нескольких графических процессорах. Этот метод обучения предполагает распределенную связь и NVLink.

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

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

Распределенный параллелизм

В настоящее время глубокое обучение вступило в эпоху больших моделей, а именно Foundation Models. Большая модель, как следует из названия, ориентирована на «большое». В основном оно включает в себя следующие аспекты:

  • Большой размер данных

В больших моделях обычно используются методы обучения с самоконтролем, что снижает затраты на аннотирование данных, обучение и НИОКР, а большие объемы данных могут улучшить способность к обобщению и производительность модели.

  • Большая шкала параметров

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

  • Высокие требования к вычислительной мощности 

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

Следовательно, чтобы решить вышеуказанные проблемы, нам необходимо внедрить распределенную параллельную стратегию.

Параллелизм данных

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

Параллельный рабочий процесс с данными:

  • Синхронизация параметров: Перед началом обучения все рабочие блоки синхронизируют параметры модели, чтобы гарантировать идентичность копий модели на каждом графическом процессоре.
  • Распределение данных: Данные обучения делятся на пакеты, каждый пакет дополнительно разбивается на подмножества, и каждый графический процессор отвечает за обработку одного подмножества данных.
  • Независимый расчет градиента: каждый графический процессор независимо выполняет прямое и обратное распространение своего подмножества данных и вычисляет соответствующие градиенты.
  • Градиентная агрегация: После завершения расчета градиенты всех рабочих единиц необходимо агрегировать. Обычно это достигается посредством сетевой связи, например, с использованием алгоритма All-Reduce, который позволяет эффективно усреднять градиенты на разных графических процессорах.
  • Обновление параметров: после усреднения градиентов каждый графический процессор использует этот усредненный градиент для обновления параметров своей копии модели.
  • Повторение процесса: Этот процесс повторяется для каждого пакета данных до тех пор, пока модель не будет обучена на всем наборе данных.

Преимущества и проблемы параллелизма данных:

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

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

Применение схемы асинхронной синхронизации при параллелизме данных:

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

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

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

Параллелизм модели

Параллельная модель (MP) обычно относится к обучению большой модели глубокого обучения распределенным образом по нескольким вычислительным узлам, где каждый узел отвечает за часть модели. Этот метод в основном используется для решения ситуации, когда один вычислительный узел не может вместить всю модель. Параллелизм моделей можно разделить на несколько стратегий, включая, помимо прочего, конвейерный параллелизм (PP) и тензорный параллелизм (TP).

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

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

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

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

При конвейерном параллелизме каждый узел последовательно обрабатывает разные уровни модели, а микропакеты передаются между узлами, как в конвейере. Градиенты усредняются по всем мини-партиям, а затем используются для обновления параметров модели.

Конвейерный параллелизм делит модель «по вертикали» на слои. Мы также можем разделить определенные операции внутри слоя «по горизонтали», что часто называют тензорным параллельным обучением (TP) для дальнейшего повышения эффективности.

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

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

Распространение ИИ-фреймворка

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

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

Сегментация графа обучения ИИ

Сегментация графа обучения ИИ

Как показано на рисунке выше, в среде вычислений ИИ нам необходимо разделить исходную модель сети и распределить ее по разным машинам для вычислений. Здесь связь осуществляется путем вставки в модель узлов Send и Recv.

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

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

Коммуникационное оборудование

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

Структура обслуживания графического процессора

Структура обслуживания графического процессора

Когда дело доходит до внутримашинной связи, существует несколько распространенных аппаратных средств:

  • Общая память: Несколько процессоров или потоков могут обращаться к одной и той же физической памяти, чтобы они могли взаимодействовать путем чтения и записи данных в память. Общая память подходит для параллельных вычислений на одной машине.
  • PCIe (Peripheral Component Interconnect Express): Шина PCIe — это стандартный интерфейс для подключения вычислительных устройств, обычно используемый для подключения графических процессоров, карт-ускорителей или других внешних устройств. Через шину PCIe данные могут передаваться между различными вычислительными устройствами для достижения распределенных вычислений.
  • НВЛинк: NVLink — это технология высокоскоростного соединения, разработанная NVIDIA, которая обеспечивает прямую связь между графическими процессорами. NVLink может обеспечить более высокую пропускную способность и меньшую задержку, чем PCIe, что подходит для задач, требующих более высокой производительности связи.

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

  • Сеть TCP/IP: Протокол TCP/IP является основой Интернет-коммуникаций, который позволяет передавать данные между различными компьютерами по сети. В распределенных вычислениях сети TCP/IP могут использоваться для связи и передачи данных между машинами.
  • Сеть RDMA (удаленный прямой доступ к памяти): RDMA — это высокопроизводительная технология сетевой связи, которая позволяет передавать данные напрямую из одной области памяти в другую без участия процессора. Сети RDMA часто используются для создания высокопроизводительных вычислительных кластеров, обеспечивающих передачу данных с малой задержкой и высокой пропускной способностью.

После понимания аппаратного обеспечения библиотека, обеспечивающая функции коллективной связи, незаменима для реализации связи. Среди них одной из наиболее часто используемых библиотек коллективной связи является MPI (интерфейс передачи сообщений), который широко используется в ЦП. На графических процессорах NVIDIA наиболее часто используемой библиотекой коллективных коммуникаций является NCCL (Библиотека коллективных коммуникаций NVIDIA).

НВЛинк и НВСвитч

НВЛинк и НВСвитч

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

Коллективное общение

Коллективные коммуникации — это глобальная коммуникационная операция, включающая все процессы в группе процессов. Он включает в себя ряд базовых операций, таких как отправка, получение, копирование, внутригрупповая барьерная синхронизация процессов (Барьер) и межузловая синхронизация процессов (сигнал + ожидание). Эти основные операции можно объединить, чтобы сформировать набор шаблонов связи, также называемых примитивами связи. Например, широковещательная рассылка «один-ко-многим», сбор «многие-к-одному», сбор «многие-ко-многим» (все-собираются), разброс «один-ко-многим» (разброс), сокращение «многие-к-одному», многие-ко-многим. многие сокращения (все-сокращение), комбинированные сокращения и разброс (редукция-рассеивание), многие-ко-многим (все-ко-всем) и т. д. Ниже мы кратко представим некоторые из них.

Коллективное общение

Коллективное общение

Операция Gather представляет собой примитив связи «многие к одному» с несколькими отправителями данных и одним получателем данных. Он может собирать данные с нескольких узлов на один узел кластера. Его обратное действие соответствует Scatter.

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

Разброс — это распределение данных «один ко многим». Он делит данные на карте графического процессора на фрагменты и распределяет их по всем остальным картам графического процессора.

AllReduce — это примитив связи «многие ко многим» с несколькими отправителями и несколькими получателями данных. Он выполняет одну и ту же операцию сокращения на всех узлах кластера и может отправлять результаты операций сокращения данных на всех узлах кластера всем узлам. Проще говоря, AllReduce — это операция сокращения данных «многие ко многим», которая сводит данные со всех карт графического процессора (например, SUM) к каждой карте графического процессора в кластере.

AllGather — это примитив связи «многие ко многим» с несколькими отправителями и несколькими получателями данных. Он может собирать данные с нескольких узлов кластера на главный узел (сбор), а затем распределять собранные данные на другие узлы.

Операция AllToAll распределяет данные каждого узла по всем узлам кластера, и каждый узел также собирает данные всех узлов кластера. AllToAll — это расширение AllGather. Разница в том, что в операции AllGather данные, собранные с определенного узла разными узлами, одинаковы, а в операции AllToAll данные, собранные с определенного узла разными узлами, различны.

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

NVLink — это усовершенствованный протокол шины и связи. NVLink использует структуру «точка-точка» и последовательную передачу для соединения центрального процессора (ЦП) и графического процессора (ГП). Его также можно использовать для подключения нескольких графических процессоров (GPU).

NVSwitch: технология высокоскоростного соединения. Будучи независимым чипом NVLink, он предоставляет до 18 интерфейсов NVLink, которые позволяют обеспечить высокоскоростную передачу данных между несколькими графическими процессорами.

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

НВЛинк Девелопмент

НВЛинк Девелопмент

Как показано на рисунке выше, NVLink прошел четыре поколения разработки и эволюции от архитектуры Pascal к архитектуре Hoppe. На конференции GTC в 2024 году NVIDIA представила архитектуру Blackwell, в которой NVLink был снова обновлен и выпущен NVLink пятого поколения с пропускной способностью межсоединения 1800 ГБ/с.

С каждым обновлением NVLink пропускная способность каждого графического процессора постоянно улучшается. Количество графических процессоров, которые можно соединить между собой NVLinks, также увеличилось с 4 в первом поколении до 18 в четвертом поколении. Новейшая архитектура Blackwell не увеличила максимальное количество связанных между собой графических процессоров.

НВЛинк Девелопмент2

НВЛинк Девелопмент

Как видно из приведенного выше рисунка, каждый канал NVLink в P100 имеет только 40 ГБ/с, тогда как от V100 второго поколения до H100 каждый канал NVLink имеет скорость 50 ГБ/с. Общая пропускная способность увеличивается за счет увеличения количества каналов.

Разработка NVSwitch

Технология NVSwitch претерпела три поколения эволюции и развития от архитектуры Volta до архитектуры Hopper. Количество чиплетов, соединенных между собой на один графический процессор, остается постоянным и составляет восемь в каждом поколении, а это означает, что базовая структура соединения остается стабильной и последовательной. Благодаря обновлению архитектуры NVLink пропускная способность между графическими процессорами значительно увеличилась, поскольку NVSwitch — это модуль микросхемы, который специально поддерживает NVLink, с 300 ГБ/с в архитектуре Volta до 900 ГБ/с в архитектуре Hopper.

Далее давайте посмотрим на взаимосвязь между NVLink и NVSwitch на сервере.

Разработка NVSwitch

Разработка NVSwitch

Как показано на рисунке выше, в P100 есть только NVLink, а графические процессоры соединены между собой через CubeMesh. В P100 каждый графический процессор имеет 4 соединения, и каждые 4 образуют CubeMesh.

В V100 каждый графический процессор может быть связан с другим графическим процессором через NVSwitch. В А100 снова обновили NVSwitch, сохранив массу ссылок. Каждый графический процессор может быть соединен с любым другим графическим процессором через NVSwitch.

В H100 произошел новый технологический прорыв. На одной машине установлено 8 графических карт H100, а между любыми двумя картами H900 существует полоса пропускания двунаправленного соединения 100 ГБ/с. Стоит отметить, что в системе DGX H100 четыре NVSwitch резервируют 72 соединения NVLink4 для подключения к другим системам DGX H100 через NVLink-Network Switch, тем самым облегчая формирование системы DGX H100 SuperPod. Общая двунаправленная пропускная способность 72 соединений NVLink4 составляет ~3.6 ТБ/с.

Итого

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

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

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

NVLink и NVSwitch постоянно обновляются для дальнейшего повышения скорости и эффективности обучения моделей глубокого обучения. Понимание этих инноваций и достижений коммуникационных технологий может помочь нам лучше обучать более крупные модели и вывести искусственный интеллект на более глубокий уровень.

Оставьте комментарий

Наверх