Более совершенное оборудование может превратить нулей в героев искусственного интеллекта.

Когда речь идёт о моделях искусственного интеллекта, размер имеет значение.
Несмотря на то, что некоторые эксперты в области искусственного интеллекта предупреждают о снижении отдачи от масштабирования больших языковых моделей (LLM), компании продолжают выпускать всё более крупные инструменты ИИ. В последней версии Llama от Meta было ошеломляющее количество параметров — 2 триллиона, определяющих модель.
По мере увеличения размера моделей растут и их возможности. Но при этом возрастают и энергопотребление, и время, необходимое для их работы, что увеличивает их углеродный след. Для решения этих проблем стали использовать более компактные и менее мощные модели, а также, по возможности, более низкоточные значения параметров модели.
Но есть и другой путь, который может сохранить высокую производительность невероятно большой модели, одновременно сократив время её работы и энергопотребление. Этот подход предполагает «подружиться» с нулями внутри больших моделей искусственного интеллекта.
Для многих моделей большинство параметров — веса и активации — фактически равны нулю или настолько близки к нулю, что их можно рассматривать как таковые без потери точности. Это свойство известно как разреженность. Разреженность предоставляет значительную возможность для экономии вычислительных ресурсов: вместо того, чтобы тратить время и энергию на сложение или умножение нулей, эти вычисления можно просто пропустить; вместо хранения множества нулей в памяти достаточно хранить только ненулевые параметры.
К сожалению, современное популярное оборудование, такое как многоядерные процессоры и графические процессоры, не в полной мере использует преимущества разреженности. Для полного использования потенциала разреженности исследователям и инженерам необходимо переосмыслить и перепроектировать каждый элемент архитектуры, включая аппаратное обеспечение, низкоуровневое программное обеспечение и прикладное программное обеспечение.
В нашей исследовательской группе в Стэнфордском университете мы разработали первое (насколько нам известно) аппаратное устройство, способное эффективно обрабатывать все виды разреженных и традиционных вычислительных нагрузок. Экономия энергии значительно варьировалась в зависимости от типа нагрузки, но в среднем наш чип потреблял в семьдесят раз меньше энергии, чем центральный процессор, и выполнял вычисления в среднем в восемь раз быстрее. Для этого нам пришлось с нуля разработать аппаратное обеспечение, низкоуровневое программное обеспечение и программное обеспечение, чтобы использовать преимущества разреженности. Мы надеемся, что это только начало разработки аппаратного обеспечения и моделей, которые позволят создавать более энергоэффективный искусственный интеллект.
Что такое разреженность?
Нейронные сети и данные, которые в них поступают, представляются в виде массивов чисел. Эти массивы могут быть одномерными (векторы), двумерными (матрицы) или многомерными (тензоры). Разреженный вектор, матрица или тензор в основном состоят из нулевых элементов. Степень разреженности варьируется, но когда нули составляют более 50 процентов любого типа массива, он может выиграть от применения вычислительных методов, специально предназначенных для работы с разреженными данными. Напротив, объект, который не является разреженным — то есть, имеет мало нулей по сравнению с общим числом элементов — называется плотным.
Разреженность может быть естественной или искусственной. Например, граф социальной сети будет естественно разреженным. Представьте граф, где каждый узел (точка) представляет человека, а каждое ребро (отрезок, соединяющий точки) представляет дружбу. Поскольку большинство людей не дружат друг с другом, матрица, представляющая все возможные ребра, будет в основном состоять из нулей. Другие популярные приложения ИИ, такие как другие формы обучения на графах и рекомендательные модели, также содержат естественную разреженность.

