Наши клиенты могут легко обучать и реконфигурировать языковые модели GPT-3 и GPT-J, содержащие до 20 миллиардов параметров, в одной системе CS-2.

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

Мы анонсируем самые большие модели, когда-либо обучавшиеся на одном устройстве. Используя Cerebras Software Platform (CSoft), наши клиенты могут легко обучать современные языковые модели GPT (такие как GPT-3[i] и GPT-J[ii]) с 20 миллиардов параметров на одной системе CS-2. Работая на одном CS-2, эти модели настраиваются за несколько минут, и пользователи могут быстро переключаться между моделями всего несколькими нажатиями клавиш. С кластерами графических процессоров на это уходят месяцы инженерной работы.

В Cerebras мы впервые делаем самые большие модели НЛП простыми в использовании. Для всех.

Проблемы масштабирования машинного обучения на кластеры графических процессоров

Чтобы понять простоту и элегантность подхода Cerebras, важно потратить несколько минут на понимание сложности традиционной альтернативы.

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

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

Это кропотливая работа, и часто занимает месяцы. И это работа не ОД! Это распределенная вычислительная работа. Интересно, что самое сложное в очень большом машинном обучении — это зачастую не машинное обучение. Это распределенные вычисления.

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

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

Параллельные данные

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

Для параллельного обучения данных мы дублируем всю сеть на процессоре 1 и процессоре 2, затем разделяем данные пополам, как показано на рисунке 3. Затем мы отправляем половину данных на процессор 1 и половину на процессор 2 и усредняем результаты. Это называется параллелизмом данных, потому что данные делятся пополам и выполняются параллельно. Если все сделано правильно, обучение должно занимать примерно половину времени с двумя процессорами по сравнению с одним.

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

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

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

Параллельная модель конвейера

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

Кроме того, имейте в виду, что для обучения нейронных сетей требуется обратное распространение, использующее активацию, сгенерированную на прямом проходе. Таким образом, при работе в виде конвейера для обучения требуется дополнительная активационная память, чтобы конвейер оставался заполненным. На самом деле общая активационная память растет пропорционально квадрату количества стадий конвейера, O(N2), где N — количество стадий конвейера. Дополнительная память может быть непомерно высокой и превышать объем памяти отдельных процессоров, особенно при более высокой степени распараллеливания. Кроме того, дополнительный объем памяти распределяется неравномерно, поскольку более ранние этапы конвейера должны хранить больше активаций, чем более поздние этапы конвейера.

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

Таким образом, параллелизм конвейерной модели невероятно сложен.

Становится хуже.

Параллельная модель тензора

Что, если даже один слой не помещается на графическом процессоре? Затем необходимо использовать параллельную тензорную модель. Здесь отдельный уровень разделен на несколько процессоров. Таким образом, часть уровня 1 размещается на процессоре 1, а часть уровня 1 размещается на процессоре 2, как показано на рисунке 5. Это добавляет еще одно измерение сложности, давление на пропускную способность и ввод-вывод, и это необходимо сделать. вручную пользователем. На это уходят недели или месяцы кропотливой настройки каждого уровня, процессора и производительности сети. Ускорение, полученное в результате этой работы, также будет ограничено фундаментальными свойствами модели и кластера. Поскольку параллелизм тензорной модели требует частой связи, на уровне уровня задержка этих операций связи между процессорами становится узким местом при масштабировании за пределы одного сервера GPU. Вот почему на практике степень параллелизма, обеспечиваемая этим методом, обычно ограничена 4 или 8, то есть количеством графических процессоров, которые помещаются в один сервер. Сетевые протоколы, необходимые для связи между серверами, слишком медленные.

Гибридный параллелизм

Из-за ограничений по размеру и оборудованию для обучения крупнейших нейронных сетей на кластерах GPU необходимо использовать все три метода: параллелизм данных, параллелизм конвейерной модели и параллелизм тензорной модели. Мы изучили некоторые из крупнейших когда-либо опубликованных сетей, изучив количество графических процессоров, необходимых для работы нейронной сети, и различные типы распараллеливания, необходимые для обучения различных моделей (рис. 6).

