Модели и платформы ИИ
PowerInfer: Быстрый Большой Языковый Модель с Потребительским Уровнем GPU
Благодаря их исключительным возможностям создания контента, генеративные большие языковые модели сейчас находятся на переднем крае революции ИИ, с продолжающимися усилиями по улучшению их генеративных возможностей. Однако, несмотря на быстрый прогресс, эти модели требуют значительной вычислительной мощности и ресурсов. Это в основном потому, что они состоят из сотен миллиардов параметров. Кроме того, для бесперебойной работы генеративные модели ИИ полагаются на тысячи GPU, что приводит к значительным операционным затратам. Высокие требования к эксплуатации являются ключевой причиной, почему генеративные модели ИИ еще не эффективно развернуты на персональных устройствах.
В этой статье мы обсудим PowerInfer, высокоскоростной движок вывода LLM, предназначенный для стандартных компьютеров, работающих на одном потребительском уровне GPU. Фреймворк PowerInfer стремится использовать высокую локальность, присущую выводу LLM, характеризующуюся степенным распределением активации нейронов. Это означает, что в любой момент времени небольшое подмножество “горячих” нейронов постоянно активны во всех входах, в то время как остальные, называемые “холодными” нейронами, активируются в зависимости от конкретных входов или требований. Этот подход позволяет фреймворку PowerInfer уменьшить вычислительную мощность, необходимую для генеративного ИИ для получения желаемых выходов.
Мы подробно рассмотрим фреймворк PowerInfer, изучая его методологию, конвейер и практические результаты. Давайте начнем.
PowerInfer: Быстрый Большой Языковой Модель с Потребительским Уровнем GPU
Генеративные большие языковые модели, такие как ChatGPT и DALL-E, известны своими сложными генеративными и задачами обработки естественного языка. Из-за их высоких вычислительных требований эти модели обычно развертываются в центрах обработки данных с передовыми GPU. Необходимость такой высокой вычислительной мощности ограничивает их развертывание в центрах обработки данных, подчеркивая необходимость развертывания больших языковых моделей на более доступных местных платформах, таких как персональные компьютеры.
Увеличение доступности больших языковых моделей могло бы снизить затраты на вывод и генерацию контента, улучшить конфиденциальность данных и позволить настроить модель. Кроме того, хотя развертывания в центрах обработки данных отдают приоритет высокому пропускному каналу, местные развертывания LLM могли бы сосредоточиться на низкой задержке из-за меньших размеров пакетов.
Однако развертывание этих моделей на местных устройствах представляет значительные проблемы из-за их существенных требований к памяти. Большие языковые модели, функционирующие как автoreгрессивные трансформеры, генерируют текст токен за токеном, с каждым токеном, требующим доступа к всей модели, состоящей из сотен миллиардов параметров. Это требует много высококлассных GPU для генерации выходов с низкой задержкой. Кроме того, местные развертывания обычно обрабатывают индивидуальные запросы последовательно, ограничивая потенциал для параллельной обработки.
Чтобы решить сложные требования к памяти генеративного фреймворка ИИ, существующие решения используют методы, такие как отключение модели и сжатие. Техники, такие как дистилляция, обрезка и квантование, уменьшают размер модели, но они все еще слишком велики для стандартных GPU в персональных компьютерах. Отключение модели, которое разделяет модель на уровне трансформера между CPU и GPU, позволяет распределять слои обработки между памятью CPU и GPU. Однако этот метод ограничен медленным интерфейсом PCIe и ограниченными вычислительными возможностями CPU, что приводит к высокой задержке вывода.
Фреймворк PowerInfer полагает, что несоответствие между характеристиками вывода LLM и структурой аппаратуры является основной причиной проблем с памятью в выводе LLM. Идеально, данные, которые часто доступны, должны храниться в GPU с высокой пропускной способностью и ограниченной емкостью, в то время как менее часто доступные данные должны храниться в CPU с низкой пропускной способностью и высокой емкостью. Однако большой объем параметров каждой итерации вывода LLM делает рабочий набор слишком большим для одного GPU, что приводит к неэффективному использованию локальности.
Процесс вывода в больших языковых моделях демонстрирует высокую локальность, с каждой итерацией, активирующей ограниченное количество нейронов. Фреймворк PowerInfer стремится использовать эту локальность, управляя небольшим количеством горячих нейронов с помощью GPU, в то время как CPU обрабатывает холодные нейронов. Он предварительно выбирает и предварительно загружает горячие нейронов в GPU и определяет активированные нейронов во время выполнения. Этот подход минимизирует дорогостоящие передачи данных PCIe, позволяя GPU и CPU независимо обрабатывать свои назначенные нейронов.
Однако развертывание LLM на местных устройствах сталкивается с препятствиями. Онлайн-предсказатели, важные для определения активных нейронов, потребляют значительную память GPU. Фреймворк PowerInfer использует адаптивный метод для построения небольших предсказателей для слоев с более высокой асимметрией и разреженностью, сохраняя точность при уменьшении размера. Кроме того, фреймворки LLM требуют специализированных разреженных операторов. Фреймворк PowerInfer использует нейронно-осведомленные разреженные операторы, которые直接 общаются с нейронами, исключая необходимость специальных разреженных форматов преобразования.
Наконец, оптимальное размещение активированных нейронов между CPU и GPU является сложной задачей. Фреймворк PowerInfer использует офлайн-стадию для создания политики размещения нейронов, измеряя влияние каждого нейрона на результаты вывода LLM и формулируя ее как целочисленную линейную задачу.
Архитектура и Методология
Следующая фигура подробно описывает архитектуру фреймворка PowerInfer, состоящего из офлайн- и онлайн-компонентов в конвейере.