Помимо естественной разреженности, ее можно создать в модели ИИ несколькими способами. Два года назад команда из Cerebras показала, что можно обнулить от 70 до 80 процентов параметров в модели LLM без потери точности. Cerebras продемонстрировала эти результаты на примере модели Llama 7B с открытым исходным кодом от Meta, но эти идеи применимы и к другим моделям LLM, таким как ChatGPT и Claude.
Аргументы в пользу разреженности
Эффективность разреженных вычислений обусловлена двумя фундаментальными свойствами: способностью сжимать нули и удобными математическими свойствами нулей. Как алгоритмы, используемые в разреженных вычислениях, так и специализированное оборудование для них используют эти две основные идеи.
Во-первых, разреженные данные можно сжать, что делает их хранение «разреженным» — то есть, в так называемом разреженном типе данных — более эффективным с точки зрения использования памяти. Сжатие также повышает энергоэффективность перемещения данных при работе с большими объемами. Это лучше всего понять на примере. Возьмем матрицу 4х4 с тремя ненулевыми элементами. Традиционно эта матрица хранилась бы в памяти как есть, занимая 16 ячеек. Эту матрицу также можно сжать до разреженного типа данных, удалив нули и сохранив только ненулевые элементы. В нашем примере это приводит к 13 ячейкам памяти вместо 16 для плотной, несжатой версии. Экономия памяти увеличивается с увеличением разреженности и размера матрицы.

