Перейти к содержимому
ПереводыDatawhale и китайские курсы

Happy-LLM, глава 4: большие языковые модели

Конспект четвёртой главы книги Datawhale «Строим большую модель с нуля»: что отличает LLM от BERT-эпохи, какие у неё способности и слабости, и три этапа обучения — предобучение, SFT и RLHF.

Четвёртая глава книги «Строим большую модель с нуля» (Happy-LLM) завершает теоретическую часть. Авторы отвечают на два вопроса: чем большая языковая модель (LLM) отличается от предобученных моделей вроде BERT и как такую модель обучают — от сырого текста до ассистента, который понимает инструкции. Глава без кода: это теория, которую главы 5 и 6 потом воплощают руками.

Конспект написан своими словами. Где книга устарела или неточна, мы это отмечаем; числовые примеры посчитаны заново.

  • LLM — та же Decoder-only архитектура и та же задача «следующий токен», что у GPT, но на порядки больше параметров и данных. Узко — модели от десятков миллиардов параметров; широко — всё от ≈1 млрд, если есть «эмерджентные» способности.
  • Четыре способности: эмерджентность (способности появляются скачком при росте масштаба), обучение в контексте, следование инструкциям, пошаговые рассуждения (цепочка мыслей).
  • Четыре особенности: многоязычность «из коробки», длинный контекст, расширение на картинки, галлюцинации.
  • Три этапа обучения: предобучение (знания), SFT — дообучение на инструкциях (умение отвечать), RLHF — обучение с подкреплением по отзывам людей (соответствие ожиданиям). DPO — упрощённая замена RLHF.
  • Главные трудности предобучения — вычисления (распределённое обучение, ZeRO) и данные (состав смеси, очистка, дедупликация).
Раздел главыУрок курса
4.2.1 Масштаб, закон C≈6NDC \approx 6ND5.1.1 Законы масштабирования
4.2.1 Данные для предобучения5.1.2 Данные для предобучения
4.2.1 Распределённое обучение, ZeRO5.4.3 Распределённое обучение
4.2.2 SFT, многоходовые диалоги6.1.1 Base и chat, 6.1.2 SFT
4.2.3 RLHF, PPO, DPO6.3.2 RLHF и PPO, 6.3.3 DPO

Главу полезно прочитать дважды: перед ступенью 5 — как обзор, после ступени 6 — чтобы увидеть, как всё складывается. Описание PPO в книге очень сжатое; для настоящего понимания нужен модуль 6.0 нашего курса.

LLM — языковая модель, у которой гораздо больше параметров, чем у прежних, и которая предобучена на гораздо большем корпусе. Архитектура и задача те же, что у GPT (Decoder-only, предсказание следующего токена), но масштаб другой — и поэтому другие способности.

Книга даёт два определения. В узком смысле LLM — это модели с десятками и сотнями миллиардов параметров, обученные на триллионах токенов на кластерах из многих видеокарт. В широком — всё от ≈1 млрд параметров (пример в книге — Qwen-1.5B) до сотен миллиардов (Grok, 314B), если у модели проявляются эмерджентные способности, недоступные BERT и T5.

Точкой отсчёта считают GPT-3 (175 млрд параметров), а эпоху открыл ChatGPT (ноябрь 2022), обученный в три этапа: предобучение, SFT, RLHF. Книга приводит хронологию первого года после ChatGPT. Выборка из неё:

МесяцОткрытые моделиЗакрытые модели
2022.11—ChatGPT (OpenAI)
2023.02LLaMA (Meta), MOSS (Фудань)—
2023.03Alpaca, Vicuna, ChatGLMGPT-4, ERNIE Bot (Baidu), Claude, Bard
2023.04Qwen (Alibaba)SenseNova (SenseTime)
2023.06ChatGLM2, InternLM (Shanghai AI Lab), Baichuan—
2023.07LLaMA 2Claude 2
2023.09Baichuan 2Gemini, Hunyuan (Tencent)
2023.11Yi (01.AI), DeepSeekGrok (xAI)

Эмерджентные способности. Главное отличие от PLM: при той же архитектуре и той же задаче некоторые умения почти отсутствуют у маленьких моделей и резко появляются у больших — как фазовый переход в физике, «количество переходит в качество». Именно с ними связаны надежды на то, что LLM когда-нибудь приблизятся к общему искусственному интеллекту (AGI).

