Как реализовать алгоритм модели параметров триллиона уровней на основе MindSpore?

искусственный интеллект

Аннотация: В последнее время увеличение размера модели стало основным средством повышения производительности модели. В частности, самоконтролируемая предварительно обученная языковая модель в области NLP становится все больше и больше: со 175 миллиардов параметров GPT3 до 1600 миллиардов параметров Switch Transformer, что является еще одним увеличением на порядок.

Эта статья опубликована в сообществе HUAWEI CLOUD.«Эта статья поможет вам понять ключевые технологии супермодели параметров триллионного уровня, поддерживаемые MindSpore! 》, оригинальный автор: HWCloudAI.

предисловие

В последнее время основным средством повышения производительности модели стало увеличение размера модели. В частности, самоконтролируемая предварительно обученная языковая модель в области NLP становится все больше и больше: со 175 миллиардов параметров GPT3 до 1600 миллиардов параметров Switch Transformer, что является еще одним увеличением на порядок.

Увеличение размера модели на порядок позволило добиться определенного повышения производительности и даже привело к некоторым неожиданным «магическим» эффектам (таким как GPT3), но накладные расходы на вычисления стали самой большой проблемой.Например, обучение GPT3 использует 10 000 графических процессоров и недели обучения. Одна из наиболее важных задач заключается в том, как улучшить выражение и производительность модели за счет использования крупномасштабных параметров при одновременном контроле небольшого увеличения объема вычислений. В основном представлена ​​технология динамических нейронных сетей, представленная MoE. Мозг представляет собой типичную низкоэнергетическую и высокоэффективную вычислительную модель, и редкая активация является наиболее важной особенностью. В дополнение к проблемам с вычислительной производительностью гигантских моделей при обучении, особенно при обучении, еще одна более серьезная проблема для текущих алгоритмов оптимизации обучения для гигантских моделей (здесь не обсуждается) заключается в том, что алгоритм BP в настоящее время является наиболее доступным для глубокой оптимизации сети, но более Идеальный алгоритм оптимизации требует высокой степени параллелизма, асимметричного процесса оптимизации и возможности завершения общей оптимизации посредством локальной непрерывной оптимизации в пространственно-временном измерении.

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

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

3. Для разных входных данных (исходный или передний слой) по определенным условиям выборочно производится расчет последующей части сети.При этой технологии существуют приближенные или родственные технологии, такие как: динамическая нейронная сеть(и) ), условные вычисления, условная активация, разреженная активация, выборочное выполнение, сочетание экспертов (MoE), динамическая маршрутизация, …; некоторые сильно коррелированные модели, такие как Switch Transformer и т. д.

Классификация условных вычислений (обобщенная)

1. В зависимости от того, можно ли обучить маршрутизацию, ее можно разделить на: обучаемое условное вычисление маршрутизации и необучаемое условное вычисление маршрутизации.

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

Основное преимущество условных вычислений

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

2. Большая сеть, более сильное выражение: из-за маршрута из одного места во многие места вход каждого места (уровня) направляется в разные подсети для независимого расчета, а выражение различных входов на каждом уровне относительно независимо и имеет никакого эффекта. , способность к экспрессии сильнее, сеть может быть больше, но эффективность экспрессии снижается.

Сети и вычислительные формы условных вычислений

Сетевые и вычислительные формы условных вычислений относительно гибки, и некоторые из форм построения следующие: (конкретные модели и ссылки на документы здесь опущены, см.: intellabs.github.io/dis)

1. В соответствии с характеристиками таких задач, как CV, использовать несколько независимых CNN в качестве экспертных сетей, маршрутизировать независимо в соответствии с задачами и объединять хвосты в большую сеть.

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

3. Маршрутизация осуществляется преобразованием данных через дерево решений и другими методами.

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

Условно вычисляемая политика маршрутизации

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

2. обучаемый режим, который вычисляет маршрутизацию через обучаемую сеть. Масштаб сети может быть большим или маленьким, а простая обучаемая маршрутизация представляет собой одноуровневый вес: G(x) = P(X*W), G(x) — функция шлюза маршрутизации, X — вход, а W измеряется функцией потерь. Веса маршрутизации могут быть изучены, P является функцией выбора (такой как topk, sort и т. д.), в фактической реализации входные данные и результаты расчета веса X*W могут быть частью входной информации последующая сеть, не только используя G(x) Для выбора маршрута результат X*W необходимо нормализовать, более типичная форма: G(x)=P(N(X*W)), где N является выражением функции нормализации, такой как Softmax.

Стратегии избыточности для условных вычислений

Стратегию избыточности условного вычисления можно разделить на неизбыточное условное вычисление и избыточное условное вычисление:

1. Вычисление условия отсутствия избыточности может быть реализовано путем реализации функции P(.), такой как topk(k=1,…);

2. Вычисление избыточного условия может быть реализовано в различных формах, например, через реализацию функции P(.), такой как topk(k=n,…), n>=2, или через режим жесткого резервирования. дублирование входов и реализация мультиплексных вычислений.