Помимо самих значений данных, сжатые данные также требуют наличия метаданных. Необходимо также хранить адреса строк и столбцов ненулевых элементов. Обычно это представляется в виде «волоконного дерева»: метки строк, содержащих ненулевые элементы, перечисляются и связываются с метками столбцов этих ненулевых элементов, которые, в свою очередь, связываются со значениями, хранящимися в этих элементах.
В оперативной памяти ситуация еще больше усложняется: необходимо хранить метки строк и столбцов для каждого ненулевого значения, а также «сегменты», указывающие, сколько таких меток следует ожидать, чтобы метаданные и данные можно было четко разграничить.
В плотных, несжатых матричных данных доступ к значениям может осуществляться либо по одному, либо параллельно, а их местоположение можно вычислить напрямую с помощью простого уравнения. Однако доступ к значениям в разреженных, сжатых данных требует поиска координат индекса строки и использования этой информации для «косвенного» поиска координат индекса столбца, прежде чем, наконец, будет достигнуто нужное значение. В зависимости от фактического местоположения значений в разреженных данных, эти косвенные поиски могут быть крайне случайными, что делает вычисления зависимыми от данных и требует выделения памяти для поиска на лету.
Во-вторых, два математических свойства нуля позволяют программному и аппаратному обеспечению пропускать множество вычислений. Умножение любого числа на ноль даст ноль, поэтому нет необходимости фактически выполнять умножение. Прибавление нуля к любому числу всегда вернет это число, поэтому нет необходимости выполнять и сложение.
При умножении матрицы на вектор, одной из наиболее распространенных операций в задачах искусственного интеллекта, все вычисления, кроме тех, которые включают два ненулевых элемента, можно просто пропустить. Возьмем, например, матрицу четыре на четыре из предыдущего примера и вектор из четырех чисел. При плотных вычислениях каждый элемент вектора должен быть умножен на соответствующий элемент в каждой строке, а затем сложен для вычисления конечного вектора. В этом случае потребуется 16 операций умножения и 16 операций сложения (или четыре операции накопления).
При разреженных вычислениях необходимо учитывать только ненулевые элементы вектора. Для каждого ненулевого элемента вектора можно использовать косвенный поиск для нахождения соответствующего ненулевого элемента матрицы, и только эти элементы нужно умножать и складывать. В приведенном здесь примере будет выполнено всего два шага умножения вместо 16.
Проблемы с графическими процессорами и центральными процессорами.
К сожалению, современное оборудование плохо подходит для ускорения вычислений с разреженными данными. Например, предположим, нам нужно выполнить умножение матрицы на вектор. В простейшем случае, на одном ядре ЦП каждый элемент вектора будет умножаться последовательно, а затем записываться в память. Это медленно, потому что за один раз можно выполнить только одно умножение. Поэтому вместо этого используют ЦП с поддержкой векторизации или графические процессоры (ГП). С таким оборудованием все элементы будут умножаться параллельно, что значительно ускорит работу приложения. Теперь представьте, что и матрица, и вектор содержат крайне разреженные данные. Векторизованные ЦП и ГП будут тратить большую часть своих усилий на умножение на ноль, выполняя совершенно неэффективные вычисления.
Более новые поколения графических процессоров способны использовать преимущества разреженности в своем оборудовании, но только определенного типа, называемого структурированной разреженностью. Структурированная разреженность предполагает, что два из каждых четырех смежных параметров равны нулю. Однако некоторые модели больше выигрывают от неструктурированной разреженности — способности любого параметра (веса или активации) быть равным нулю и сжатым, независимо от его местоположения и смежности с ним. Графические процессоры могут выполнять неструктурированные разреженные вычисления программно, например, с помощью библиотеки cuSparse GPU. Однако поддержка разреженных вычислений часто ограничена, и аппаратное обеспечение графического процессора используется неэффективно, что приводит к нерациональному расходованию энергоемких вычислений на накладные расходы.
Петра Петерффи
При выполнении разреженных вычислений в программном обеспечении современные процессоры могут быть лучшей альтернативой вычислениям на графических процессорах, поскольку они разработаны с учетом большей гибкости. Однако разреженные вычисления на процессоре часто ограничиваются косвенными запросами для поиска ненулевых данных. Процессоры предназначены для «предварительной выборки» данных на основе того, что, как они ожидают, им понадобится из памяти, но для случайных разреженных данных этот процесс часто не позволяет получить нужные данные из памяти. В этом случае процессор вынужден тратить циклы на запрос правильных данных.
Компания Apple первой ускорила эти косвенные запросы, внедрив в механизм предварительной выборки данных в своих чипах A14 и M1 метод доступа, называемый массивом указателей. Хотя инновации в предварительной выборке делают процессоры Apple более конкурентоспособными для разреженных вычислений, архитектуры ЦП по-прежнему имеют фундаментальные накладные расходы, которых не было бы у специализированной архитектуры для разреженных вычислений, поскольку им необходимо обрабатывать вычисления общего назначения.
Другие компании также разрабатывают аппаратное обеспечение, ускоряющее разреженное машинное обучение. К ним относятся Wafer Scale Engine от Cerebras и Training and Inference Accelerator (MTIA) от Meta. Wafer Scale Engine и соответствующая ему платформа для разреженного программирования показали невероятно высокие результаты — до 70% разреженности на LLM. Однако аппаратные и программные решения компании поддерживают только разреженность весов, а не разреженность активаций, что важно для многих приложений. Вторая версия MTIA заявляет о семикратном увеличении производительности разреженных вычислений по сравнению с MTIA v1. Однако единственная общедоступная информация о поддержке разреженности в MTIA v2 касается умножения матриц, а не векторов или тензоров.
Хотя умножение матриц занимает большую часть вычислительного времени в большинстве современных моделей машинного обучения, важно обеспечить поддержку разреженности для других частей процесса. Чтобы избежать постоянного переключения между разреженными и плотными типами данных, все операции должны быть разреженными.
Оникс
Вместо этих промежуточных решений наша команда в Стэнфорде разработала аппаратный ускоритель Onyx, который может использовать преимущества разреженности с самого начала, независимо от того, является ли она структурированной или неструктурированной. Onyx — первый программируемый ускоритель, поддерживающий как разреженные, так и плотные вычисления; он способен ускорять ключевые операции в обеих областях.
Для понимания Onyx полезно знать, что такое крупнозернистая реконфигурируемая матрица (CGRA) и как она соотносится с более привычным оборудованием, таким как процессоры и программируемые пользователем вентильные матрицы (FPGA).
Процессоры (CPU), интегральные схемы на основе матриц (CGRA) и программируемые логические интегральные схемы (FPGA) представляют собой компромисс между эффективностью и гибкостью. Каждый отдельный логический блок процессора предназначен для выполнения определенной функции, которую он эффективно выполняет. С другой стороны, поскольку каждый отдельный бит FPGA является конфигурируемым, эти массивы чрезвычайно гибкие, но очень неэффективные. Цель CGRA — достичь гибкости FPGA при эффективности процессоров.
CGRA-чипы состоят из эффективных и конфигурируемых блоков, как правило, памяти и вычислительных ресурсов, специализированных для конкретной области применения. В этом и заключается ключевое преимущество этого типа массивов: программисты могут переконфигурировать внутренние компоненты CGRA на высоком уровне, что делает его более эффективным, чем FPGA, но более гибким, чем CPU.
Чип Onyx, построенный на основе крупнозернистой реконфигурируемой матрицы (CGRA), является первым (насколько нам известно), поддерживающим как разреженные, так и плотные вычисления. Оливия Сюй
Onyx состоит из гибких, программируемых процессорных элементов (PE) и модулей памяти (MEM). Модули памяти хранят сжатые матрицы и другие форматы данных. Процессорные элементы работают со сжатыми матрицами, исключая все ненужные и неэффективные вычисления.
Компилятор Onyx обрабатывает преобразование программных инструкций в конфигурацию CGRA. Сначала входное выражение — например, умножение разреженных векторов — преобразуется в граф абстрактных узлов памяти и вычислительных узлов. В этом примере имеются ячейки памяти для входных и выходных векторов, вычислительный узел для нахождения пересечения ненулевых элементов и вычислительный узел для умножения. Компилятор определяет, как отобразить абстрактные узлы памяти и вычислительные узлы на MEM- и PE-модули в CGRA, а затем как связать их таким образом, чтобы они могли передавать данные между собой. Наконец, компилятор генерирует набор инструкций, необходимых для настройки CGRA для желаемой цели.
Поскольку Onyx является программируемым устройством, инженеры могут назначать на ускоритель множество различных операций, таких как умножение векторов на векторы или ключевые задачи искусственного интеллекта, например, умножение матриц на векторы или матриц на матрицы.
Мы оценивали повышение эффективности нашего оборудования, анализируя произведение потребляемой энергии и времени вычислений, называемое произведением энергии и задержки (EDP). Этот показатель отражает компромисс между скоростью и энергопотреблением. Минимизация только энергопотребления привела бы к созданию очень медленных устройств, а минимизация скорости — к созданию устройств большой площади и высокой мощности.
Onyx обеспечивает до 565 раз больший продукт задержек и энергопотребления по сравнению с процессорами (мы использовали 12-ядерный процессор Intel Xeon), использующими специализированные библиотеки для обработки разреженных данных. Onyx также может быть настроен на ускорение обычных, но ресурсоемких приложений, аналогично тому, как это делают графические процессоры (GPU) или тензорные процессоры (TPU). Если вычисления разреженные, Onyx настраивается на использование разреженных примитивов, а если вычисления ресурсоемкие, Onyx перенастраивается для использования параллелизма, аналогично тому, как работают графические процессоры. Эта архитектура является шагом к созданию единой системы, способной ускорять как разреженные, так и ресурсоемкие вычисления на одном и том же кремниевом кристалле.
Не менее важно и то, что Onyx открывает новые возможности для алгоритмического мышления. Разреженное аппаратное ускорение не только повысит производительность и энергоэффективность ИИ, но и позволит исследователям и инженерам изучать новые алгоритмы, которые потенциально могут значительно улучшить ИИ.
Будущее в условиях разреженности
Наша команда уже работает над чипами следующего поколения, построенными на базе Onyx. Помимо операций умножения матриц, модели машинного обучения выполняют и другие виды математических вычислений, такие как нелинейные слои, нормализация, функция softmax и многое другое. Мы добавляем поддержку полного спектра вычислений на нашем ускорителе следующего поколения и в компиляторе. Поскольку разреженные модели машинного обучения могут иметь как разреженные, так и плотные слои, мы также работаем над более эффективной интеграцией архитектуры плотных и разреженных ускорителей на чипе, что позволит быстро преобразовывать данные между различными типами. Мы также ищем способы управления ограничениями памяти путем более эффективного разбиения разреженных данных, чтобы мы могли выполнять вычисления на нескольких чипах с разреженными ускорителями.
Мы также работаем над системами, способными прогнозировать производительность таких ускорителей, как наш, что поможет в разработке более совершенного оборудования для разреженного ИИ. В долгосрочной перспективе нас интересует, получит ли распространение высокая степень разреженности в вычислениях ИИ для большего числа типов моделей и будут ли ускорители для разреженных вычислений применяться в более широких масштабах.
Создание аппаратного обеспечения для работы с неструктурированной разреженностью и оптимального использования нулей — это только начало. Имея такое оборудование, исследователи и инженеры в области ИИ получат возможность изучать новые модели и алгоритмы, использующие разреженность новаторскими и креативными способами. Мы рассматриваем это как важнейшее направление исследований для управления постоянно растущим временем выполнения, затратами и воздействием ИИ на окружающую среду.

Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.