Модели и платформы ИИ
UltraFastBERT: Введение в экспоненциально более быстрое языковое моделирование
Языковые модели и генеративный ИИ, известные своими возможностями, являются горячей темой в индустрии ИИ. Исследователи по всему миру улучшают их эффективность и возможности. Эти системы, обычно модели глубокого обучения, предварительно обучаются на обширных помеченных данных, включающих нейронные сети для механизма самовнимания. Они используют различные слои – прямого распространения, рекуррентные, эмбеддинговые и слои внимания – для обработки входного текста и производства соответствующих выходов.
В основном, слои прямого распространения больших языковых моделей содержат большинство параметров. Исследования показывают, что эти модели используют только часть доступных нейронов для расчета выхода во время вывода.
Эта статья представляет UltraFastBERT, основанный на BERT фреймворк, соответствующий по эффективности ведущим моделям BERT, но использующий только 0,3% нейронов во время вывода, а именно 12 из 4095 нейронов в каждом слое. Мы рассмотрим архитектуру UltraFastBERT, функциональность и результаты. Давайте начнем.
UltraFastBERT: Введение в экспоненциально более быстрое языковое моделирование
Традиционно, языковая модель использует различные компоненты для оснащения себя возможностями генерации контента, включая слои прямого распространения, рекуррентные слои, слои эмбеддингов и слои внимания. Эти компоненты отвечают за обучение на распознавание закономерностей во время обучения и, в конечном итоге, генерацию точного выхода на основе входных текстов. Каждый из этих компонентов имеет некоторые параметры, и в языковых моделях большая часть этих параметров принадлежит слоям прямого распространения. Однако эти слои прямого распространения не используют 100% доступных нейронов для генерации выхода для каждого входа во время вывода, что приводит к расточительству ресурсов, увеличивает сложность, время вычислений и вычислительные затраты.
В своей основе, фреймворк UltraFastBERT является вариантом фреймворка BERT, основанного на этой концепции, и заменяет слои прямого распространения на более быстрые сети прямого распространения в своей архитектуре, что в конечном итоге приводит к тому, что фреймворк UltraFastBERT использует только 0,3% доступных нейронов, обеспечивая результаты, сравнимые с моделями BERT аналогичного размера и процесса обучения, особенно на последующих задачах. Благодаря своим дизайнерским реализациям, промежуточные слои в фреймворке UltraFastBERT экспоненциально быстрее.
Учитывая быструю прямую сеть (FFF) и прямую сеть (FF), каждую с n нейронами, временная сложность прямого прохода в сети прямого распространения равна O(n), тогда как временная сложность равна O(log2n) для быстрой сети прямого распространения, и разница во временной сложности в основном обусловлена тем, что в быстрой сети прямого распространения нейроны организованы в сбалансированное бинарное дерево, и когда вводится вход, сеть выполняет только одну ветвь дерева условно. Кроме того, выполнение вывода на быстрой сети прямого распространения приводит к условному умножению матриц (CMM), при котором входные строки скалярно умножаются с естественными весовыми столбцами индивидуально, и результат предыдущей операции скалярного произведения определяет, какие весовые столбцы обрабатывать дальше. В результате сеть использует все нейроны только для нескольких входов, и ни один вход не требует более нескольких нейронов для обработки сетью. Умножение CMM контрастирует с плотным умножением матриц (DMM), которое вычисляет скалярное произведение всех входов со всеми весовыми столбцами.
Чтобы суммировать, UltraFastBERT – это основанный на BERT фреймворк, обеспечивающий результаты, сравнимые с ведущими моделями BERT, которые
- Использует только 0,3% доступных нейронов во время вывода, и использует только 12 нейронов из общего количества 4095 нейронов для каждого слоя вывода.
- Обеспечивает сильную производительность, сравнимую с ведущими моделями BERT, реализуя стратегии тонкой настройки на последующих задачах.
- Предоставляет нативную реализацию условного умножения матриц (CMM), которая образует основу для быстрой сети прямого распространения, и в конечном итоге приводит к 78-кратному увеличению производительности по сравнению с нативной оптимизированной реализацией плотного умножения матриц (DMM).
Нейронные сети прямого распространения
Нейронная сеть прямого распространения является одной из наиболее простых искусственных нейронных сетей, которая перемещает информацию только в прямом направлении, от входных узлов к выходным узлам через скрытые узлы. Одним из основных преимуществ нейронной сети прямого распространения является то, что в таких сетях нет петель или циклов, и они проще по конструкции по сравнению с RNN, или рекуррентными нейронными сетями, и CNN или классическими нейронными сетями. Архитектура нейронной сети прямого распространения состоит из трех компонентов: входных слоев, скрытых слоев и выходных слоев, и каждый слой состоит из единиц, называемых нейронами, и каждый слой связан с другим с помощью весов.
Нейроны, присутствующие во входных слоях, получают входные данные и передают их в следующий слой. Количество нейронов в каждом входном слое определяется размерностью входных данных. Далее у нас есть скрытые слои, которые не являются ни входными, ни выходными слоями, и они отвечают за необходимые вычисления. Нейроны в каждом скрытом слое принимают взвешенную сумму выходов, полученных от предыдущего слоя, применяют функцию активации и передают результат в следующий слой, и этот процесс повторяется снова и снова. Наконец, у нас есть выходной слой, который производит выход для заданных входов. Каждый нейрон в каждом слое сети прямого распространения связан с каждым нейроном в следующем слое, что делает нейронные сети прямого распространения полностью связанными сетями. Веса используются для представления силы связи между нейронами, и сеть обновляет эти веса, чтобы научиться распознавать закономерности, обновляя веса на основе ошибки, возникающей в выходе.
Двигаясь дальше, в работе нейронной сети прямого распространения есть два ключевых этапа: прямая фаза и фаза обратного распространения.
Прямая фаза
В прямой фазе входные данные вводятся в сеть, и она затем распространяется вперед. Скрытые слои вычисляют взвешенную сумму входных данных и вводят нелинейность в модель, передавая сумму входных данных через функцию активации, такую как ReLu, Sigmoid и TanH. Процесс повторяется снова и снова, пока веса не достигнут выходного слоя, и модель делает прогноз.
Фаза обратного распространения
Как только модель делает прогноз, она вычисляет ошибку между сгенерированным выходом и ожидаемым выходом. Ошибка затем распространяется назад через сеть, и сеть использует алгоритм оптимизации градиентного спуска, чтобы скорректировать веса в попытке минимизировать ошибку.
UltraFastBERT: Архитектура модели и работа
Фреймворк UltraFastBERT построен на основе архитектуры crammedBERT, и фреймворк UltraFastBERT использует все компоненты фреймворка crammedBERT, кроме природы промежуточных слоев. Вместо этого фреймворк UltraFastBERT заменяет трансформер-энкодер в сетях прямого распространения, содержащихся в промежуточных слоях фреймворка crammedBERT, на быстрые сети прямого распространения. Фреймворк UltraFastBERT вносит следующие изменения в исходные сети прямого распространения.
- Фреймворк устраняет различие между листовыми и нелистовыми узлами, используя функцию активации GeLu во всех узлах и оснащая эти узлы выходными весами и удаляя выходные смещения в целом. После этого фреймворк фиксирует размер листа до 1.
- Наконец, фреймворк позволяет использовать несколько быстрых сетей прямого распространения параллельно, вычисляя промежуточные выходные слои совместно. Фреймворк выполняет это вычисление, принимая сумму отдельных деревьев, и затем представляет сумму как промежуточный выходной слой.
Двигаясь дальше, во время обучения фреймворк UltraFastBERT следует процедуре обучения, используемой фреймворком crammedBERT, которая включает в себя отключение dropout во время предварительного обучения и использование 1-цикличного треугольного графика скорости обучения. Модель затем подвергается тонкой настройке для максимизации ее производительности на широком спектре задач, в основном из набора данных GLUE, в течение общей продолжительности 5 эпох.
Вывод
Вывод является важным компонентом для быстрой сети прямого распространения, и эти быстрые сети прямого распространения сами по себе образуют значительную часть больших языковых моделей, и они известны своим исключительным ускорительным потенциалом. Чтобы понять этот ускорительный потенциал, давайте рассмотрим пример одной из наиболее продвинутых языковых моделей, GPT-3, в которой сети прямого распространения в каждом трансформер-слое состоят из более 49 100 нейронов. Если быстрое прямое дерево (максимальная глубина 15) могло заменить исходную прямую сеть, введенное быстрое прямое дерево имело бы более 65 000 нейронов, но оно использовало бы только 16 из этих нейронов для вывода, что составляет примерно 0,03% от доступных нейронов GPT-3.
Алгоритм и совместимость
Фреймворк UltraFastBERT использует рекурсивный псевдокодовый алгоритм для быстрого прямого вывода, и алгоритм изображен на изображении ниже.