Проблемы условных вычислений

1. Влияние алгоритма маршрутизации на качество модели

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

2. Стабильность маршрутизации/гейта

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

3. Важность маршрутизации экспертных выборок и баланса нагрузки

На этапе обучения важность релевантности каждого эксперта и образцов в пакете образцов, а также баланс нагрузки образцов в каждом пакете, распределяемых между разными экспертами, — эти два показателя связаны между собой и противоречат друг другу. Функцию убытка необходимо строить отдельно как вспомогательный убыток для оптимизации этих двух показателей. В архиве: 1701.06538 «Невероятно большие нейронные сети:
Sparsely-GatedMixture-of-Experts Layer» обсуждали это.

Об условных вычислениях/динамических нейронных сетях

Об условных вычислениях/динамической нейронной сети дополнительная информация содержится в статье «Динамические нейронные сети: обзор» arxiv:2102.04906 (arxiv.org/abs/2102.0490), автора обобщенной динамической нейронной сети, различные технологии, связанные с динамическими сетями, классифицируются в соответствии с уровнем экземпляра, временным уровнем и пространственным уровнем.

1. Динамическая NN по экземплярам: динамическая от экземпляра к экземпляру, каждый образец независимо активирует разные сети и параметры (MoE — это направление). Динамическая архитектура: динамическая глубина, динамическая ширина, динамическая маршрутизация/MoE, динамические параметры: настройка параметров, прогнозирование параметров, динамические функции

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

3. Временная динамическая НС: динамика на уровне времени: данные временных рядов разбиваются в соответствии с измерением временных рядов для активации различных последующих сетей и параметров. (видеокадры, текстовая последовательность, временные ряды, поток, ...) Text-SequenceVideo-Frames

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

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

1. В зависимости от того, активирован ли он частично во время упреждающего расчета:

Hard-Dynamic: во время прямой связи некоторые сети абсолютно не активируются для участия в расчете.

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

2. По входу алгоритма определения динамической активации:

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

Уровень подвыборки: (на входном слое) различные последующие сетевые блоки активируются на временном/пространственном уровне внутри выборки. Как правило, глубокие сети выборочно активируются и выполняются не только на входном, но и на среднем уровне.

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

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

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

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

Стратегия реализации

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

Взяв в качестве примера Switch Transformer, его параметры расширены до части FFN части Transformer. Его расширение MoE, как показано ниже:

(Источник изображения: бумага Switch Transformer)

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

​1. Расчет маршрутизации-Gate: в соответствии с вводом (может быть вводом всей сети или выводом предыдущего блока/уровня сети) расчет завершается в блоке маршрутизации, и каждый образец вычисляется в пакетная маршрутизация по выборке Последующие сетевые маршруты для отправки (Эксперты в Mixture-of-Experts/MoE).

2. Отправка-диспетчер данных: из входного общего тензора, в соответствии с отношением выборка-эксперт, рассчитанным путем маршрутизации, собирайте и объединяйте тензор, который должен обрабатывать каждый эксперт. Если в дизайне с фиксированной группой экспертов необходимо сбалансировать количество выборок, выделенных каждому эксперту в каждой партии обучения, и максимальную мощность каждого раунда обучения экспертов, Из-за случайности ввода выборки трудно обеспечить относительно равномерное распределение.Для партий с максимальной вместимостью прокладки требуются для образцов фиксированного размера партии, а для образцов с большей вместимостью, чем максимальная вместимость, можно использовать отложенный повторный отбор проб. Чтобы поддерживать правильную взаимосвязь ввода-вывода (Input/X – Label/Y), а обучение представляет собой производную взаимосвязь обратного распространения, реализация должна поддерживать индексную взаимосвязь исходной партии с подгруппой каждого эксперта, а затем получать и объединить их позже.Используется при объединении.

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

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

В основных интеллектуальных платформах глубокого обучения могут быть приняты две основные стратегии реализации:

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

Тензорная сортировка: Копирует несколько тензоров для экспертов, которые должны быть назначены различным последующим сетевым блокам (подсетям экспертной сети и т. д.), и не сохраняет размерности данных, которые не должны вводиться текущему эксперту для обработки. И поддерживать соответствующие отношения индекса уровня выборки до и после преобразования. В распределенной реализации, если экспертная подсеть разделена на разные вычислительные узлы, реализацию экспертной сети лучше наследовать от объекта платформы уровня подсети, такого как: mindspore.nn.Cell в MindSpore. Подробные сведения о реализации см. в последующих главах, посвященных технической реализации.

основной код

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

Справочный код использует схематическую реализацию MindSpore. (Примечание: importmindspore как мс)

Базовая логика Mixture of Experts, для ввода I, пройти через routing_network (самый простой *W), затем через topk (если для вариантного алгоритма нужен вес ворот, требуется softmax, в противном случае он не нужен), а затем использовать тензорную операцию ( можно выбрать в соответствии с пакетом) Выходные тензоры для каждой подсети/эксперта.

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

