Техотчёт DeepSeek LLM (2024): свои законы масштабирования
Конспект первого техотчёта DeepSeek: как команда перемерила законы масштабирования, ввела меру размера модели в FLOPs на токен, показала зависимость оптимального распределения бюджета от качества данных и обучила модели 7B и 67B на 2 трлн токенов.
Коротко
Заголовок раздела «Коротко»- DeepSeek LLM — первая модель компании: плотный (не MoE) трансформер в двух размерах, 7B и 67B, обученный на 2 трлн токенов английского и китайского текста. Архитектура почти как у LLaMA 2, и это сделано нарочно: интересное в отчёте — не архитектура, а методика.
- Главный вклад — свои законы масштабирования. Команда показала, почему у OpenAI (2020) и Chinchilla (2022) получились разные ответы на вопрос «куда вкладывать бюджет: в размер модели или в данные», и предложила более честную меру размера модели — FLOPs на токен без эмбеддингов вместо числа параметров .
- Добавлены законы масштабирования для гиперпараметров: формулы, по которым из бюджета вычислений сразу считаются почти оптимальные learning rate и batch size. Это избавляет от перебора на каждом масштабе.
- Неожиданный вывод: оптимальное распределение бюджета зависит от качества данных. Чем чище данные, тем больше добавленного бюджета стоит отдавать размеру модели, а не числу токенов.
- Вместо косинусного расписания learning rate используется ступенчатое (multi-step): качество то же, зато первую ступень можно переиспользовать в следующих экспериментах.
- Пост-трейнинг — обучение с учителем на инструкцияхобучение с учителем на инструкциях (SFT)EN supervised fine-tuning (SFT) на ~1,5 млн примеров и затем прямая оптимизация предпочтенийпрямая оптимизация предпочтений (DPO)EN direct preference optimization (DPO)Rafailov и др., 2023. Обучение на парах предпочтений без reward model и без RL-цикла.. Отдельно измеряли долю «зацикливания» ответов и заметили, что она растёт вместе с долей математики в SFT-данных.
Как читать вместе с курсом
Заголовок раздела «Как читать вместе с курсом»| Раздел отчёта | О чём | Куда в курсе |
|---|---|---|
| §2.1 Data | дедупликация 91 дампа Common Crawl, фильтрация, ремикс | 5.1.2 «Данные для претрейна» |
| §2.2–2.3 Architecture, Hyperparameters | Pre-Norm, RMSNorm, SwiGLU, RoPE, GQA только в 67B; ступенчатый LR | 4.6.3 «Цикл обучения» |
| §2.4 Infrastructures | HAI-LLM: DP + TP + SP + 1F1B, ZeRO-1, bf16 с накоплением в fp32 | 5.4.3 «Распределённое обучение» |
| §3 Scaling Laws | главное в отчёте: , формулы для LR и batch size, зависимость от данных | 5.1.1 «Законы масштабирования» |
| §4 Alignment | SFT (4 эпохи для 7B, 2 для 67B), DPO, борьба с зацикливанием | 6.1.2 «SFT», 6.3.3 «DPO» |
| §5 Evaluation | бенчмарки, оценка по перплексии против генерации | 7.3.1 «Бенчмарки» |
Новичку хватит §3 и §4: §5 — длинные таблицы бенчмарков, которые сегодня устарели, а §2 полезен как пример того, что входит в «обычную» часть техотчёта.
Данные: дедупликация поперёк дампов
Заголовок раздела «Данные: дедупликация поперёк дампов»Common Crawl выкладывается «дампами» — снимками веба за период. Обычно каждый дамп чистят от дубликатов отдельно. DeepSeek объединяет дампы и ищет дубликаты сразу по всем. Эффект сильный:
| Сколько дампов чистим вместе | 1 | 2 | 6 | 12 | 16 | 22 | 41 | 91 |
|---|---|---|---|---|---|---|---|---|
| Доля удалённых документов, % | 22,2 | 46,7 | 55,7 | 69,9 | 75,7 | 76,3 | 81,6 | 89,8 |
Чистка 91 дампа вместе убирает примерно вчетверо больше документов, чем чистка каждого по отдельности. Логика понятна: популярная страница попадает в десятки снимков, и внутри одного дампа она выглядит уникальной.
Токенизатор — байтовый BPEбайтовый BPE (byte-level BPE)EN byte-level BPE (BBPE)BPE, у которого базовый словарь — 256 байтов UTF-8. Любой текст кодируется без <unk>. Используется в GPT-2, GPT-4o, Llama 3, Qwen, DeepSeek. на библиотеке tokenizers, с предварительной разбивкой (чтобы перевод
строки, пунктуация и иероглифы CJK не склеивались в один токен) и разбиением чисел на отдельные цифры. Обычных
токенов 100 000, плюс 15 служебных; размер словаря в конфигурации обучения — 102 400 (с запасом).
Архитектура: как LLaMA, но глубже
Заголовок раздела «Архитектура: как LLaMA, но глубже»| 7B | 67B | |
|---|---|---|
| Слоёв | 30 | 95 |
| 4096 | 8192 | |
| Голов внимания | 32 | 64 |
| Голов ключей и значений | 32 (MHA) | 8 (внимание с группами запросоввнимание с группами запросов (GQA)EN grouped-query attention (GQA)Головы запросов делятся на G групп, у каждой группы своя пара K/V. G = H — это MHA, G = 1 — MQA. Стандарт Llama 3 и Qwen (Ainslie и др., 2023).) |
| Длина контекста | 4096 | 4096 |
| Батч (последовательностей) | 2304 | 4608 |
| Learning rate | 4,2e-4 | 3,2e-4 |
| Токенов обучения | 2,0 трлн | 2,0 трлн |
Микроуровень повторяет LLaMA: Pre-NormPre-Norm (нормализация на входе подслоя)EN pre-normalization (Pre-LN)x + F(Norm(x)): нормализуется только вход ветки, остаточный путь чистый. Стандарт с GPT-2 (2019); требует финальной нормализации перед LM-головой. с RMSNormRMSNorm (нормализация по среднеквадратичному)EN root mean square layer normalization (RMSNorm)x / sqrt(mean(x²) + ε) · g — LayerNorm без вычитания среднего и без сдвига β (Zhang, Sennrich, 2019). Стандарт Llama, Qwen, DeepSeek, MiniMind., SwiGLUSwiGLUEN SwiGLU (Swish-gated linear unit)FFN современных LLM: down(SiLU(gate(x)) · up(x)), три матрицы без смещений; скрытый размер обычно ≈ 8d/3 и больше (Shazeer, 2020). в FFN с промежуточной размерностью , ротационные позиционные эмбеддингиротационные позиционные эмбеддинги (RoPE)EN rotary position embedding (RoPE)RoPE предложен в Китае (Су Цзяньлинь и соавторы, компания Zhuiyi). Сейчас используется почти во всех LLM. для позиций. Отличие на макроуровне: модель на 67B растили в глубину (95 слоёв), а не в ширину FFN, как делают обычно. Авторы объясняют это двумя причинами: так получается лучше по качеству и удобнее резать модель на стадии конвейера.
Инфраструктура — собственный фреймворк HAI-LLM: параллелизм по данным, тензорный, по последовательности и конвейерный 1F1B, ZeRO-1 для состояний оптимизатора, FlashAttention, обучение в bf16 с накоплением градиентов в fp32, слияние операций (LayerNorm, GEMM, шаг Adam). Чекпойнты сохраняются асинхронно каждые 5 минут — потерять можно не больше пяти минут обучения.
Ступенчатое расписание learning rate
Заголовок раздела «Ступенчатое расписание learning rate»Вместо привычного косинуса DeepSeek использует ступеньки: 2000 шагов разогрева до максимума, затем, после 80% токенов, LR падает до 31,6% от максимума, а после 90% — до 10%. Итоговое качество такое же, как у косинуса (это показано на модели 1,6B, обученной на 100 млрд токенов).
Зачем тогда менять? Косинус «привязан» к общей длине обучения: решили учить вдвое дольше — надо переобучать с начала. У ступенек первая, самая длинная стадия не зависит от того, где вы остановитесь, и её можно переиспользовать в следующем эксперименте. Для исследования законов масштабирования, где десятки прогонов с разным бюджетом, это экономит очень много вычислений.
Почему именно 31,6%? Это — то есть две ступени по полпорядка каждая.
Законы масштабирования, часть 1: гиперпараметры
Заголовок раздела «Законы масштабирования, часть 1: гиперпараметры»Сначала авторы ответили на вопрос, который обычно замалчивают: а были ли модели в их экспериментах вообще хорошо обучены? Если learning rate и batch size подобраны плохо, кривая масштабирования описывает не закон природы, а вашу небрежность.
Они прогнали сетку по batch size и learning rate при бюджетах от до FLOPs, объявили «почти оптимальными» все точки, где ошибка на валидации не хуже минимума больше чем на 0,25%, и приблизили их степенными функциями бюджета :
Словами: с ростом бюджета оптимальный learning rate медленно падает, а оптимальный batch size растёт (примерно как корень третьей степени из бюджета). Обе зависимости — прямые на графике в логарифмических осях.
Проверим на числах. При FLOPs:
- ;
- токенов.
При бюджете в тысячу раз больше () learning rate уменьшится в раза, а батч вырастет в раза. Важная оговорка авторов: в формулы входит только бюджет ; влияние того, как бюджет разделён между моделью и данными, здесь не учтено, хотя небольшая разница заметна.
Законы масштабирования, часть 2: мера размера модели
Заголовок раздела «Законы масштабирования, часть 2: мера размера модели»Обычная формула бюджета — , где — число параметров, — число токенов. Шестёрка здесь — грубая оценка: по 2 FLOPs на умножение-сложение в прямом проходе и по 4 в обратном. Проблема в том, что эта формула не учитывает внимание (оно зависит от длины последовательности, а не только от числа параметров) и по-разному врёт для моделей разного размера. Если считать только параметры без эмбеддингов () или все параметры (), ошибка на маленьких моделях доходит до 50%.
DeepSeek вводит меру — число FLOPs на токен без эмбеддингов:
Первое слагаемое — те же линейные слои, второе — внимание (оно растёт с длиной последовательности ). Вычисления словаря в не входят: они почти не добавляют модели «мозгов». С этой мерой бюджет записывается просто: .
Посчитаем для модели с , , :
- FLOPs на токен — линейные слои;
- — внимание;
- вместе .
То есть на такой конфигурации внимание даёт около 40% вычислений на токен — ровно та часть, которую формула не видит вовсе.
Дальше — метод Chinchilla (IsoFLOP): для каждого из 8 бюджетов от до обучаются примерно 10 моделей с разным разделением «размер против данных», и по минимуму кривой находится оптимум. Результат:
Сумма показателей степени равна 1 — так и должно быть, ведь . Оптимум почти посередине: при росте бюджета в 100 раз размер модели растёт примерно в раз, а число токенов — в раз.
Главная практическая проверка: законы, подогнанные на маленьких моделях, правильно предсказали ошибку моделей 7B и 67B — то есть работали при бюджете в 1000 раз больше того, на котором их подбирали.
Законы масштабирования, часть 3: качество данных меняет ответ
Заголовок раздела «Законы масштабирования, часть 3: качество данных меняет ответ»Самый интересный результат отчёта. Те же эксперименты прогнали на трёх наборах данных: ранние внутренние данные, текущие внутренние данные (чище) и OpenWebText2 (ещё чище, потому что маленький и обработан тщательнее).
| Данные | Показатель () | Показатель () |
|---|---|---|
| OpenAI (OpenWebText2), 2020 | 0,73 | 0,27 |
| Chinchilla (MassiveText), 2022 | 0,49 | 0,51 |
| DeepSeek, ранние данные | 0,450 | 0,550 |
| DeepSeek, текущие данные | 0,524 | 0,476 |
| DeepSeek, OpenWebText2 | 0,578 | 0,422 |
Закономерность: чем чище данные, тем больше — тем больше добавленного бюджета стоит вкладывать в размер модели, а не в число токенов. Авторы объясняют это так: качественный текст логичнее и предсказывать его после достаточного обучения проще, поэтому выгоднее увеличивать ёмкость модели.
Отсюда же — объяснение старого спора. OpenAI (2020) получила , Chinchilla (2022) — ; это может быть не ошибкой кого-то из них, а разницей в данных и в учёте вычислений. И ещё один практический вывод, который авторы формулируют осторожно: показатель можно использовать как косвенную оценку качества датасета.
Выравнивание: SFT и DPO
Заголовок раздела «Выравнивание: SFT и DPO»Собрано около 1,5 млн примеров инструкций на английском и китайском: 1,2 млн «полезных» (31,2% — общие задачи, 46,6% — математика, 22,2% — код) и 300 тыс. по безопасности.
- SFT. Модель 7B дообучали 4 эпохи, 67B — только 2: большая модель быстрее переобучалась. Learning rate соответственно 1e-5 и 5e-6.
- Зацикливание. Кроме метрик на бенчмарках, измеряли долю ответов, которые не заканчиваются и уходят в повтор одного и того же куска текста (на 3868 промптах). Доля росла вместе с количеством математики в данных: слабая модель хватается за повторяющиеся шаблоны рассуждения. Помогло двухстадийное дообучение и DPO.
- DPO. Одна эпоха, learning rate 5e-6, батч 512, разогрев и косинусное расписание. Пары предпочтений строили по полезности и безопасности, ответы-кандидаты генерировали сами модели DeepSeek Chat. Эффект: открытая генерация стала заметно лучше, оценки на стандартных бенчмарках почти не изменились.
Базовые модели сравнивали с LLaMA 2 (тоже 2 трлн токенов, но почти только английский). Несколько чисел из главной таблицы отчёта (точность, %):
| Бенчмарк | LLaMA 2 7B | DeepSeek 7B | LLaMA 2 70B | DeepSeek 67B |
|---|---|---|---|---|
| MMLU (5-shot) | 45,8 | 48,2 | 69,0 | 71,3 |
| GSM8K (8-shot) | 15,5 | 17,4 | 58,4 | 63,4 |
| MATH (4-shot) | 2,5 | 6,0 | 13,5 | 18,7 |
| HumanEval (0-shot) | 14,6 | 26,2 | 28,7 | 42,7 |
| C-Eval (китайский, 5-shot) | 33,9 | 45,0 | 51,4 | 66,1 |
| CMath (китайская математика) | 25,1 | 34,5 | 53,9 | 63,0 |
На английских задачах понимания текста модели примерно равны, а на коде, математике и китайском DeepSeek заметно впереди. Разрыв на китайских бенчмарках ожидаем: у LLaMA 2 китайского в данных мало.
Полезная методическая деталь: задачи с вариантами ответа оценивают по перплексии (выбирается вариант с наименьшей перплексией), задачи со свободным ответом — генерацией с жадным декодированием, а Pile-test — через бит на байтбит на байт (BPB)EN bits per byte (BPB)Loss, пересчитанный на байт исходного текста; в отличие от perplexity, его можно сравнивать между моделями с разными токенизаторами.. Это разные измерения, и сравнивать числа между разными способами оценки нельзя (урок 7.3.1).
Что сделать руками
Заголовок раздела «Что сделать руками»- Посчитайте для своей модели. Возьмите конфигурацию из урока 4.6.2 и вычислите по формуле выше долю вычислений, которая приходится на внимание, при длине контекста 1024 и 8192. Убедитесь, что при длинном контексте формула врёт сильнее.
- Примените формулы гиперпараметров. Для бюджета вашего учебного прогона (прикиньте ) посчитайте и . Сравните с тем, что вы ставили руками.
- Постройте ступенчатый LR. Реализуйте расписание 80% / 10% / 10% с коэффициентами 1 → 0,316 → 0,1 и сравните кривую обучения с косинусом на маленькой модели из ступени 4. Качество должно получиться близким.
- Проверьте предсказание. По формулам , посчитайте, какой размер модели «оптимален» для бюджета одной вашей RTX 4080 за сутки, и сравните с тем, что реально обучают на такой машине.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| scaling laws | законы масштабирования |
| compute budget | бюджет вычислений |
| non-embedding FLOPs/token | FLOPs на токен без эмбеддингов |
| IsoFLOP profile | профиль при равном бюджете (IsoFLOP) |
| generalization error | ошибка обобщения (на валидации) |
| multi-step learning rate scheduler | ступенчатое расписание learning rate |
| deduplication rate | доля удалённых дубликатов |
| repetition ratio | доля зацикленных ответов |
| supervised fine-tuning (SFT) | дообучение с учителем |
| direct preference optimization (DPO) | прямая оптимизация предпочтений |
| perplexity-based / generation-based evaluation | оценка по перплексии / по генерации |