Этот репозиторий содержит реализацию модели LLaMA 2 (Large Language Model Meta AI), вариант генеративного предварительно обученного преобразователя (GPT). Реализация фокусируется на архитектуре модели и процессе вывода. Код реструктурирован и подробно прокомментирован для облегчения понимания ключевых частей архитектуры.
RMS-Нормализация: RMSNorm — это упрощение исходной нормализации слоя (LayerNorm). LayerNorm — это метод регуляризации, который может решить проблему внутреннего смещения ковариат, чтобы стабилизировать активации слоев и улучшить сходимость модели. В LLaMA 2 это оказалось весьма успешным.
Функция активации: LLaMA 2 использует функцию активации SwiGLU вместо ReLU, что приводит к повышению эффективности обучения.
Вращающиеся позиционные встраивания (RoPE). Вдохновленный проектом GPT-Neo-X, LLaMA 2 включает в себя вращающиеся позиционные встраивания на каждом уровне, улучшая понимание позиционирования модели.
Увеличенная длина контекста и внимание к групповым запросам (GQA). Модель LLaMA 2 имеет удвоенное контекстное окно (с 2048 до 4096 токенов) и использует внимание к групповым запросам. Это позволяет лучше обрабатывать длинные документы, истории чатов и задачи обобщения.
KV-кэширование — это важнейший метод оптимизации, используемый в этой реализации для ускорения процесса вывода при декодировании языковой модели (LM). Во время авторегрессионного декодирования, когда каждый токен прогнозируется на основе предыдущих токенов, самовнимание в модели является причинным. Это означает, что представление токена вычисляется только на основе самого себя и предыдущих токенов, а не будущих.
При самообслуживании входная последовательность проецируется с использованием проекций ключа, значения и запроса. KV-кэш эффективно хранит результаты проекций ключа и значения, устраняя необходимость в избыточных вычислениях в будущих итерациях декодирования. В результате представления токенов, которые остаются фиксированными во время авторегрессионного декодирования, могут быть извлечены из кэша, что значительно увеличивает скорость вывода.
Этот метод KV-кэширования является ключевой архитектурной особенностью, которая повышает эффективность и скорость модели LLaMA во время декодирования.
Модель LLaMA 2 включает в себя вариант концепции многозапросного внимания (MQA), предложенной Шазиром (2019), усовершенствованный алгоритм многоголового внимания (MHA). MQA повышает эффективность механизмов внимания, сохраняя при этом минимальное ухудшение точности.
При традиционном многоголовом внимании все вычисления внимания повторяются h раз, где h — количество голов внимания. Однако GQA уменьшает избыточность вычислений, удаляя или значительно уменьшая размер головок (h) из значений K и V. В MQA каждая «голова» значения запроса (Q) подвергается одному и тому же преобразованию K и V, оптимизируя вычисление внимания.
Это усовершенствование приводит к аналогичной вычислительной производительности MHA, но значительно уменьшает объем данных, считываемых/записываемых из памяти. Как следствие, GQA повышает как производительность (за счет увеличения интенсивности арифметических операций), так и эффективность использования пространства памяти (за счет уменьшения объема хранимых данных KV-кэша), что делает его ценным дополнением к архитектуре LLaMA.
В модели LLaMA 2 вращающееся позиционное встраивание (RoPE) играет решающую роль в улучшении механизмов внимания путем включения позиционной информации в представления токенов. Концепция «внимания» очень мощная, но для того, чтобы рассчитанное внимание было значимым, токены должны иметь понятие позиции.
Вложения позиций бывают двух основных типов: абсолютные и относительные. Внедрения абсолютной позиции кодируют абсолютную позицию слова во входной фразе, а встраивания относительной позиции кодируют относительную позицию между двумя словами. Эти встраивания предоставляют важную позиционную информацию, которая помогает токенам понять их контекст в последовательности.
Вращающиеся позиционные встраивания используют уникальный подход, используя матрицы вращения для внедрения позиционной информации. Цель состоит в том, чтобы гарантировать, что скалярное произведение векторов q и k в позициях m и n зависит только от q, k и их относительного расстояния (m — n). Матрица вращения, где угол — это положение вектора, встраивается в исходный вектор посредством умножения матрицы в соответствии с этим критерием.
Этот инновационный подход к включению позиционной информации расширяет способность модели понимать отношения и контекст токенов, способствуя улучшению механизмов внимания.
model.py
: содержит реализацию модели преобразователя LLaMA с подробными комментариями, объясняющими каждый компонент и функциональность.
inference.py
: демонстрирует, как использовать обученную модель LLaMA для вывода, предоставляя представление об обработке ввода и вывода.
Не стесняйтесь исследовать код, исправлять ошибки и экспериментировать с моделью LLaMA 2!