1. Маршрутизация

Когда вышеприведенные входные 5 строк (всего 3 категории, требуется назначить 3 экспертам) образцов, а веса ворот умножаются на матрицу, можно четко рассчитать экспертов, которые будут назначены для каждого образца. Вы можете использовать matmul или аналогичный gates_weighted = einsum('bd,de->be', [data_inputs, gate_weights]) Результат первого раунда матричного умножения:

Умножение ввода и веса, вы можете использовать @ в python, вы также можете использовать matmul или вы можете использовать функцию суммирования Эйнштейна einsum. Когда это простое матричное умножение, использование einsum фактически разбивается на несколько алгоритмов при компиляции графа вычислений, и производительность не очень хорошая; но когда входные данные и вес превышают 2 измерения, необходимо зафиксировать размер пакета для расчет маршрутизации. , с помощью einsum можно запрограммировать очень просто.

2. Назначение

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

Расчет по запросу 1: Нормализованные веса между всеми N экспертами (см. № 2), gates_weighted одинаковы, нормализованы в соответствии с dim=-1, а результат:

Выберите Top-K экспертов для каждой выборки в пакете.Вот вес каждого эксперта в пакете, который может быть top-k из softmax-ed или top-k напрямую из gates_weighted, так как softmax или расширение можно не делать здесь После этого можно использовать gates_weighted, вот порядковый номер каждого эксперта в батче

Его вывод:

тогда:

Вычисления по запросу 2: Нормализованные веса среди n лучших экспертов

Как извлечь тензор, принадлежащий эксперту для каждого эксперта, из исходного ввода в соответствии с индексом присвоения В текущей основной интеллектуальной платформе нет специального оператора, и для достижения аналогичных эффектов можно использовать комбинацию других операторов. . В MindSpore операторы могут быть реализованы с помощью базового C++ или путем наследования Cell и реализации bprob в Python, а затем организации исходного тензора ворот в целевой вывод в соответствии с индексом. Здесь мы реализуем класс Dispatch

3. Самостоятельный расчет

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

4. Слияние

Логика слияния относительно проста: сначала использовать cat для склейки по размерности пакета, а затем построить правильный тензор нулей и с помощью index_add объединить результаты каждой экспертной сети в порядке ввода по индексу, как выход модуля МО.

Вышеизложенное завершает полный процесс расчета всего МО.

структура кода

Мы расширяем логику, основанную на тензорных операциях, рассчитанную с помощью приведенных выше базовых условий динамической маршрутизации, в полную структуру обучающего кода: класс Dispatch(ms.nn.Cell): реализует логику диспетчеризации в маршрутизации логика сборки в классе маршрутизации Route(ms.nn.Cell): завершает всю логику динамической маршрутизации, которая может быть реализована в виде относительно общего класса class Expert(ms.nn.Cell): определяемая пользователем платформа экспертной сети classNetwork( ms. nn.Cell): определяемый пользователем большой сетевой класс платформы. Набор данных: класс набора данных, который удовлетворяет только разумному соответствию между входной формой и XY, просто пример def train(…): Полный код обучающей записи находится на официальном сайте mindspore:git ee.com/mindspore\_…

Технические моменты условной вычислительной реализации

1. Динамическая маршрутизация

  • Неизучаемые маршруты

Например, для маршрутизации используется LSH (локально-зависимое хеширование): на переднем конце всей обучаемой сети LSH используется для назначения выборок, что позволяет избежать проблемы частичной деривации LSH; если модуль LSH добавляется в середине сети, необходимо завершить детерминированный алгоритм через оценку градиента Частичный перенос градиента.

  • обучаемая маршрутизация

Самый простой способ — определить gate_weights как обучаемый параметр.Для двумерного тензора используйте python@ или matmul для завершения вычисления весовой маршрутизации; если это многомерный тензор и необходимо зафиксировать пакетное измерение, einsum( 'bd*, *de->b*e'), чтобы завершить вычисление.

2. Связь между topk и softmax

В двух реализациях Gate G_1(x)=softmax(topk(X*W))) и G_2(x)=topk(softmax(X*W))), помещая softmax до и после Topk для top-k. выбор остается неизменным; когда G_* нужно использовать как часть входа последующей сети, то есть информация о весе маршрутизации используется как информация на входе последующей сети, необходимо учитывать: нормализованный вес между всеми Требуется -N экспертов, тогда softmax помещается в top- перед k; в противном случае softmax помещается после top-k для вычисления нормализованных весов среди N лучших экспертов.

3. Как сбалансировать каждого эксперта в пакетной обработке

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

В многоуровневой (множественной) модели MoE, такой как Transformer, несколько наборов вспомогательных_потерь могут быть объединены в качестве вспомогательных_потерь после добавления доминируемой_потери.

Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~