Благодаря вариациям, наблюдаемым в локальных свойствах среди разных больших языковых моделей, офлайн-компонент профилирует разреженность активации LLM, позволяя ему различать горячие и холодные нейронов. С другой стороны, на офлайн-стадии два типа нейронов загружаются движком вывода в CPU и GPU, обслуживая запросы LLM во время выполнения с низкой задержкой.
Офлайн-Фаза: Политика Solver и LLM Профайлер
На офлайн-стадии компонент профайлера LLM использует запросы, полученные из общего набора данных, для сбора данных активации из процесса вывода. На первом этапе он отслеживает активацию нейронов во всех слоях фреймворка и использует компонент политики solver для категоризации нейронов как горячих или холодных. Основная цель политики solver – распределить нейронов, активированных более часто, по слоям GPU, в то время как остальные распределяются по слоям CPU. На втором этапе компонент политики solver использует метрики влияния нейронов и характеристики аппаратуры для балансировки рабочей нагрузки между слоями и максимизации метрики влияния GPU для нейронов с использованием целочисленного линейного программирования.
Онлайн-Фаза: Нейронно-Осведомленный Движок Вывода LLM
Как только офлайн-стадия выполнена успешно, фреймворк переходит к выполнению онлайн-стадии. На третьем этапе онлайн-инженер присваивает горячие и холодные нейронов их соответствующим обработчикам перед обработкой пользовательских запросов, в зависимости от вывода офлайн-политики solver. Во время выполнения и на четвертом этапе онлайн-инженер управляет вычислениями GPU-CPU, создавая выполнители CPU и GPU, которые являются потоками, запускаемыми на стороне CPU. Двигатель затем предсказывает активированные нейронов и пропускает неактивированные нейронов. Активированные нейронов затем предварительно загружаются в GPU для обработки. Тем временем CPU рассчитывает и передает результаты для своих нейронов для интеграции с GPU. Онлайн-инженер может сосредоточиться на отдельных нейронных строках и столбцах внутри матриц, поскольку он использует разреженные нейронно-осведомленные операторы на CPU, а также на GPU.

Адаптивные Предсказатели Разреженности
Основная концепция снижения вычислительных нагрузок онлайн-инженером фреймворка PowerInfer заключается в том, что он обрабатывает только нейронов, которые он предсказывает как активированные. Традиционно в каждом слое трансформера фреймворк использует два разных предсказателя для предсказания активации нейронов в блоках MLP и само-внимания, в результате чего вычисления вывода ограничиваются нейронами, предсказанными как активные. Однако трудно разработать эффективные предсказатели для местного развертывания, поскольку ограниченное количество ресурсов делает трудным баланс между размером модели и точностью предсказания. Поскольку эти предсказатели часто развертываются фреймворком для предсказания активных нейронов, они должны храниться в GPU для быстрого доступа. Однако фреймворки обычно развертывают большое количество предсказателей, которые занимают значительную память, даже ту, необходимую для хранения параметров LLM.
Кроме того, размер предсказателей обычно определяется двумя факторами: внутренней асимметрией и разреженностью слоев LLM.

