Автор | Юань Цзиньхуэй
Документы GShard были размещены на arXiv еще в 2020.6.30, в том числе «GShard: масштабирование гигантских моделей с условными вычислениями и автоматическим разделением (*АР Вест V.org/PDF/2006.16…: General and Scalable Parallelization for ML Computation Graphs (*АР Вест V.org/PDF/2105.04…
Содержание статьи в основном состоит из двух частей: параллельный API и смесь экспертов.Более интересна первая часть.Я обсуждаю только эту часть.Вклад этой части четко изложен в реферат статьи:
GShard — это модуль, состоящий из набора облегченных API-интерфейсов для аннотаций и расширения для компилятора XLA.
Я также не собираюсь вводить слишком много подробностей статьи.Это содержание можно увидеть в оригинальной статье.Только некоторая справочная информация и аналогичная работа, выполненная в OneFlow, могут быть использованы для оценки того, что можно улучшить в GShard. Хорошее и плохое можно увидеть более четко, только взглянув на GShard в контексте.
1. Вдохновение от работы, похожей на GShard
Это начинается с параллелизма данных и параллелизма моделей.Во-первых, я перечислю родственные работы, которые я знаю до GShard.
1. One weird trick for parallelizing convolutional neural networks
Это, пожалуй, первая статья о параллелизме моделей, опубликованная на arXiv в 2014 году Алексом Крижевским (да, AlexNet) (*АР Вест V.org/PDF/1404.59…
Самым большим открытием этой статьи является открытие того, что разные слои поддаются разным параллелизмам. В частности, данные слоя свертки больше, чем параметры, что подходит для параллелизма данных, а параметры полносвязного слоя больше, чем данные, что подходит для параллелизма моделей.
Впервые это было реализовано в доисторическом фреймворке глубокого обучения cuda-convnet, и теперь это программное обеспечение известно меньшему количеству людей.
2. Exploring Hidden Dimensions in Parallelizing Convolutional Neural Networks
Эта статья была опубликована на ICML в 2018 году Zhihao Jia (ссылка:В это время Стэнфорд квота/~ я должен/ я боюсь...
В статье Алекса интуитивно предполагалось, что некоторые уровни подходят для параллелизма данных, а некоторые уровни подходят для параллелизма моделей, поэтому, учитывая нейронную сеть, существует ли автоматический способ найти оптимальный метод параллелизма? Эта статья Чжихао Цзя призвана решить эту проблему.
Прежде всего, эта статья делает шаг вперед в абстракции. Обнаружено, что параллелизм данных и параллелизм моделей — это просто разные способы тензорной сегментации. нарезаются в разных измерениях. Эффект также отличается. Например, его можно разделить на такие измерения, как образец, канал, ширина и длина.
Во-вторых, разные методы сегментации — это все конфигурации, а разные конфигурации приведут к разным эффектам, поэтому поиск оптимального параллельного метода — это фактически просто поиск оптимальной конфигурации в конфигурационном пространстве Вопрос формализуется как вопрос поиска.
Наконец, в нем представлена модель затрат для измерения плюсов и минусов каждой конфигурации, предлагается ряд стратегий сокращения пространства поиска и реализован прототип системы.
В этой статье описывается базовая структура автоматического параллелизма, и многие задачи по решению автоматического параллелизма являются таким процессом.
3. Beyond Data and Model Parallelism for Deep Neural Networks
Эта статья была опубликована в SysML 2019 известным издательством FlexFlow (*В это время Стэнфорд квота/~ я должен/ я боюсь...симулятор для совершенствования модели затрат. Но в абстракции пространства поиска я думаю, что это немного отстает. Например, общая тензорная сегментация предыдущей работы, эта вместо этого пытается назвать метод сегментации, особенно SOAP (выборка, оператор, атрибут, параметр).
Во-первых, я думаю, что наименование измерения сегментации — это регресс абстракции и общности, что также является недостатком Mesh-Tensorflow на мой взгляд, а также преимуществом GShard в абстракции; во-вторых, оно концептуально лаконично и полно. Нет, SOAP имеет повторяющуюся семантику и не является полным.
4. Supporting Very Large Models using Automatic Dataflow Graph Partitioning
Это тофу, опубликованное Минджи Ван и др. на EuroSys в 2019 г. (*АР Вест V.org/PDF/1807.08…Проблемы в двух статьях Цзя были одинаковыми, и они исследовались параллельно примерно в одно и то же время.
Тофу предложил набор DSL, чтобы облегчить разработчикам описание стратегии деления тензоров, и использовал целочисленный интервальный анализ, аналогичный поли, для описания параллельной стратегии Аналогичным образом была проделана большая работа над алгоритмом поиска параллельной стратегии. Но здесь меня в основном интересует, как каждая работа абстрагирует пространство поиска.
Отличие Тофу от всех других работ в том, что основное внимание уделяется разделению операторов, а основное внимание в других работах уделяется разделению тензоров, и, конечно же, они эквивалентны. Однако я думаю, что лучше сосредоточиться на разделении тензоров, которое не требует от пользователей модификации реализации оператора, а Tofu нужно для описания реализации оператора в DSL.
Это различие также будет отражаться на уровне API. Например, Mindspore и OneFlow являются одними из немногих общих фреймворков, которые реализуют полный параллелизм данных и параллелизм моделей. API Python также отличается. Вы можете увидеть это в примере кода Mindspore для обучения Pangu. модели., его интерфейс разделения размещается на операторе, напротив, система SBP OneFlow заключается в том, чтобы размещать интерфейс разделения на тензоре, а одиночная карта и распространяемый на оператора API совершенно одинаковы (документ OneFlow: *АР Вест V.org/PDF/2110.15…
В данной статье рассматривается область применения этого решения, и какие проблемы не могут быть решены, что относительно редко встречается в такого рода работах. В частности, ограничен режим partition-n-reduce, собственно, GShard и является этим режимом. Разделение и сокращение также содержат небольшие дефекты.На самом деле, после разделения оно не обязательно «сразу» не сокращается, а промежуточные частичные результаты могут продолжать участвовать в расчетах в системе, что может быть более эффективным.Причина, по которой SBP OneFlow была введена система маркировки Причина добавления P (частичная) также здесь.
5. Mesh-TensorFlow: Deep Learning for Supercomputers
Это Mesh-TensorFlow, опубликованный Google Brain на NIPS 2018 (*АР Вест V.org/PDF/1811.02…
Основная концепция Mesh-TensorFlow также выходит за рамки пакетного разделения, параллелизм данных — это пакетное разделение, а параллелизм моделей — это сегментация других измерений тензоров. В этой статье карта акселератора кластера абстрагируется в структуру сетки и предлагается способ нарезки и сопоставления тензоров с этой структурой сетки.
На мой взгляд, главный недостаток Mesh-TensorFlow — это необходимость называть размерности тензоров.Это наименование является антиабстрактным и потеряет общность.Конечно, GShard, как доработка, преодолевает эту проблему, а также улучшение GShard.
Хорошо, на этом обзор литературы заканчивается, давайте резюмируем:
- Цель всей этой работы — предоставить систему аннотаций, аналогичную «системе типов» языка программирования.Эта система должна быть минимальной и полной, и эта система определяет «автоматически параллельное» пространство поиска.
- Любая конфигурация в пространстве поиска, то есть любая параллельная стратегия, математически правильна, разница между ними только в эффективности выполнения, наша цель найти наиболее эффективную параллельную стратегию.
- Фреймворкам нужна возможность при любой конфигурации транслироваться и преобразовываться в физический граф (план выполнения), гарантируя успешное выполнение этой параллельной стратегии, даже если она не очень эффективна.
- Лучше всего, чтобы фреймворк автоматически искал наиболее эффективную конфигурацию.
Глядя на все эти работы с этих позиций, мы можем оценить каждую из них и, конечно же, GShard.
2. Что нужно улучшить в GShard
GShard предоставляет 3 типа аннотаций, а именно:
По сравнению с SBP OneFlow, я думаю, у GShard есть некоторые недостатки.
Во-первых, это определение немного избыточно.. Разделение и сегментирование на самом деле одно и то же, но разделение осуществляется только в одном измерении, сегмент может быть разделен на несколько измерений, широковещательная передача в OneFlow точно соответствует репликации GShard, разделение в OneFlow соответствует разделению и сегментированию в GShard, однако OneFlow расширяет разделение на многомерное, разделение 1D эквивалентно разделению GShard, а разделение ND эквивалентно разделению GShard.
Во-вторых, это определение неполное.. Понятие Partial в OneFlow SBP отсутствует, поэтому когда в системе есть частичные результаты расчета, они должны быть обработаны сразу через операцию редукции для получения полного результата (Если входные данные разбиты по сокращающимся измерениям, локальный результат частично, и нам нужно использовать AllReduce, чтобы объединить их и получить окончательный результат).
Но на самом деле вполне законно, что некоторые локальные результаты вычислений все же могут участвовать в последующих вычислениях, а операцию редукции можно откладывать до необходимости.
Чтобы проиллюстрировать эти проблемы, кратко представим SBP OneFlow.
Один и тот же логический тензор может иметь указанные выше методы отображения на двух устройствах.
Для матричного умножения, когда дана сигнатура SBP двух входов, также определяется сигнатура SBP вывода.В приведенной выше таблице перечислены все допустимые реализации матричного умножения.Как видно из строк 5 и 6, локальный результат может может использоваться как вход для умножения матриц, но его выход также является локальным результатом. При наличии ряда матриц, умноженных на Y = U * V * W , результаты локального расчета предыдущего расчета не должны участвовать в последующем расчете после сокращения, а результаты локального расчета всегда могут течь в системе до тех пор, пока нужны полные результаты. (Кроме того, частичное выше является более точным с нередуцированным)
Наконец,Концепция GShard о многомерном делении недостаточно кратка., использует разные определения для 1-мерного и многомерного, а именно разделение и сегментирование, OneFlow использует разделение единообразно, но различает, является ли оно 1D или ND, что является более общим.
На рисунке ниже показан пример двухмерного разделения. Устройство разделено на 2 группы, и каждая группа содержит 2 устройства. Сначала матрицу можно разделить на две группы по S(0) по оси 0. Внутренняя часть затем группа делится по 1 оси с помощью S(1) и делится на 2 устройства.
Многомерный SBP может иметь очень мощные функции, например, очень удобно реализовать умножение 2D-матриц, описанное в следующей статье, на основе SBP: An Efficient 2D Method for Training Super-Large Deep Learning Models (*АР Вест V.org/PDF/2104.05…
Оригинальный текст был впервые опубликован на Zhihu:
Заглавное изображение с сайта andibreit, Pixabay