Обучение в контексте (in-context learning). Впервые показано на GPT-3: модель решает задачу по инструкции и нескольким примерам в запросе, без обновления весов. Книга сравнивает экономику. Дообучение даже небольшой BERT-подобной модели требует видеокарты от 10 ГБ и, главное, размеченных данных — от тысячи до десятков тысяч примеров, размеченных людьми. LLM часто хватает инструкции и 1–5 примеров. Поэтому практика сдвинулась от «предобучить и дообучить» к промпт-инжинирингу — подбору запроса.

Следование инструкциям (instruction following). После дообучения на смеси задач, сформулированных как инструкции (instruction tuning), модель справляется и с новыми инструкциями, которых не было в обучении. Именно это сделало ChatGPT массовым продуктом: сочинение, программа, проверка контрольной — всё через одну и ту же переписку. На этой способности держатся агенты и рабочие процессы на LLM.

Пошаговые рассуждения (step by step reasoning). Раньше модели проваливались на задачах в несколько шагов — например, на классической китайской задаче «куры и кролики в одной клетке» (столько-то голов и столько-то ног, сколько кого?). LLM справляются с ними с помощью цепочки мыслей (Chain-of-Thought, CoT): модель выписывает промежуточные шаги и только потом ответ. Книга упоминает гипотезу, что эта способность во многом идёт от обучения на коде.

Пример CoT на задаче про кур и кроликов (наш): «35 голов, 94 ноги. Если бы все были курами, ног было бы 70. Лишних 24 ноги — по 2 на каждого кролика, значит кроликов 12, кур 23». Модель, которую попросили «рассуждать по шагам», выдаёт похожую цепочку и реже ошибается, чем при ответе одним числом.

Как пример применения книга приводит Copilot от Microsoft на базе GPT-4: дописывание и генерация кода опираются сразу на следование инструкциям и на рассуждения.

  • Многоязычность. Корпуса для предобучения по природе многоязычные, поэтому LLM сразу понимают много языков. Но качество неравномерно: хороших английских данных больше всего, и модели вроде GPT-4 сильнее в английском, чем в китайском; китайские модели (ERNIE Bot, Qwen) за счёт дополнительного обучения лучше работают с китайским. То же верно для русского.
  • Длинный контекст. У PLM стандарт — 512 токенов (BERT, T5). LLM обучают на 4K, 8K, 32K токенов, а позиционное кодирование RoPE (или ALiBi) позволяет экстраполировать на длины больше обучающих. Пример из книги: InternLM предобучали на 32K, а работать он умеет с 200K токенов. Тема подробно — в модуле 5.5 курса.
  • Мультимодальность. К LLM добавляют кодировщик изображений и слой-адаптер (Adapter), дообучают на парах «картинка — текст», и модель отвечает на вопросы по картинкам. Как лучше согласовать представления текста и изображений — открытый вопрос.
  • Галлюцинации. Модель уверенно выдумывает: например, список литературы к статье из несуществующих работ. Это врождённое свойство LLM и большая проблема в медицине, финансах и других областях, где ошибка дорога. Ограничения в промпте и RAG (глава 7) помогают, но полностью проблему не решают.
flowchart LR
P["Предобучение<br/>триллионы токенов сырого текста<br/>задача: следующий токен"] --> S["SFT<br/>миллиарды токенов инструкций<br/>задача: ответ на инструкцию"]
S --> R["RLHF<br/>сравнения ответов людьми<br/>модель наград + PPO"]
P -.-> K["знания"]
S -.-> F["умение отвечать"]
R -.-> A["полезно, честно, безопасно"]
Три этапа обучения LLM по главе 4 (схема наша)

Предобучение (Pretrain) — первый, главный и самый дорогой этап. Задача та же, что у GPT, — каузальная языковая модель (CLM): по началу текста предсказать следующий токен. Отличие от BERT-эпохи — в масштабе.

МодельСлоёвdmodeld_\text{model}ГоловПараметровТокенов предобучения
BERT-base12768120,1 млрд≈3 млрд
BERT-large241024160,3 млрд≈3 млрд
Qwen-1.8B242048161,8 млрд2,2 трлн
LLaMA-7B324096327 млрд1 трлн
GPT-39612 28896175 млрд300 млрд

Сколько нужно данных и вычислений. Книга ссылается на закон масштабирования: вычисления C≈6NDC \approx 6ND, где NN — число параметров, DD — число токенов обучения. Читается так: на каждый параметр и каждый токен уходит около 6 операций с плавающей точкой (2 на прямой проход и 4 на обратный). Для GPT-3: 6×175⋅109×300⋅109≈3,2⋅10236 \times 175 \cdot 10^9 \times 300 \cdot 10^9 \approx 3{,}2 \cdot 10^{23} операций.