Здесь B представляет размер пакета, H представляет ширину входных слоев, а M представляет столбцы. Другой важной проблемой при использовании подхода условного умножения матриц является то, является ли он несовместимым с процессом, уже используемым для плотного умножения матриц и существующих фреймворков глубокого обучения. К счастью, использование CMM не ухудшает производительность и не вызывает несовместимости, хотя оно увеличивает сложность кэширования.
Важно отметить, что в качестве части быстрой сети прямого распространения однопоточное плотное умножение матриц полагается на выполнение инструкций умножения и накопления (MAC), и в результате замена DMM на подход CMM принесет пользу ЦП, поскольку для вычисления выхода слоя на каждый элемент требуется меньше инструкций MAC. Следовательно, несмотря на то, что в нем используется условность, обычно связанная с ветвлением, “нейронное ветвление” действует как добавление к смещению памяти для соответствующих указателей в фреймворке. Следовательно, в фреймворке UltraFastBERT предсказание ветвления инструкций никогда не полностью задействовано для облегчения условности CMM, и оно загружает только соответствующие столбцы матрицы весов индивидуально. Кроме того, поскольку фреймворк выполняет операции скалярного произведения строк и столбцов, векторная параллельная обработка SIMD все еще является хорошим вариантом для ускорения реализаций вывода для конкретных устройств.
UltraFastBERT: Производительность и результаты
Мы поговорим о производительности фреймворка UltraFastBERT для тонкой настройки, а также для задач вывода, чтобы проанализировать, как фреймворк справляется с ведущими языковыми моделями.
Результаты тонкой настройки
Следующая фигура демонстрирует производительность различных моделей на наборе данных GLUE-dev. Здесь N представляет количество нейронов, доступных фреймворкам для обучения, “Avg” представляет средний балл всех задач.