В «маленьких» сетях (до 1,2 млрд параметров) сеть может передавать данные параллельно. Даже в этих более простых случаях степень параллелизма довольно высока на уровне 64 GPU. Поскольку это предполагает распределение обучения по нескольким физическим серверам, для координации работы требуется сложное программное обеспечение. Чтобы избежать узких мест производительности, высокопроизводительная сеть межсоединений и очень эффективные примитивы сокращения необходимы для фазы связи, когда градиенты агрегируются после каждого шага. Существует также ограничение на размер пакета, особенно для этих небольших моделей, что ограничивает степень параллелизма данных, которую можно использовать, не сталкиваясь с этим коммуникационным узким местом.

При параметрах 2,5B мы видим пределы параллелизма данных, поэтому исследователи начали разделять свои модели, используя параллелизм тензорных моделей. Было использовано 128 графических процессоров с 64-канальным параллелизмом данных, полученным в результате разделения пакета, и еще одним фактором, равным 2, в результате параллелизма тензорной модели.

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

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

Это боль крупномасштабного обучения машинному обучению на кластерах GPU.

Масштабирование последствий экстремального параллелизма

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

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

Эти эффекты в совокупности приводят к сублинейному масштабированию ускорения на GPU, как показано на рис. 7. На рисунке показано масштабирование TPU и GPU в тесте MLPerf-Transformer. также должно увеличиться на ту же величину, что и линейное масштабирование. Однако из-за различных ограничений, обсуждавшихся выше, обычно наблюдается сублинейное масштабирование. В примере с MLPerf-Transformer при увеличении количества процессоров в 64 раза (1024 микросхемы по оси X) производительность TPU увеличивается примерно в 12 раз. Это более чем в 5 раз меньше, чем при линейном масштабировании. Мало того, что распределенное обучение на графических процессорах чрезвычайно сложно, результатом часто является крайне неэффективное ускорение масштабирования.

Влияние экстремального параллелизма на машинное обучение

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

Например, Хоффманн и др. в DeepMind недавно показали, что первоначальный подход OpenAI к обучению GPT-3 был неэффективным [iv]. Они показали, что, используя немного меньшие модели и обучая больше выборок с более длительными графиками скорости обучения, они смогли достичь более высокой точности, чем модели GPT-3 с тем же бюджетом вычислений. Эти немного меньшие, но все же очень большие модели сложнее эффективно обучать на многих устройствах, потому что параллелизм на уровне модели меньше.

Кроме того, мы не можем просто использовать больше параллелизма данных. Первоначальные обучающие прогоны GPT-3 использовали размер пакета из 1536 последовательностей, распределенных по 256 рабочим процессам, всего по 6 последовательностей на одного рабочего. Если бы OpenAI использовал меньшие размеры пакетов для каждого рабочего, они, вероятно, увидели бы снижение использования на одного рабочего, опять же, потому что количество параллелизма, доступное в 6 последовательностях, невелико. Если бы они хотели использовать больше устройств за счет параллелизма данных, им нужно было бы увеличить общий размер пакета, сохранив размер пакета на одного рабочего. Тем не менее, собственная предыдущая работа OpenAI показывает, что при определенном размере партии — критическом размере партии — дальнейшее увеличение общего размера партии приведет к уменьшению улучшения информации о градиенте [v]. В результате дополнительный параллелизм данных и вычислений не приведут к дальнейшему повышению точности модели.

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

Преимущество Церебра

Cerebras позволяет избежать всех сложностей, описанных выше. Мы можем легко разместить самые большие сети NLP на одном процессоре Wafer-Scale Engine в системе CS-2. В результате мы можем обучать модели GPT до 20 миллиардов параметров на одном CS-2. Сюда входят популярные варианты, такие как GPT-3 XL 1.3B, GPT-J 6B, GPT-3 13B и GPT-NeoX 20B. Это избавляет от месяцев инженерной работы и предоставляет доступ к этим моделям компаниям, не имеющим огромных групп инженеров по распределенным вычислениям. Это огромная веха для сообщества ИИ.

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

Самый мощный процессор в мире