Сколько токенов на параметр? GPT-3 обучали примерно на 1,7 токена на параметр (300 млрд на 175 млрд). Книга пишет, что «LLaMA предложила» брать около 20 токенов на параметр. Уточним: правило «≈20 токенов на параметр» получено в работе DeepMind о Chinchilla (Hoffmann и др., 2022; она есть в списке литературы главы), а LLaMA пошла дальше и обучала маленькие модели на гораздо большем числе токенов, чтобы их было дешевле использовать. Пример по правилу Chinchilla: модели на 7 млрд параметров нужно ≈140 млрд токенов и 6×7⋅109×1,4⋅1011≈5,9⋅10216 \times 7 \cdot 10^9 \times 1{,}4 \cdot 10^{11} \approx 5{,}9 \cdot 10^{21} операций.

По оценке книги, модель на десятки миллиардов параметров обучают больше месяца на 1024 A100, модель на несколько миллиардов — 2–3 дня на 256 A100. Поэтому без распределённого обучения не обойтись.

Распределённое обучение. Две базовые идеи:

  • Параллелизм по данным (data parallelism). Модель помещается в одну видеокарту, но хочется большой батч и быстрее. На каждой карте — полная копия модели, каждая обрабатывает свою часть батча; после прохода градиенты усредняются, и все копии обновляются одинаково. Итоговый батч = сумма батчей на картах.
  • Параллелизм по модели (model parallelism). Модель не помещается в одну карту — её режут: разные слои или части слоёв живут на разных картах.

На их основе выросли тензорный параллелизм, 3D-параллелизм и ZeRO. Популярные фреймворки — DeepSpeed (самый распространённый), Megatron-LM, ColossalAI.

ZeRO (Zero Redundancy Optimizer) — главная идея DeepSpeed (вторая — выгрузка части данных в оперативную память, CPU-offload). Память при обучении делится на состояния модели (веса, градиенты, состояния оптимизатора Adam) и остальное (активации, буферы, фрагментация). При смешанной точности на один параметр уходит около 16 байт: 2 на вес в fp16, 2 на градиент, 12 на состояния Adam (копия весов в fp32, первый и второй моменты). Три уровня ZeRO делят эти данные между NN картами:

УровеньЧто делится между картамиБайт на параметр при N=4N = 4Модель 7B на одну карту
Обычный DDPничего16112 ГБ
ZeRO-1состояния Adam2 + 2 + 12/4 = 749 ГБ
ZeRO-2+ градиенты2 + 2/4 + 12/4 = 5,538,5 ГБ
ZeRO-3+ сами веса16/4 = 428 ГБ

(Расчёт наш, только состояния модели, без активаций.) Чем глубже деление, тем меньше памяти на карте, но тем больше обмена данными между картами, поэтому загрузка видеокарт выше всего у ZeRO-1 и ниже всего у ZeRO-3. Выбор зависит от размера модели и железа. На машине с 4 картами по 32 ГБ полное обучение 7B даже с ZeRO-3 не влезает с запасом (ещё нужны активации) — поэтому в курсе модели такого размера дообучают через LoRA (урок 6.2.1).

Данные. Почти все знания LLM получает при предобучении, поэтому корпус должен быть огромным (сотни миллиардов — триллионы токенов) и разнообразным. Открытые источники: CommonCrawl, C4, GitHub, Википедия и др.; компании добавляют закрытые качественные данные. Пропорции смеси — «секретный рецепт» каждой лаборатории. Смесь LLaMA (по статье LLaMA, которую цитирует книга):

ИсточникДоляОбъём на диске
CommonCrawl67,0%3,3 ТБ
C415,0%783 ГБ
GitHub4,5%328 ГБ
Википедия4,5%83 ГБ
Книги4,5%85 ГБ
ArXiv2,5%92 ГБ
StackExchange2,0%78 ГБ

Для китайских моделей задача труднее: качественных данных на английском больше, а китайские лаборатории свои корпуса обычно не публикуют. На момент написания главы открытыми были, например, SkyPile (150 млрд токенов, Kunlun Tiangong) и корпус yayi2 (100 млрд). Для русского языка ситуация похожая.

Очистка данных — качество часто важнее объёма. Три шага:

  1. Подготовка документов: фильтрация адресов (вредные сайты), извлечение текста из HTML, определение языка.
  2. Фильтрация: убрать мусор, рекламу, токсичный текст. Либо классификатором, обученным на эталонных текстах, либо эвристиками — вручную заданными признаками качества.
  3. Дедупликация: повторы сильно портят обобщение. Похожие документы находят хешированием (например, MinHash) или точным совпадением подстрок.

