1. История
Недавно мы развернули выделенные кластеры вывода больших моделей в пакетном режиме в производственной среде и успешно увеличили скорость вывода больших моделей, включая 70B, на 50 %, значительно снизив затраты на развертывание и стабильно применяя их в производственных средах. Эта статья основана на нашем опыте развертывания кластеров вывода больших моделей и описывает некоторые методы эффективного повышения скорости вывода больших моделей. Наконец, в конце мы рекомендуем несколько крупных схем вывода моделей, которые мы оценили и показали себя хорошо. Я надеюсь, что эти предложения помогут читателям выбрать подходящую структуру рассуждений для своих проектов.
Хён Вон Чунг, учёный из OpenAI, в своей публичной лекции 2023 года «Большие языковые модели» [8] отметил, что определённые возможности больших моделей могут быть раскрыты только тогда, когда они достигают определённого масштаба. Видно, что количество параметров увеличивается. В будущем количество больших моделей обязательно увеличится. Большие, это также тенденция развития больших моделей. По мере увеличения количества параметров требования к скорости вывода больших моделей становятся все выше и выше. Какие методы можно использовать для повышения скорости вывода или пропускной способности больших моделей?
Сначала мы обсудим направление оптимизации ускорения для больших моделей. Затем, исходя из временной шкалы, в статье будут представлены некоторые из наиболее классических и практичных технологий ускорения больших моделей в отрасли, включая, помимо прочего, такие технологии, как FlashAttention. [1]» и «PageAttention[3]».
Ниже приведены некоторые классические технологии ускорения вывода больших моделей в отрасли в хронологическом порядке. В этой статье делается попытка предоставить читателям обзор методов ускорения вывода больших моделей в хронологическом порядке развития.
В дополнение к технологиям, упомянутым выше, существуют также технологии количественного анализа больших моделей, которые могут повысить скорость вывода больших моделей. Мы не будем обсуждать их здесь сейчас. Мы опубликуем отдельную статью, чтобы представить их позже, когда у нас будет возможность. .
2. Проблемы, с которыми сталкиваются при разработке больших моделей
В будущем количество параметров больших моделей определенно будет становиться все больше и больше. Это также тенденция развития больших моделей, и требования к ускорению вывода будут становиться все выше и выше.
OpenAI представила правила расширения для больших моделей в своей статье «Законы масштабирования для моделей нейронного языка» [7]. Эти правила иллюстрируют взаимосвязь между возможностями модели и ее размером. В частности, возможности модели сильно зависят от ее размера, включая количество параметров модели, размер набора данных и объем вычислений, необходимых во время обучения. Кроме того, учёный OpenAI Хён Вон Чунг в своей публичной лекции 2023 года «Большие языковые модели» [8] отметил, что определённые возможности больших моделей могут быть раскрыты только при достижении определённого масштаба.
Изображение выше взято из ppt[8] речи Хён Вон Чона. Рисунок в основном выражает точку зрения. По мере увеличения масштаба модели, например от GPT3 до GPT4, возможности модели становятся все сильнее и сильнее, и даже появляются новые возможности.
Однако по мере увеличения размера модели скорость вывода больших моделей будет постепенно снижаться, поскольку большее количество параметров требует большего количества вычислений на графическом процессоре. Снижение скорости вывода приводит к ухудшению пользовательского опыта, поэтому вопрос ускорения вывода больших моделей становится все более важным.
3. Направления оптимизации для ускорения вывода больших моделей.
Структура модели Llama2
Давайте сначала кратко рассмотрим структуру модельного ряда Llama 2, обратившись к статье Llama 2 [9]. В настоящее время большинство моделей генеративного языка, таких как серия Llama, в основном используют модуль Decoder в архитектуре Transformer. На платформе Huggingface этот тип структуры модели обычно называется CausalLM и представляет собой модель причинного языка.
На рисунке выше показана структура большой модели Llama2, ядром которой является расчет внимания (Llama Attention). Это также самый трудоемкий модуль во всем процессе рассуждения. Большинство последующих оптимизаций осуществляется на основе внимания. Чтобы лучше понять структуру модели Llama 2, мы сначала кратко разберем весь процесс рассуждения модели Llama2. Студенты, которым это не интересно, могут сразу пропустить его.
- После того как пользователь отправляет запрос модели, первая операция, выполняемая моделью, — это прогнозирование следующего символа (токена) и добавление прогнозируемого символа к входным данным для продолжения прогнозирования. Этот процесс будет продолжаться до тех пор, пока модель не выведет токен STOP, после чего прогнозирование останавливается и модель выводит окончательный результат.
- В процессе генерации следующего символа (токена) модели необходимо выполнить N вычислений уровня декодера Llama. В частности, модель «Лама-2-7Б» выполняет 32 расчета, а модель «Лама-2-13Б» — 40 расчетов.
- Наиболее важным звеном расчета на уровне декодера ламы является расчет внимания (Llama Attention). Большая часть времени вывода тратится на вычисление внимания, поэтому для повышения эффективности расчета внимания разработаны различные методы оптимизации.
Каковы направления ускорения для вывода больших моделей?
Из структурного анализа модели Llama 2 мы можем сделать вывод, что большая модель демонстрирует следующие характеристики в процессе расчета вывода:
- Во всем процессе рассуждения наиболее трудоемкой частью является расчет внимания. Оптимизация скорости вычислений внимания может значительно улучшить общую производительность рассуждений.
- В процессе расчета внимания кэш-ключ-значение (KV Cache) занимает большой объем ресурсов видеопамяти. На примере модели 13B для обработки последовательности Prompt требуется примерно 3 ГБ дополнительной видеопамяти, и эта часть видеопамяти будет часто выделяться и освобождаться, что приводит к большому количеству фрагментов, если фрагменты видеопамяти можно уменьшить. , пропускную способность больших моделей также можно повысить.
- В процессе вывода графическому процессору необходимо обработать и вычислить большое количество параметров. Модель 7B имеет 7 миллиардов параметров, а модель 13B — 13 миллиардов параметров. Последняя и самая мощная модель DBRX в мире имеет 130 миллиардов параметров, что требует эффективной обработки этих параметров. Здесь также может быть место для оптимизации.
В ответ на три вышеуказанные характеристики в настоящее время в отрасли предложено множество эффективных методов оптимизации, обычно таких как:
1. Оптимизация скорости расчета FlashAttention-Attention
FlashAttention[1] повышает скорость вычислений оператора «Внимание» без изменения результата вычисления оператора «Внимание». FlashAttention демонстрирует значительное улучшение производительности на различных моделях и задачах. Например, на таких моделях, как BERT-large и GPT-2, FlashAttention может обеспечить сквозное ускорение от 15% до 3 раз по сравнению с базовыми реализациями.
2. Оптимизация управления кэш-памятью PageAttention-KV
Цель PageAttention[3] — уменьшить фрагментацию видеопамяти. Система VLLM на основе PageAttention может увеличить пропускную способность популярной модели большого языка (LLM) более чем в 10 раз, сохраняя при этом плавное распределение затрат времени.
3. MOE-уменьшите параметры модели во время вывода.
Целью MOE (Mixture of Experts) [4] является сокращение количества параметров, участвующих в расчетах во время вывода модели.
Результаты экспериментов: Модель Mixtral превосходит модель Llama 2 70B в большинстве тестов производительности, а скорость ее вывода в 6 раз выше, чем у последней. Модель поддерживает несколько языков, обладает мощными возможностями генерации кода и может быть точно настроена для выполнения определенных инструкций, что приводит к высоким оценкам в тесте MT-Bench.
Подробнее о каждом из вышеперечисленных направлений мы расскажем позже.
4. Оптимизация расчета операторов FlashAttention-Attention.
FlashAttention опубликовал две статьи, описывающие оптимизацию оператора Attention, в том числе FlashAttention-1[1] и FlashAttention-2[2]. Давайте возьмем FlashAttention-1[1] в качестве примера, чтобы понять принцип его оптимизации.
Давайте сначала разберемся с иерархической структурой памяти графического процессора. Рисунок взят из статьи FlashAttention-1[1].
Иерархия памяти графического процессора состоит из трех основных частей: SRAM, HBM и DRAM. Ниже представлена эталонная конфигурация графического процессора A100.
SRAM (статическое оперативное запоминающее устройство) имеет самую высокую скорость доступа (19 ТБ/с), но его емкость относительно невелика (всего 20 МБ).
HBM (High Bandwidth Memory) обеспечивает большой объем памяти (40 ГБ) и высокоскоростной доступ к данным (1,5 ТБ/с).
DRAM (динамическое оперативное запоминающее устройство), здесь конкретно относится к основной памяти вне графического процессора, имеет самую большую емкость (более 1 ТБ), но самую медленную скорость доступа (12,8 ГБ/с).
Как видно из приведенной выше конфигурации, чем меньше объем памяти, тем выше скорость обработки.
В традиционном процессе вычисления внимания большое количество операций ввода/вывода выполняется путем доступа к HBM. Алгоритм FlashAttention уменьшает количество обращений к HBM за счет оптимизации процесса вычисления внимания для повышения эффективности вычислений, поэтому это алгоритм оптимизации с учетом операций ввода-вывода.
На рисунке ниже показан метод ускорения FlashAttention из статьи FlashAttention-1[1].
FlashAttention использует хитрый прием для быстрого вычисления механизма внимания и эффективного использования памяти, а именно позволяет избежать одновременной обработки всей огромной матрицы внимания путем мозаики входных данных, что обычно требует много памяти и вычислительных ресурсов. Представьте, что у нас есть огромная библиотека (матрица), а метод FlashAttention подобен разделению книг в библиотеке на несколько небольших стопок и последующей обработке только одной стопки книг за раз. Таким образом, нам не нужно сразу вынимать все книги и ставить их на стол (для этого нужен большой стол и много времени).
В частности, при выполнении матричных вычислений FlashAttention эффективно снижает потребность в медленном хранилище большой емкости (HBM), разделяя данные на блоки и используя быстрое хранилище малой емкости (SRAM) на графическом процессоре для доступа к вычислениям. Это не только ускоряет вычисления, но и существенно снижает потребность в видеопамяти.
Уменьшая зависимость от медленного хранилища, FlashAttention может значительно повысить скорость обучения модели, сохраняя при этом или даже улучшая ее производительность. Например, обучение BERT-large на 15% быстрее, чем запись MLPerf 1.1, скорость обучения GPT-2 в три раза выше, чем у базовых линий HuggingFace и Megatron-LM, а скорость обучения полей длинной последовательности увеличена. до 2,4 раза.
Изображение ниже взято из блога [14], представленного пользователем Huggingface о Flash Attention, который позволяет лучше понять, как Flash Attention разбивает матрицу.
Поскольку Flash Attention может ускорять вычисления, какие платформы поддерживают вычисления Flash Attention? Во второй половине статьи мы порекомендуем несколько отличных платформ вывода.
5. PageAttention-Оптимизация управления видеопамятью
Концепция PageAttention[3] была первоначально предложена Вусуком Квоном, автором VLLM, и это также наиболее важная стратегия оптимизации структуры рассуждений VLLM. В своей статье Вусук Квон рассказал, как использовать PageAttention для решения ключевой проблемы в сервисах моделей больших языков (LLM) — эффективного управления памятью для повышения пропускной способности без увеличения задержек.
Давайте сначала разберемся с распределением структуры памяти большой модели в случае вывода. Следующий рисунок взят из статьи [3].
Это схема памяти для обслуживания большой языковой модели с 13 ГБ параметров на NVIDIA A100. Параметры LLM 13 ГБ занимают часть видеопамяти. Для каждого запроса KV Cache будет занимать 12 ГБ видеопамяти. KVCache быстро увеличивается, он будет часто выделяться и освобождаться, и система будет генерировать большое количество фрагментов видеопамяти. Если их не обрабатывать, система будет медленно разрушаться.
Так как же VLLM решает проблему фрагментации видеопамяти с помощью PageAttention? Изображение ниже взято из статьи [14], посвященной технологии управления видеопамятью VLLM.
PageAttention работает путем разделения кэша «ключ-значение» (кэш KV) на фрагменты фиксированного размера (или «страницы») и позволяет хранить эти фрагменты в памяти несмежно. Этот метод основан на виртуальной памяти и технологии подкачки операционной системы для более гибкого и эффективного управления ресурсами памяти.
В традиционном механизме внимания запрошенный KV-кеш должен постоянно храниться в памяти, что приводит к двум основным проблемам: фрагментации памяти и невозможности эффективного совместного использования памяти. Фрагментация памяти ограничивает размер пакетов, а невозможность совместного использования памяти приводит к дублированию данных и пустой трате ценных ресурсов памяти.
PageAttention выполняет следующие действия для решения этих проблем:
- Разделите кэш KV. Разделите кэш KV для каждого запроса на несколько более мелких фрагментов, размер которых фиксирован и может быть скорректирован в зависимости от конкретных потребностей модели и оборудования.
- Ненепрерывное хранение. В отличие от традиционных блоков кэша KV, которые хранятся в памяти последовательно, PageAttention позволяет распределять эти блоки в физической памяти несмежно. Таким образом, блоки памяти можно динамически распределять и перерабатывать в соответствии с фактическими потребностями, сокращая потери памяти.
- Динамическое управление: PageAttention динамически управляет этими блоками памяти аналогично управлению виртуальной памятью в операционной системе. Система может оптимизировать использование памяти, выделяя или освобождая блоки кэша KV по требованию в зависимости от текущего использования памяти.
- Совместное использование памяти: PageAttention также поддерживает совместное использование блоков кэша KV между разными запросами или между разными последовательностями в одном запросе. Такое совместное использование является гибким и может происходить на уровне блоков, что еще больше снижает использование памяти и повышает эффективность.
Таким образом, PageAttention позволяет обслуживающей системе LLM значительно повысить пропускную способность обработки запросов за счет сокращения потерь памяти и улучшения ее совместного использования при сохранении той же задержки.
Благодаря оптимизации PageAttention компания VLLM увеличила пропускную способность LLaMA 7B и 13B более чем в 10 раз. Рисунок ниже взят из статьи [11].
6. MOE-уменьшите параметры модели во время вывода
Недавно выпущенная DBRX, самая мощная в мире большая модель с открытым исходным кодом и 130 миллиардами параметров, а также большая модель с открытым исходным кодом Mistral 8x7B основаны на архитектуре MOE. Почему модели с большим количеством параметров должны использовать архитектуру MOE? В качестве примера мы возьмем большую модель Mistral 8x7B с открытым исходным кодом, чтобы представить преимущества в производительности архитектуры MOE.
Говоря о больших моделях MOE, давайте сначала сравним структурные различия между обычными большими моделями и большими моделями MOE, см. рисунок выше. В большой модели МЧС параметры большой модели разделены на 8 групп плюс маршрутизатор. Каждая группа называется экспертной группой. Когда поступает запрос, большая модель МЧС сначала предлагает маршрутизатору выбрать две из восьми экспертных групп, и только эти две экспертные группы участвуют в расчете. По сравнению с обычными большими моделями все параметры должны участвовать в расчетах графического процессора.
Таким образом, скорость вывода большой модели MOE примерно в четыре раза выше, чем у обычной большой модели того же уровня.
Давайте посмотрим на реализацию Mistral MOE. Mistral MOE — это большая модель размером 8*7B [12], выпущенная сайтом mistral.ai. Рисунок ниже взят из статьи [12], которая представляет собой структуру ее экспертного уровня. Большая модель 8*7Б.
Mixtral 8x7B — это языковая модель Sparse Mixture of Experts (SMoE). Она основана на архитектуре Mistral 7B, но каждый уровень состоит из 8 блоков прямой связи (т. е. экспертов). По мере обработки каждого токена сеть маршрутизации на каждом уровне выбирает двух экспертов для обработки текущего состояния и объединения их результатов. Хотя каждый токен взаимодействует только с двумя экспертами, эксперты, выбранные на каждом временном шаге, могут быть разными, поэтому каждый токен имеет доступ к 47B параметров, но во время вывода используются только 13B активных параметров.
Mixtral демонстрирует свою превосходную производительность во многих тестах, особенно в математике, генерации кода и понимании нескольких языков. По сравнению с Llama 2 70B и GPT-3.5 Mixtral показывает аналогичную или лучшую производительность по большинству показателей оценки. В частности, Mixtral использует в 5 раз меньше активных параметров (13B), чем Llama 2 70B (70B), но работает лучше или одинаково практически во всех категориях.
Большая модель MOE может увеличивать количество параметров без снижения скорости вывода, что является тенденцией развития больших моделей в будущем.
7. Тензорное распараллеливание – Тензорный параллелизм
Если у вас есть несколько карт графического процессора, вы можете использовать тензорный параллелизм, чтобы еще больше ускорить скорость вывода больших моделей.
Представьте, что у вас очень толстая книга и вы хотите скопировать всю книгу сразу, но ваш копировальный аппарат может копировать только несколько страниц за раз. В это время вы можете разделить книгу на несколько частей, скопировать каждую часть отдельно и, наконец, соединить все скопированные части по порядку, завершив таким образом копию всей книги.
В тензорном параллелизме большая модель, с которой мы имеем дело, похожа на толстую книгу, а графический процессор — на копировальный аппарат. Поскольку один графический процессор не может обработать всю большую модель сразу, нам необходимо разделить модель (в данном случае тензор веса) на несколько частей и позволить разным графическим процессорам обрабатывать их отдельно (что эквивалентно разным частям фотокопии книги). Обработка входных данных аналогична копированию каждой страницы книги отдельно, а затем объединению скопированных частей для формирования полного выходного результата.
Таким образом, разделяя работу, несколько графических процессоров работают вместе для выполнения большой задачи, которую не может выполнить один графический процессор. Именно так работает тензорный параллелизм, и он позволяет нам обрабатывать очень большие модели.
Изображение из статьи[13]
Технология тензорного параллелизма используется для распределенного развертывания больших моделей на нескольких графических процессорах. В качестве примера возьмем умножение матрицы. Когда входной тензор представляет собой матрицу, умноженную на первый тензор веса, эту операцию можно рассматривать как сначала деление тензора веса на столбцы, а затем деление каждого столбца после деления на входные тензоры и объединение. результаты этих продуктов. Эти объединенные выходные данные будут экспортированы из графического процессора и агрегированы для формирования окончательного выходного результата. Процесс показан на рисунке выше, см. статью [13].
8. Рекомендуемая схема обоснования
В предыдущей статье мы обсудили несколько технологий ускорения и оптимизации, таких как Flash Attention, Page Attention, MOE и тензорную параллельную технологию. Далее, основываясь на наших собственных реальных операциях и оценках, мы порекомендуем вам некоторые системы вывода, которые в настоящее время работают хорошо.
9. Резюме и перспективы
В этой статье мы подробно исследуем ряд технологий и методов, предназначенных для повышения скорости вывода больших моделей, включая, помимо прочего, технологию Flash Attention, Page Attention, MOE и тензорную параллельную технологию. Развернув в производственной среде выделенные кластеры вывода больших моделей, мы успешно снизили скорость вывода на 50%, включая модели масштаба 70B, и стабильно применили эти технологии в производственной среде, доказав тем самым эффективность и действенность этих методов оптимизации. Практичность.
Поскольку большие модели все чаще используются в различных областях, эффективно повысить скорость вывода и снизить стоимость вывода стало непростой задачей. Наша практика не только демонстрирует некоторые доступные в настоящее время технологии ускорения, но также рекомендует несколько крупных структур вывода моделей, которые после оценки, основанной на нашем опыте, имеют отличную производительность. Эти предложения призваны помочь читателям выбрать систему рассуждений, которая лучше всего соответствует их потребностям, когда они сталкиваются с множеством вариантов.
Заглядывая в будущее, с постоянным развитием технологий и появлением новых алгоритмов, мы полагаем, что будет разработано больше технологий оптимизации ускорения для дальнейшего повышения эффективности вывода больших моделей. Наконец, мы также с нетерпением ждем возможности глубоко обсудить и представить новые технологии и методы для повышения скорости вывода больших моделей в будущем.
Рекомендации
[1] FlashAttention: быстрое и эффективное использование памяти точное внимание с учетом ввода-вывода (https://arxiv.org/abs/2205.14135)
[2] FlashAttention-2: более быстрое внимание с лучшим параллелизмом и разделением работы (https://arxiv.org/abs/2307.08691)
[3] Эффективное управление памятью для обслуживания больших языковых моделей с помощью PagedAttention (https://arxiv.org/abs/2309.06180)
[4] mixtral-of-experts(https://mistral.ai/news/mixtral-of-experts/)
[5] Микстрал экспертов (https://arxiv.org/abs/2401.04088)
[6] MEDUSA: Простая система ускорения вывода LLM с несколькими головками декодирования (https://arxiv.org/pdf/2401.10774.pdf)
[7] Законы масштабирования для моделей нейронного языка (https://arxiv.org/pdf/2001.08361.pdf)
[8] Хён Вон Чунг (OpenAI), Большие языковые модели (в 2023 г.), выступление в Сеульском национальном университете.
[9] Лама 2: Открытый фундамент и точно настроенные модели чата (https://arxiv.org/abs/2307.09288)
[10] Все, что вам нужно — это внимание (https://arxiv.org/pdf/1706.03762.pdf)
[11] https://blog.vllm.ai/2023/06/20/vllm.html
[12] https://arxiv.org/pdf/2401.04088.pdf
[13] https://huggingface.co/docs/text-generation-inference/en/conceptual/tensor_parallelism
[14] https://huggingface.co/docs/text-generation-inference/en/conceptual/flash_attention
[15] https://blog.vllm.ai/2023/06/20/vllm.html
* Текст/ лингун
Автор этой статьи — Dewu Technology. Другие интересные статьи см. на странице Dewu Technology.
Перепечатка без разрешения Dewu Technology строго запрещена, в противном случае будет наступать юридическая ответственность в соответствии с законом!
Пиратские ресурсы «Цин Юй Нянь 2» были загружены в npm, в результате чего npmmirror был вынужден приостановить работу службы unpkg. Чжоу Хунъи: У Google осталось не так много времени. Я предлагаю сделать все продукты открытыми. time.sleep(6) здесь играет роль. Что он делает? Лайнус самый активный в «еде собачьего корма»! Новый iPad Pro использует 12 ГБ микросхем памяти, но утверждает, что у него 8 ГБ памяти. People’s Daily Online рассматривает зарядку офисного программного обеспечения в стиле «матрешки»: Только активно решая «набор», мы сможем выпустить будущее Flutter 3.22 и Dart 3.4. новая парадигма разработки для Vue3, без необходимости `ref/reactive`, нет необходимости в `ref.value` MySQL 8.4 LTS Руководство на китайском языке: поможет вам освоить новую область управления базами данных Тонги Цяньвэнь Уровень GPT-4 Цена основной модели снижена на 97%, 1 юань и 2 миллиона токенов