Эпоха 6 · Генеративка и системы · 2023

50 LLaMA

LLaMA: Open and Efficient Foundation Language Models · Touvron, Lavril, Izacard и др. · Meta AI
🟧 оригинал выборочно~1.5 чоригинал ↗
Суть за 20 секунд. Семейство эффективных моделей (7B–65B) на ТОЛЬКО публичных данных: 13B бьёт GPT-3 175B. Архитектурные детали (RMSNorm, SwiGLU, RoPE) стали стандартом open-моделей. Утёкшие веса засеяли всю экосистему open-source LLM.

Контекст

Сильные LLM были закрытыми (GPT-3/3.5). Meta выпускает семейство эффективных foundation-моделей на публичных данных.

Идея и механизм

Следуя урокам Chinchilla (#42), берут модели поменьше (7B–65B), но обучают на БОЛЬШЕМ числе токенов → выгоднее по компьюту ИНФЕРЕНСА. 13B-LLaMA обходит GPT-3 175B на многих бенчмарках. Архитектурные детали стали стандартом: RMSNorm (нормализация), SwiGLU (активация в FFN), RoPE (rotary positional embeddings).

линейная алгебра RoPE: позиция через поворот векторов

Как кодировать позицию? RoPE вращает пары координат Q и K на угол, пропорциональный позиции. Для пары (x1, x2) на позиции m:

\[ \begin{pmatrix} x'_1 \\ x'_2 \end{pmatrix} = \begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} \]

Магия в том, что скалярное произведение повёрнутых qm и kn зависит только от относительной позиции (m−n), а не от абсолютных. Это даёт относительное позиционирование «бесплатно» (без отдельных эмбеддингов) и лучше тянется на длины, не виденные при обучении. Плюс RMSNorm (нормировка по корню среднего квадрата — дешевле LayerNorm) и SwiGLU (гейтовая активация, эмпирически лучше ReLU) — эти три выбора стали де-факто стандартом архитектуры open-LLM.

PyTorch RoPE — поворот Q/K по позиции
import torch
# поворачиваем пары измерений на угол ∝ позиции
def rope(x, pos, theta):
    ang = pos * theta                      # угол растёт с позицией
    x1, x2 = x[..., 0::2], x[..., 1::2]
    return torch.cat([x1*ang.cos() - x2*ang.sin(),
                      x1*ang.sin() + x2*ang.cos()], dim=-1)
# после RoPE: q_m · k_n зависит только от (m − n)
LLaMA 13Bмного токенов GPT-3 175Bбольше, но мало токенов 13B ≳ 175B дешевле инференс
Меньшая, но дольше обученная модель не только догоняет гиганта, но и дешевле в эксплуатации — что важнее для реального использования.
Аналогия. RoPE — как часовая стрелка: положение во времени задаётся углом поворота. Чтобы понять, «насколько одно событие позже другого», смотрят на разницу углов, а не на абсолютное время. Так и модель: повернув представления токенов на угол по их позиции, она считывает относительное расстояние между словами из геометрии — естественно и переносимо на длинные тексты.

Почему это важно

Веса (по research-лицензии) утекли в марте 2023 → взрыв open-source: Alpaca, Vicuna и тысячи дообученных моделей; запустил волну открытых LLM (на ней выросли Mistral и далее). LLaMA-2/3 уже официально открыты.

Связи

← применяет42. Chinchilla

LLaMA — прямое воплощение урока Chinchilla: меньшие модели на куда большем числе токенов. И идёт дальше — обучает сверх точки Chinchilla ради дешёвого инференса, что окупается на миллионах запросов.

→ дообучается через41. LoRA

Открытые веса LLaMA + LoRA = взрыв кастомизации: сообщество дообучает базу лёгкими адаптерами на потребительском железе. Открытость модели и дешевизна дообучения вместе и дали такую скорость итераций.

→ обслуживается49. vLLM / PagedAttention

Открытую модель надо где-то эффективно запускать — vLLM стал стандартным движком сёрвинга для LLaMA-семейства. Открытые веса + эффективный инференс = практичный self-hosting.

Вопросы пытливого ума

Почему «утечка весов» стала поворотным моментом, а не просто инцидентом?

Потому что впервые в руках сообщества оказалась сильная базовая модель, которую можно свободно дообучать и запускать. До этого open-модели заметно отставали. LLaMA дала фундамент, на котором за недели выросли Alpaca, Vicuna и сотни проектов — это сместило центр инноваций отчасти из лабораторий в open-source. Meta потом сделала выводы и стала выпускать LLaMA-2/3 официально открытыми.

Зачем обучать сверх точки Chinchilla, если она «оптимальна»?

Chinchilla оптимизирует обучение при фиксированном compute. Но для развёрнутой модели важнее стоимость инференса (миллионы запросов). Маленькая модель дешевле обслуживать, поэтому выгодно «переобучить» её лишними токенами: тратишь больше на обучение один раз, экономишь вечно на запросах. LLaMA сознательно идёт против compute-optimal ради deploy-optimal.

RMSNorm, SwiGLU, RoPE — это принципиальные улучшения или мелкие хаки?

Скорее аккуратно отобранные эмпирические улучшения, каждое даёт небольшой выигрыш, но вместе они заметны и почти не стоят дополнительного compute. RMSNorm дешевле, SwiGLU чуть качественнее ReLU, RoPE лучше для длинных контекстов. Их ценность — в том, что они стали стандартным набором: почти все современные open-LLM используют именно эту тройку.

Что читать в оригинале

Читать ключевое — выбор данных/архитектуры (RMSNorm, SwiGLU, RoPE) и результаты «меньше, но дольше обучено».