«Алгоритм параллельного декодирования ‘Lookahead Decoding’ для ускорения вывода LLM»

«Алгоритм ускоренного вывода LLM с параллельным декодированием 'Lookahead Decoding'»

Большие языковые модели (LLM), такие как GPT-4 и LLaMA, быстро переосмысляют современные приложения, но их вывод медленный и его трудно оптимизировать, поскольку он основан на авторегрессивном декодировании. Задержка запроса LLM в основном зависит от длины ответа на запрос или, что то же самое, от количества шагов декодирования, поскольку каждый шаг авторегрессивного декодирования дает только один токен. К сожалению, параллельные вычисления на текущих графических процессорах обычно недостаточно используются, потому что каждый шаг декодирования не использует их возможности. Это представляет проблему для многих практических приложений LLM, таких как чат-боты и персональные помощники, которые зависят от мгновенных ответов и поэтому часто создают большие последовательности с низкой задержкой.

Авторегрессивное декодирование может быть ускорено с помощью использования спекулятивных методов декодирования, таких как Medusa и OSD, которые используют стратегию “угадай и проверь”, в которой предварительная модель делает прогнозы о нескольких возможных токенах в будущем, и исходная LLM проверяет эти прогнозы параллельно. Эти методы могут уменьшить задержку, пользуясь ситуациями, когда требуется меньше шагов декодирования. Однако у них есть некоторые ограничения. Во-первых, скорость принятия токенов, или, что то же самое, насколько правильно черновая модель может предвидеть результаты основной модели, ограничивает максимальное ускорение, которое могут достичь спекулятивные методы декодирования. Во-вторых, создание надежной предварительной модели не является простой задачей; для этого обычно требуется дополнительное обучение и тщательная настройка, чтобы учесть изменения в трафике со временем.

В новом исследовании, проведенном LMSYS ORG, представлена техника просмотра вперед – новый точный метод декодирования, разработанный для решения этих проблем. Хотя вычисление многих последовательных токенов за один шаг вычислительно затратно, было замечено, что LLM может одновременно производить множество ортогональных n-грамм, которые могут быть подходящими для будущих частей создаваемой последовательности. Традиционный метод итераций Якоби адаптирован для параллельного декодирования, что позволяет видеть авторегрессивное декодирование как решение нелинейных уравнений. Созданные n-граммы записываются, проверяются, а затем, при необходимости, включаются в последовательность. Просмотр вперед особенно значим, поскольку:

  • Он не использует предварительную модель, что ускоряет процесс.
  • Сокращает общее число шагов декодирования в log(операций с плавающей точкой) для каждого этапа.

Исследователи демонстрируют, что просмотр вперед значительно сокращает задержку на 1,5-2,3 раза без значительного увеличения вычислительной нагрузки. Возможно, самое важное, он позволяет найти компромисс между обработкой и снижением задержки, хотя и с ограниченным эффектом.

Они создали свою реализацию, чтобы просмотр вперед мог работать с библиотекой huggingface/transformers. HuggingFace предоставляет функцию, но пользователи могут значительно повысить ее эффективность с помощью нескольких строк кода.

Итерация Якоби – проверенный временем метод решения нелинейных систем. LLM в выводе также может использоваться для создания токенов параллельно без необходимости предварительно обученной модели. Поскольку каждый шаг итерации Якоби включает вычисление вперед LLM на более чем одном токене, в нем требуется гораздо больше операций с плавающей точкой, чем в каждом шаге авторегрессивного декодирования. Исследователи обнаружили несколько трудностей, с которыми можно столкнуться, стремясь значительно улучшить производительность Якоби декодирования в реальных приложениях. Хотя он может декодировать множество токенов в ряде шагов, он часто неправильно упорядочивает их. Даже когда они правильно предсказаны, токены часто заменяются на следующих итерациях. В результате лишь некоторые итерации успешно декодируют и правильно располагают несколько токенов одновременно. Из-за этого весь смысл использования параллельного декодирования теряется. В целом, это не приводит к снижению производительности из-за возможностей параллельной обработки графических процессоров.

Просмотр вперед может обойти эти недостатки, основываясь на возможности Якоби декодирования генерировать параллельные n-граммы. Каждый новый токен на определенной позиции декодируется с использованием значений на этой позиции в предыдущих итерациях, как в Якоби декодировании. Благодаря этому процессу образуются множество n-грамм, которые строят временную последовательность исторических токенов на каждой позиции. Для использования этого просмотр вперед собирает и кэширует эти n-граммы на основе их траекторий. Просмотр вперед одновременно проверяет многообещающие n-граммы из кэша и выполняет параллельное декодирование с использованием итераций Якоби для будущих токенов.

Каждая фаза декодирования с предварительным просмотром разделена на две параллельные ветви – ветвь предварительного просмотра и ветвь проверки, для повышения эффективности. Для создания n-грамм из траектории итерации Якоби ветвь предварительного просмотра хранит окно постоянного размера в двумерном виде. В то же время ветвь проверки выбирает и проверяет кандидатов на n-граммы, которые обещают быть эффективными.

Поскольку ограниченность пропускной способности памяти является основным узким местом в декодировании LLM, исследователи объединяют ветви предварительного просмотра и проверки в один проход, используя параллельные возможности GPU и скрывая связанные с ними накладные расходы.

Команда проверила различные размеры LLaMA-2-Chat и CodeLLaMA на MT-bench, HumanEval и GSM8K, чтобы посмотреть, насколько эффективно работает их предварительное декодирование. Техника предварительного просмотра декодирования обеспечивает ускорение без необходимости настройки моделей или предварительных моделей. При использовании с точностью fp16 они оценивают модели 7B, 13B и 33B на одном GPU A100 и модель 70B на двух GPU A100 с параллельной обработкой данных.

  • Обсуждение LLaMA в MT-Bench: Во многих конфигурациях моделей скорость ускоряется примерно в 1,5 раза при использовании предварительного декодирования.
  • CodeLLaMA для HumanEval: Задержка CodeLLaMA снижается более чем в два раза при использовании предварительного декодирования на HumanEval. Это связано с наличием множества легко угадываемых N-грамм в коде.
  • Обучающий CodeLLaMA для GSM8K: Благодаря применению CodeLLaMA-Instructor к математическим задачам GSM8K, предварительное декодирование снижает задержку на 1,8.

Сообщение ‘Decode Ahead’: параллельный алгоритм декодирования для ускорения вывода LLM впервые появилось на MarkTechPost.