Как можно четко увидеть, фреймворку UltraFastBERT, обученному на GPU A6000 в течение более 24 часов, удается сохранить почти 96% прогностической производительности на последующих задачах GLUE по сравнению с исходным фреймворком BERT. Кроме того, можно увидеть, что с увеличением глубины быстрых сетей прямого распространения производительность фреймворков снижается, хотя большая часть ухудшения производительности происходит только для задачи CoLa. Если задачу CoLa временно отложить, фреймворк UltraFastBERT возвращает балл прогностической производительности около 98,6%.
Результаты вывода
В этом разделе мы сравним производительность нескольких прямых или быстрых сетей прямого распространения на реализациях вывода, и эти реализации распространяются на три уровня.
- На уровне 1 реализация построена с помощью процедур BLAS уровня 1, а именно скалярно-векторного произведения и векторно-векторного скалярного произведения.
- На уровне 2 реализации используют процедуры BLAS уровня 2, а именно пакетные скалярно-векторные произведения и пакетные матрично-векторные скалярные произведения.
- На уровне 3 реализации используют непакетный подход матрично-матричному умножению BLAS уровня 3, и хотя это самый быстрый доступный подход для сетей прямого распространения, такие реализации недоступны для быстрых сетей прямого распространения, поскольку библиотека не поддерживает векторную разреженность условного умножения матриц.
Кроме того, фреймворк UltraFastBERT развертывает реализации GPU с помощью настраиваемых ядер CUDA или PyTorch.

Вышеуказанная таблица сравнивает производительность фреймворка UltraFastBERT с его предшественниками, фреймворками на основе BERT, в плане слоев прямого распространения и быстрого прямого распространения, где каждый столбец содержит относительные ускорения реализации вывода быстрых сетей прямого распространения над прямыми сетями при использовании одних и тех же примитивных линейных алгебраических операций.
Однако стоит отметить, что ускорения, сообщенные в вышеуказанной таблице, предназначены для “справедливых сравнений”, т. е. как быстрые сети прямого распространения, так и реализации прямого распространения используют одни и те же примитивные линейные алгебраические операции. Кроме того, на уровне 1 и уровне 2 реализации быстрых сетей прямого распространения способны выполнять вывод в 48 и 78 раз быстрее, чем самая быстрая реализация сети прямого распространения соответственно.
Окончательные мысли
В этой статье мы говорили об UltraFastBERT, варианте фреймворка BERT, основанном на концепции, что слои прямого распространения не используют 100% доступных нейронов для генерации выхода для каждого входа во время вывода, что приводит к расточительству ресурсов, увеличивает сложность, время вычислений и вычислительные затраты, и заменяет слои прямого распространения на более быстрые сети прямого распространения в своей архитектуре, что в конечном итоге приводит к тому, что фреймворк UltraFastBERT использует только 0,3% доступных нейронов, обеспечивая результаты, сравнимые с моделями BERT аналогичного размера и процесса обучения, особенно на последующих задачах.
Благодаря своим дизайнерским реализациям промежуточные слои в фреймворке UltraFastBERT экспоненциально быстрее. Кроме того, сильная производительность, обеспеченная фреймворком UltraFastBERT, является доказательством того, что большие языковые модели (LLM) могут обеспечить сильную производительность, используя только часть своих параметров для отдельных выводов, поскольку фреймворк UltraFastBERT использует только 0,3% доступных нейронов во время вывода и все же достигает 78-кратного ускорения производительности по сравнению с временем вывода.