Во-первых, наш Wafer-Scale Engine физически в 56 раз больше, чем самый большой GPU. У нас в 123 раза больше ядер, в 1000 раз больше встроенной памяти, в 12 000 раз больше пропускной способности памяти и в 45 000 раз больше структуры (рис. 8). Это ресурсы, которые позволяют нам разместить самые большие слои самых больших нейронных сетей на одной пластине. Фактически, в Wafer-Scale Engine мы можем разместить слои в 1000 раз больше, чем самый большой слой в самой большой сети NLP!

Весовая потоковая архитектура

Во-вторых, наша архитектура весовой потоковой передачи позволяет нам дезагрегировать память для параметров и вычислений. Хранение параметров модели находится в отдельном блоке MemoryX, а все вычисления находятся в системе CS-2, как показано на рис. 9. Блок MemoryX обеспечивает постоянное хранение параметров и состояний оптимизатора. Он принимает градиенты веса и использует сохраненные параметры оптимизатора для вычисления обновлений веса между итерациями обучения. На каждой итерации обучения пакет выборок из набора данных принимается CS-2, затем активация каждого слоя вычисляется последовательно по мере того, как веса передаются в CS-2 из модуля MemoryX. Активации, вычисленные во время прямого прохода, и промежуточные градиенты активации, вычисленные во время обратного прохода, сохраняются в памяти пластин на CS-2. Во время обратного прохода сохраненные тензоры активации и градиента активации используются для вычисления весовых градиентов, которые отправляются обратно в модуль MemoryX.

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

Это резко контрастирует с графическими процессорами, в которых память и вычисления связаны друг с другом. Если у вас есть графический процессор с 80 ГБ памяти, а вашей нейронной сети требуется 82 ГБ, вы должны купить больше графических процессоров, чтобы получить больше памяти и справиться со сложностью распределения между несколькими графическими процессорами. Ничего нельзя сделать с одним GPU. Это становится проблемой, когда параметры занимают сотни или тысячи гигабайт памяти, вынуждая вас покупать гораздо больше графических процессоров, чем вам нужно или нужно, и справляться со сложностью распределения по ним всем. В свою очередь, архитектура весовой потоковой передачи Cerebras позволяет независимо масштабировать объем памяти, поскольку память дезагрегируется во внешнем блоке MemoryX. Более подробную информацию о нашей архитектуре потоковой передачи веса можно найти в этом техническом документе.

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

Чрезвычайно легко масштабируется

В результате самые большие модели НЛП можно не только запускать в одной системе, но и быстро настраивать и легко отлаживать, не беспокоясь о сложном гибридном параллелизме. Запуск модели параметров 20B точно такой же, как запуск модели параметров 1B, просто изменение нескольких чисел в файле конфигурации. Вот и все! Это невозможно на графических процессорах, даже со сложными распределенными программными платформами, из-за фундаментальных проблем распределения работы между небольшими устройствами. Пошаговое руководство по обучению и перенастройке больших моделей см. в нашем блоге здесь.

Краткое содержание

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

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

Мы делаем эти большие модели НЛП и возможность их обучения доступными для всех.

Приложение

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

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

[i] Браун и др., Языковые модели — это немногие ученики. ArXiv. Июль 2020 г. https://arxiv.org/abs/2005.14165

[ii] Komatsuzaki et al., GPT-J-6B: 6B JAX-Based Transformer https://arankomatsuzaki.wordpress.com/2021/06/04/gpt-j/

[iii] Тим Роджерс и Махмуд Хайри, Попытка академика развеять туман войны за ускорители машинного обучения, ACM SIGARCH, 2021 г. https://www.sigarch.org/an-academics-attempt-to- рассеять-туман-войны-ускорителей-машинного-обучения/

[iv] Хоффманн и др., Обучение вычислению оптимальных моделей большого языка. ArXiv. Март 2022 г. https://arxiv.org/abs/2203.15556

[v] Маккэндлиш и др., Эмпирическая модель обучения больших партий. ArXiv. Декабрь 2018 г. https://arxiv.org/abs/1812.06162

(Первоначально опубликовано в Блоге Церебра)