Пример эффекта очистки из книги: SlimPajama (627 млрд токенов после фильтрации и дедупликации RedPajama) даёт модель лучше, чем исходный RedPajama на 1 трлн токенов.

После предобучения модель похожа, по образу книги, на начитанного, но бестолкового книжника: продолжит любой текст, но не понимает, что от неё хотят. Она просто дописывает. Второй этап — SFT (Supervised Fine-Tuning) — учит пользоваться знаниями.

В эпоху BERT дообучали под каждую задачу отдельно. LLM учат общему умению следовать инструкциям — через дообучение на инструкциях. Пример: вход «Какая сегодня погода?», выход — вежливый развёрнутый ответ.

Объём и разнообразие. Под одну узкую задачу хватает 500–1000 примеров. Для общего умения нужны тысячи типов задач и в сумме порядка нескольких миллиардов токенов. Важны и пропорции. InstructGPT (предшественник ChatGPT) использовал такую смесь запросов пользователей API: генерация текста 45,6%, открытые вопросы 12,4%, мозговой штурм 11,2%, чат 8,4%, переписывание 6,6%, суммаризация 4,2%, классификация 3,5%, прочее 3,5%, вопросы по документу 2,6%, извлечение 1,9%.

Откуда данные. Ответы, написанные людьми, дороги, и их почти никто не публикует — во многом на них держался успех ChatGPT. Дешёвая альтернатива — генерировать инструкции и ответы сильной моделью по нескольким «затравочным» примерам (так сделан набор Alpaca по методу Self-Instruct).

Формат. Типичная запись — три поля: instruction (что сделать), input (дополнительный ввод, может быть пустым), output (эталонный ответ). При обучении поля вставляются в шаблон, чтобы модель отличала инструкцию от продолжения текста. Например, в стиле Alpaca:

### Instruction:
Переведи на английский: Сегодня отличная погода
### Response:
The weather is great today!

Важная деталь: SFT — это всё тот же CLM. Модель получает весь текст «шаблон + инструкция + ответ», но потери считаются только по токенам ответа; токены инструкции маскируются.

Многоходовые диалоги. Умение помнить, что было сказано раньше в разговоре, появляется только на этапе SFT — предобучение тут ни при чём. Пусть диалог — это P1 C1 P2 C2 P3 C3 (P — реплики пользователя, C — ответы модели). Книга сравнивает три способа сделать из него обучающие примеры:

СпособЧто учимМинус
1. Один пример, потери только на C3последний ответтеряются C1 и C2
2. Три примера: до C1, до C2, до C3каждый ответ отдельномногократно пересчитываем одно и то же начало
3. Один пример, потери на C1, C2 и C3все ответы сразу—

Третий способ возможен благодаря каузальной маске: ответ C1 вычисляется, не видя P2 и дальше, поэтому один проход по всему диалогу эквивалентен трём отдельным. Так сейчас и делают.

RLHF (Reinforcement Learning from Human Feedback) считают главным шагом от GPT-3 к ChatGPT. Книга делит обучение на две части: предобучение даёт знания, выравнивание (alignment) — согласует поведение с ожиданиями людей. SFT выравнивает по инструкциям, RLHF — глубже, по ценностям: ответ должен быть полезным, честным и безвредным.

Аналогия книги: предобучение — это лекции, SFT — разбор того, как читать условие и решать задачи, а RLHF — домашние задания, которые проверяет учитель: правильные приёмы закрепляются, неправильные отбрасываются.

Обучение с подкреплением — отдельная ветка машинного обучения: агент действует в среде, получает награду и меняет стратегию (policy), чтобы набрать больше награды. Здесь агент — LLM, действие — ответ, награду выдаёт модель, обученная на оценках людей. RLHF состоит из двух шагов.

Шаг 1. Модель наград (Reward Model, RM). По сути — классификатор текста: LLM (или BERT) с линейным слоем, который выдаёт одно число — насколько ответ нравится людям. Людям трудно согласованно ставить баллы, поэтому их просят сравнивать: для одного запроса указать лучший (chosen) и худший (rejected) ответ. Пример пары (наш): на просьбу помочь обойти сигнализацию в чужой машине chosen — отказ с объяснением, rejected — подробная инструкция. Модель наград получает обе пары «запрос + ответ» и учится, чтобы награда chosen была выше награды rejected:

LRM=−log⁡σ(r(x,ychosen)−r(x,yrejected)).\mathcal{L}_\text{RM} = -\log \sigma\bigl(r(x, y_\text{chosen}) - r(x, y_\text{rejected})\bigr).