Чтобы оптимизировать эти факторы, фреймворк PowerInfer использует итеративный метод обучения для каждого предсказателя в слое трансформера без фиксированного размера. На первом этапе этого метода обучения устанавливается размер базовой модели на основе профиля разреженности модели, и размер модели корректируется итеративно, учитывая внутреннюю активацию асимметрии для поддержания точности.
Размещение и Управление Нейронов
Как упоминалось ранее, хотя компонент политики solver офлайн-стадии определяет политику размещения нейронов, онлайн-инженер загружает модель в память GPU и CPU в соответствии с сгенерированной политикой. Для каждого слоя, который может иметь несколько матриц весов, фреймворк PowerInfer присваивает каждый нейрон либо CPU, либо GPU на основе того, является ли нейрон горячим. Обеспечение точных вычислений сегментированных нейронов в определенной последовательности имеет решающее значение для точных результатов. Для этого фреймворк PowerInfer генерирует две таблицы нейронов: одну, расположенную в памяти GPU, и другую, расположенную в памяти CPU, с каждой таблицей, коррелирующей отдельные нейронов с их исходным положением в матрице.
Нейронно-Осведомленный Оператор
Учитывая разреженность активации, наблюдаемую в больших языковых моделях, неактивные нейронов и их веса можно пропустить операциями умножения матриц, что создает необходимость использования разреженных операторов. Вместо использования разреженных операторов, имеющих несколько ограничений, фреймворк PowerInfer использует нейронно-осведомленные операторы, которые вычисляют активированные нейронов и их веса直接 на GPU и CPU без необходимости преобразования в плотный формат во время выполнения. Нейронно-осведомленные операторы отличаются от традиционных разреженных операторов, поскольку они фокусируются на отдельных строках и столбцах внутри одной матрицы, а не на всей матрице.
Политика Размещения Нейронов
Чтобы использовать вычислительные возможности CPU и GPU, офлайн-компонент фреймворка PowerInfer генерирует политику размещения, которая руководит фреймворком при распределении нейронов по слоям CPU или GPU. Компонент политики solver генерирует эту политику и контролирует размещение нейронов внутри каждого слоя, что помогает определить вычислительную рабочую нагрузку для отдельных обработчиков. При генерации политики размещения компонент политики solver учитывает различные факторы, включая частоту активации для каждого нейрона, накладные расходы на связь и вычислительные возможности, такие как пропускная способность и размер памяти каждого обработчика.
Результаты и Реализация
Чтобы продемонстрировать возможности фреймворка PowerInfer на устройствах с разными конфигурациями аппаратуры, эксперименты проводились на двух различных персональных компьютерах: один оснащен процессором Intel (INTC ) i9-13900K, GPU NVIDIA RTX 4090 и 192 ГБ оперативной памяти, в то время как другой работает на процессоре Intel i7-12700K, GPU NVIDIA RTX 2080Ti и 64 ГБ оперативной памяти.
Конечное производительность фреймворка PowerInfer сравнивается с llama.cpp с размером пакета 1 и настройками развертывания по умолчанию. Затем фреймворк выборочно использует подсказки из наборов данных ChatGPT и Alpaca, учитывая вариативность длины, наблюдаемую в реальных диалогах ввода и вывода. Следующая фигура демонстрирует скорости генерации для разных моделей.

Как можно наблюдать, фреймворк PowerInfer генерирует 8,32 токена в секунду и достигает до 16 токенов, сгенерированных в секунду, тем самым превосходя фреймворк llama.cpp на значительную величину. Кроме того, по мере увеличения количества выходных токенов производительность фреймворка PowerInfer также улучшается, поскольку фаза генерации существенно влияет на общее время вывода.

Кроме того, как можно наблюдать на изображении выше, фреймворк PowerInfer превосходит фреймворк llama.cpp на компьютерах с низкими характеристиками, с пиковой скоростью генерации 7 токенов в секунду и средней скоростью генерации токенов 5 токенов в секунду.

Вышеуказанное изображение демонстрирует распределение нагрузки нейронов между GPU и CPU для двух фреймворков. Как можно видеть, фреймворк PowerInfer увеличивает долю нагрузки нейронов GPU значительно, с 20 до 70 %.

Вышеуказанное изображение сравнивает производительность двух фреймворков на двух компьютерах с разными характеристиками. Как можно видеть, фреймворк PowerInfer последовательно демонстрирует высокую скорость генерации выходных токенов по сравнению с фреймворком llama.cpp.
Окончательные Мысли
В этой статье мы говорили о PowerInfer, высокоскоростном движке вывода LLM для стандартного компьютера, работающего на одном потребительском уровне GPU. В своей основе фреймворк PowerInfer стремится использовать высокую локальность, присущую выводу LLM, характеризующуюся степенным распределением активации нейронов. Фреймворк PowerInfer является быстрой системой вывода, предназначенной для больших языковых моделей, которая использует адаптивные предсказатели и нейронно-осведомленные операторы для активации нейронов и вычислительной разреженности.