Что здесь написано: rr — число, которое модель наград ставит ответу yy на запрос xx; σ\sigma — сигмоида. Если разница наград большая и положительная, σ≈1\sigma \approx 1 и потеря ≈0; если модель перепутала порядок — потеря большая. Пример: при разнице 2 потеря −ln⁡σ(2)≈0,13-\ln \sigma(2) \approx 0{,}13, при разнице −2-2 — около 2,13. (Книга описывает эту идею словами — «максимизировать разницу наград», формула наша.)

Модель наград не обязана быть того же размера, что LLM: у OpenAI LLM была на 175 млрд, а модель наград — на 6 млрд. Инициализировать её из SFT-модели или обучать с нуля — по книге, однозначного ответа нет.

Шаг 2. PPO (Proximal Policy Optimization). В обучении участвуют четыре модели:

МодельОткудаОбучается?Роль
Actor (актёр)SFT-модельдагенерирует ответы, это и есть будущий ассистент
Reference (эталон)SFT-модельнетне даёт актёру уйти слишком далеко
Reward (награда)модель награднетоценивает ответ целиком
Critic (критик)модель награддаоценивает ожидаемую награду на каждом шаге

Цикл: на запрос отвечают актёр и эталон; расхождение между ними измеряют KL-дивергенцией и вычитают из награды (штраф за уход от исходной модели); ответ актёра оценивают модель наград и критик; из этого собираются потери для актёра и критика, и оба обновляются. Книга приводит формулы этого шага в упрощённом виде и прямо отсылает за подробностями к теории RL (учебник Datawhale «Easy RL»). У нас PPO разобран в уроках 6.0.3 и 6.3.2.

Цена — память: четыре модели вместо одной. По оценке книги, PPO с актёром и моделью наград по 7 млрд параметров требует около 240 ГБ видеопамяти (четыре A100 80 ГБ, по ≈60 ГБ на каждой). Зачем две замороженные модели? Чтобы обучение не разрушило знания и навыки, полученные при предобучении и SFT.

DPO (Direct Preference Optimization). Из-за сложности RLHF появилась замена через обычное обучение с учителем. DPO показывает, что задачу «максимизировать награду с ограничением на уход от эталона» можно решить за один этап обучения прямо на парах chosen/rejected — без модели наград и без RL. Нужны только две модели (обучаемая и эталонная), и обучение гораздо проще PPO. Вывод формулы DPO книга не приводит — он есть в уроке 6.3.3.

Глава заканчивается переходом: дальше — обучение своей LLM с нуля (глава 5) и на фреймворках (глава 6).

  1. Посчитайте по C≈6NDC \approx 6ND вычисления для LLaMA-7B (1 трлн токенов). Ответ: ≈4,2⋅10224{,}2 \cdot 10^{22}. Сколько это дней на одной видеокарте с реальными 100 трлн операций в секунду? Около 4900 дней — поэтому кластеры.
  2. Повторите таблицу ZeRO для модели на 1,5 млрд параметров и 4 карт. Помещается ли полное обучение в 32 ГБ на карту при ZeRO-2? (Состояния модели — 8,25 ГБ на карту, остаётся место под активации.)
  3. Сделайте из диалога из трёх реплик пример по способу 3: выпишите токены и отметьте, где потери считаются, а где нет. Затем сравните со своим кодом SFT на уроке 6.1.2.
  4. Посчитайте потерю модели наград для разниц наград 0, 1, 3. Ответы: 0,69; 0,31; 0,05.
  5. Запишите задачу «кур и кроликов» с другими числами (например, 20 голов и 56 ног) и попросите любую доступную модель ответить сначала сразу, потом «по шагам». Ответ: 12 кур и 8 кроликов.
EnglishРусский
large language model, LLMбольшая языковая модель
artificial general intelligence, AGIобщий искусственный интеллект
emergent abilitiesэмерджентные способности
in-context learningобучение в контексте
instruction following / instruction tuningследование инструкциям / дообучение на инструкциях
chain-of-thought, CoTцепочка мыслей
hallucinationгаллюцинация
pre-trainingпредобучение
supervised fine-tuning, SFTдообучение с учителем
RLHFобучение с подкреплением по отзывам людей
alignmentвыравнивание
reward model, RMмодель наград
proximal policy optimization, PPOPPO, проксимальная оптимизация стратегии
direct preference optimization, DPOпрямая оптимизация предпочтений
data / model parallelismпараллелизм по данным / по модели
ZeROоптимизатор без избыточности (ZeRO)
deduplicationдедупликация