Законы масштабирования
Сколько стоит обучить LLM, как делить бюджет между размером модели и данными и почему современные модели учат далеко за «оптимумом Chinchilla».
Зачем это нужно
Заголовок раздела «Зачем это нужно»Финальный прогон предобученияпредобучение, претрейнEN pretraining DeepSeek-V3 занял около 2.7 млн GPU-часовGPU-часыEN GPU hoursЧисло ускорителей × часы работы. 2048 GPU за сутки — 49 152 GPU-часа.. При таком бюджете ошибка в выборе размера модели стоит миллионы долларов. И узнать о ней можно только через два месяца, когда обучение закончится.
Законы масштабированиязаконы масштабированияEN scaling laws позволяют ответить до запуска: какой loss получится при данном бюджете вычисленийвычислительные мощностиEN compute, какую модель и на скольких токенах учить, сколько это займёт дней. Они же объясняют решения, которые иначе выглядят странно: почему 8-миллиардную модель кормят 15 триллионами токенов и почему китайские лаборатории столько пишут об эффективности, а не просто «берут больше видеокарт».
В этом уроке вы привыкнете считать «на салфетке»: FLOPs → GPU-часы → дни → деньги. Это главный навык инженера, который планирует обучение, от маленькой модели в модуле 5.6 до фронтирной.
Степенной закон: прямая в логарифмических осях
Заголовок раздела «Степенной закон: прямая в логарифмических осях»Обучите десяток моделей разного размера и нарисуйте итоговый loss против числа параметров . В обычных осях получится кривая, которая быстро падает и потом почти выходит на плато. В логарифмических осях по обеим координатам точки ложатся на прямую. Это и есть степенной законстепенной законEN power lawЗависимость вида y = a·x^(−α); в логарифмических осях — прямая.:
Правая запись получается из левой логарифмированием: (урок 1.0.2). Это уравнение прямой , где , . Здесь — подгоночная константа, «масштаб» по оси параметров (у Kaplan ); отдельного физического смысла у неё нет. Главное — показатель степени : это наклон прямой, и он говорит, сколько даёт каждое удвоение. В работе Kaplan et al. (2020) получилось :
- удвоили параметры — loss умножился на , то есть упал примерно на 5%;
- увеличили в 10 раз — loss упал примерно на 16%;
- чтобы снизить loss вдвое только за счёт параметров, их нужно увеличить в раз.
Отсюда первое правило масштабирования: улучшения предсказуемы, но дороги. Каждый следующий процент качества стоит экспоненциально больше вычислений.
Второе правило: у loss есть дно. Естественный текст сам по себе непредсказуем (какое слово автор выберет следующим, не знает никто), поэтому в реальных подгонках добавляют неустранимую частьнеустранимый lossEN irreducible lossЧасть loss, которую нельзя убрать никаким масштабом, — непредсказуемость самого текста (слагаемое E в формуле Chinchilla). : . Её нельзя побить никаким масштабом: она отражает энтропию самого языка (урок 1.3.3). Из-за прямая в логарифмических осях со временем изгибается и выходит на полку.
Сколько стоит обучение: C ≈ 6ND
Заголовок раздела «Сколько стоит обучение: C ≈ 6ND»Чтобы планировать, нужна единица измерения. Это FLOPs, число операций с плавающей точкойFLOPs, число операций с плавающей точкойEN floating-point operations (FLOPs)Не путайте FLOPs (сколько операций нужно сделать) и FLOP/s, FLOPS (сколько операций железо делает в секунду). — число операций с плавающей точкой за всё обучение. Удобная оценка для плотного трансформера:
где — число параметров, — число токенов обучения.
Откуда шестёрка, видно на одном линейном слое , где — матрица :
- Прямой проходпрямой проходEN forward passВычисление выхода и loss по графу от входов к выходу с запоминанием промежуточных значений для обратного прохода.. Каждый выход — это умножений и сложений. На один токен: FLOPs, то есть 2 FLOPs на параметр.
- Обратный проход. Нужно посчитать два градиента: по входу () и по весам (, урок 1.2.3). Каждый — такое же умножение матриц, итого 4 FLOPs на параметр.
В трансформере почти все параметры сидят в таких матрицах, поэтому FLOPs на параметр на токен.
| Модель | Параметры | Токены | Токенов на параметр | |
|---|---|---|---|---|
| GPT-3 (2020) | 175B | 300B | 1.7 | |
| Gopher (DeepMind, 2021) | 280B | 300B | 1.1 | |
| Chinchilla (DeepMind, 2022) | 70B | 1.4T | 20 | |
| Llama 3 8B (2024) | 8B | 15T | ≈1900 | |
| DeepSeek-V3 (2024) | 37B активных из 671B | 14.8T | ≈400 на активный |
Для смесь экспертовсмесь экспертов (MoE)EN mixture of experts (MoE) в формулу подставляют активные параметрыактивные параметрыEN activated (active) parametersСколько параметров MoE-модели реально участвует в обработке одного токена. «A22B» в названии Qwen3-235B-A22B — 22 млрд активных из 235 млрд.: каждый токен проходит только через выбранных экспертов, остальные веса в его вычислениях не участвуют.
От FLOPs к дням и деньгам
Заголовок раздела «От FLOPs к дням и деньгам»Видеокарта не работает на паспортной скорости. Часть времени уходит на чтение памяти, обмен между картами, ожидание данных. Долю пика, которая реально тратится на полезные FLOPs модели, называют утилизация FLOPs моделиутилизация FLOPs модели (MFU)EN model FLOPs utilization (MFU)Доля пиковой производительности железа, которая уходит на полезные вычисления модели. Для больших распределённых обучений типичны 30–50 %. (Model FLOPs Utilization). Хорошее значение — 35–50%; у PaLM (Google, 2022) было около 46%.
Здесь пик — в FLOP/с на одну карту, поэтому время получается в секундах, а деление на 3600 переводит GPU-секунды в GPU-часы. Пиковая производительность в BF16 (без учёта разреженности): A100 — 312 TFLOPS, H100 SXM — 989 TFLOPS. Обратите внимание: стоимость не зависит от числа карт. Тысяча карт на 17 дней стоит столько же, сколько две тысячи на 8.5 дня. Больше карт сокращают время, но не цену, и то лишь пока обучение хорошо параллелится: на тысячах карт MFU обычно падает из-за обмена данными.
Пример: Chinchilla на 1000 H100. , MFU 40%:
Это около 413 тыс. GPU-часов, то есть примерно 0.83 млн долл. при аренде по 2 долл. за час.
Проверка на DeepSeek-V3. В техотчёте указано около 2.66 млн GPU-часов H800 на предобучение (и 2.79 млн всего, вместе с расширением контекста и пост-обучением). Подставим: FLOPs за часов — это около 343 TFLOPS полезной работы на карту. H800 — версия H100 с урезанной межчиповой связью, но с теми же вычислительными блоками; 343 TFLOPS — это примерно 35% её пика в BF16. Цифры отчёта сходятся с оценкой «на салфетке». Оговорка: большую часть матричных умножений V3 считала в FP8, где пик карты вдвое выше (урок 5.4.1), а не учитывает внимание и модуль MTP. Так что точная загрузка другая, но порядок величины совпадает, и это главное. Знаменитые «5.6 млн долл.» — это 2.79 млн часов по 2 долл., только финальный прогон: без экспериментов, неудачных запусков и зарплат.
Посчитайте сами
Заголовок раздела «Посчитайте сами»Калькулятор ниже делает ровно этот расчёт: FLOPs ≈ 6·N·D → GPU-часы → дни → деньги. Выберите пресет «как DeepSeek-V3» и сравните результат с 2.788 млн GPU-часов из техотчёта. Потом выберите пресет «Ваша машина» (4× RTX 4080) и посмотрите, сколько займёт обучение модели на 30M параметров и на 0.5B.
Kaplan 2020: «растите модель»
Заголовок раздела «Kaplan 2020: «растите модель»»Команда OpenAI обучила множество моделей — от 768 параметров до 1.5 млрд (без учёта эмбеддингов) — и нашла три степенных закона: по параметрам (), по данным () и по вычислениям. Детали архитектуры (глубина или ширина, число голов) влияли на loss гораздо слабее, чем просто число параметров.
Главный практический вывод касался распределения бюджета. По их подгонке оптимальный размер модели растёт как (значок читается «пропорционально»: равно с точностью до постоянного множителя), а данные — как . Если вычислений стало в 10 раз больше, модель нужно увеличить в раза, а данные — всего в раза. Девиз: большие модели эффективнее используют данные, поэтому учите большую модель и останавливайтесь рано.
GPT-3 сделана в этом духе: 175B параметров и всего 300B токенов, меньше двух токенов на параметр.
Chinchilla 2022: «поровну»
Заголовок раздела «Chinchilla 2022: «поровну»»Через два года DeepMind перепроверила выводы. Авторы обучили больше 400 моделей от 70M до 16B параметров на 5–500 млрд токенов и оценили оптимум тремя независимыми способами:
- Огибающая кривых обучения. Для каждого бюджета смотрим, какая модель к этому моменту дала минимальный loss.
- IsoFLOP-кривые. Фиксируем бюджет, перебираем размер модели (данные подстраиваются: ) и ищем минимум получившейся «параболы».
- Параметрическая подгонка всей поверхности loss формулой .
Все три способа сошлись: и с . Удвоили бюджет — увеличьте и модель, и данные в раза. Отношение получилось около 20 токенов на параметр. Вычислительно-оптимальнаявычислительно-оптимальное обучениеEN compute-optimal trainingТакое деление бюджета между размером модели и числом токенов, при котором loss минимален; по Chinchilla — около 20 токенов на параметр. модель для бюджета :
Пример: бюджет FLOPs даёт B параметров и B токенов. Вот весь план «на салфетке» одной схемой:
flowchart LR B["Бюджет: GPU × дни × MFU"] --> C["C, FLOPs"] C --> N["N = √(C / 120)"] C --> D["D = 20 · N"] N --> L["Ожидаемый loss L(N, D)"] D --> L N --> I["Цена инференса ≈ 2N FLOPs на токен"]
Проверка боем: Chinchilla (70B, 1.4T токенов) против Gopher (280B, 300B токенов) при почти одинаковом бюджете. Модель в 4 раза меньше выиграла на большинстве тестов, например 67.5% против 60% на MMLU (вопросы с вариантами ответа по 57 предметам, урок 7.3.1), и при этом в 4 раза дешевле на инференсе.
Почему Kaplan ошибся
Заголовок раздела «Почему Kaplan ошибся»Чаще всего называют две причины. Первая — расписание learning rate. У Kaplan все модели учили с одним и тем же косинусным расписанием, а loss для меньшего числа токенов брали из промежуточных точек этих прогонов. Но в середине расписания learning rate ещё не снижен, и loss там выше, чем у модели, чьё расписание закончилось бы именно на этом числе токенов. Авторы Chinchilla показали, что такие завышенные промежуточные оценки исказили зависимость loss от данных и сдвинули вывод в пользу больших моделей. Вторая — масштаб: модели были маленькими, а параметры эмбеддингов не учитывались, что на малых размерах заметно искажает наклон (это показали более поздние разборы, например Pearce и Song, 2024). Вывод для практики: закон масштабирования верен ровно настолько, насколько аккуратны эксперименты под ним.
Формула, которую можно потрогать
Заголовок раздела «Формула, которую можно потрогать»Подход 3 дал параметрическую формулу:
Три слагаемых: неустранимый loss языка, штраф за маленькую модель и штраф за мало данных. Посчитаем IsoFLOP-срез при бюджете Chinchilla ():
| Токенов на параметр | |||
|---|---|---|---|
| 10B | 9.8T | 980 | 1.946 |
| 30B | 3.3T | 109 | 1.930 |
| 70B | 1.4T | 20 | 1.937 |
| 280B (Gopher) | 350B | 1.2 | 1.983 |
Две важные детали. У подгонки 3 оптимум сдвинут к меньшим моделям (30–40B), чем у подходов 1 и 2 (около 70B); в 2024 году исследователи Epoch AI (Besiroglu et al.) попытались воспроизвести эту подгонку по данным из графиков статьи и пришли к коэффициентам, которые лучше согласуются с «20 токенами». Но главное — дно очень плоское: 30B и 70B различаются на 0.3%. Это наблюдение и открыло дорогу следующему разделу.
Почему сейчас модели «перекармливают»
Заголовок раздела «Почему сейчас модели «перекармливают»»Посмотрите, на скольких токенах учат современные открытые модели:
| Модель | Параметры | Токены | Токенов на параметр |
|---|---|---|---|
| Chinchilla (2022) | 70B | 1.4T | 20 |
| Llama 2 7B (2023) | 7B | 2T | ≈290 |
| Llama 3 8B (2024) | 8B | 15T | ≈1900 |
| Qwen3 (2025), вся линейка | 0.6B–235B | ≈36T | у 0.6B — десятки тысяч |
Это сознательное перекармливание даннымиперекармливание данными, обучение сверх оптимумаEN overtrainingНе путать с переобучением (overfitting). Модель обучают на гораздо большем числе токенов, чем советует Chinchilla, чтобы она была меньше и дешевле на инференсе. (overtraining). Причин несколько.
1. Chinchilla оптимизирует только цену обучения. А модель потом годами работает на инференсеинференс, вывод моделиEN inferenceСм. «reasoning»: в китайском одно и то же слово., где каждый токен стоит около FLOPs. Пусть за жизнь модель сгенерирует 10 трлн токенов. Для 70B это FLOPs — больше, чем стоило её обучение (). Для 8B — , в 8.75 раза меньше.
2. Оптимум плоский. По формуле Chinchilla модель 8B на 15T токенах получает против у Chinchilla 70B — хуже всего на 0.6%. Чтобы догнать её точно, 8B-модели нужно около 26T токенов: обучение обойдётся примерно в 2.1 раза дороже, зато каждый сгенерированный токен будет в 8.75 раза дешевле. Для популярной модели это выгодная сделка.
3. Обучение не насыщается. Meta писала, что её 8B и 70B продолжали улучшаться лог-линейно вплоть до 15T токенов, хотя «по Chinchilla» для 8B, по её же оценке, хватило бы около 200B (наше правило B даёт 160B — тот же порядок).
4. Железо. Модель на 0.6–8B помещается на одну видеокарту, ноутбук или телефон. Задержка ответа ниже, сервис проще.
Ограничение у этого подхода одно — данные. Качественного человеческого текста конечное количество, и разговоры о «стене данных»стена данныхEN data wallПредел роста за счёт новых человеческих текстов — качественных данных в интернете конечное количество. идут с 2022 года. Повторять данные можно: в экспериментах Muennighoff et al. (2023) до 4 эпох по одному и тому же тексту давали почти такой же результат, как свежие данные, а дальше польза быстро падала. Как выжимать из интернета больше качественных токенов и где брать синтетические, разберём в следующем уроке.
Эмерджентность и споры о ней
Заголовок раздела «Эмерджентность и споры о ней»В 2022 году Wei et al. описали эмерджентные способностиэмерджентные способностиEN emergent abilities (китайский термин буквально значит «хлынувшие наружу способности»): способность почти отсутствует у малых моделей и резко появляется у больших. На графиках качество на арифметике, перестановке букв или многозадачных тестах держится на уровне случайного угадывания, а где-то между и FLOPs подскакивает. Это звучало как «количество переходит в качество» и подогревало ожидания: никто не знает, что появится на следующем масштабе.
В 2023 году Schaeffer, Miranda и Koyejo предложили простое объяснение: скачок создаёт метрика. Точное совпадениеточное совпадение (EM)EN exact matchМетрика «1, если нормализованный ответ совпал с эталоном, иначе 0». Всё решает нормализация и извлечение ответа. (exact match) — это всё или ничего. Пусть модель угадывает каждый токен ответа с вероятностью , и растёт с масштабом плавно. Тогда ответ из 10 токенов верен с вероятностью :
| Точность на токен | 0.5 | 0.7 | 0.8 | 0.9 | 0.95 | 0.99 |
|---|---|---|---|---|---|---|
| Точность ответа | 0.001 | 0.028 | 0.107 | 0.349 | 0.599 | 0.904 |
Пока растёт от 0.5 до 0.8, метрика почти не двигается. Затем за пару шагов масштаба взлетает. Если посчитать непрерывную метрику — вероятность правильного ответа, редакционное расстояние (сколько символов нужно исправить, чтобы получить правильный ответ) — рост оказывается плавным.
Спор на этом не закончился. Команда Zhipu AI и Университета Цинхуа (Du et al., 2024) посмотрела на эмерджентность «со стороны loss» (статья «Understanding Emergent Abilities of Language Models from the Loss Perspective»): качество на задачах лучше предсказывается loss предобучения, чем размером модели, а некоторые способности появляются, только когда loss опускается ниже порога, независимо от того, какой ценой этот loss получен.
Практические выводы:
- loss предсказуем, конкретные способности — гораздо хуже;
- в своих маленьких экспериментах смотрите на непрерывные метрики (лог-вероятность правильного ответа), а не только на точность;
- к заявлениям «на масштабе X внезапно появилось Y» относитесь с вопросом «а какой метрикой меряли?».
Практика
Заголовок раздела «Практика»Соберите калькулятор, которым будете пользоваться весь курс: FLOPs, оптимум Chinchilla, GPU-часы, дни, деньги и предсказанный loss. Тесты сверяют ответы с цифрами этого урока.
import math
# Параметрическая подгонка Chinchilla (Hoffmann et al., 2022, подход 3):
# L(N, D) = E + A / N^alpha + B / D^beta
E, A, B, ALPHA, BETA = 1.69, 406.4, 410.7, 0.34, 0.28
def train_flops(n_params, n_tokens):
"""FLOPs на обучение модели с n_params параметрами на n_tokens токенах (правило 6·N·D)."""
# TODO
...
def chinchilla_optimal(compute, tokens_per_param=20):
"""Вернуть (N, D): размер модели и число токенов при бюджете compute FLOPs,
если на каждый параметр приходится tokens_per_param токенов."""
# TODO
...
def gpu_hours(flops, peak_tflops, mfu):
"""Сколько GPU-часов займёт обучение.
peak_tflops — пиковая производительность одной карты в TFLOPS (1 TFLOPS = 1e12 FLOP/с),
mfu — доля пика, которую реально удаётся использовать (0..1)."""
# TODO
...
def train_days(flops, n_gpus, peak_tflops, mfu):
"""Сколько суток займёт обучение на n_gpus картах."""
# TODO
...
def train_cost(flops, peak_tflops, mfu, price_per_gpu_hour):
"""Стоимость обучения при аренде (цена одного GPU-часа в долларах)."""
# TODO
...
def chinchilla_loss(n_params, n_tokens):
"""Предсказанный loss по формуле L(N, D) = E + A / N^ALPHA + B / D^BETA."""
# TODO
...
def best_model_size(compute, candidates):
"""Из списка размеров candidates выбрать тот, что даёт минимальный chinchilla_loss
при фиксированном бюджете compute (данные: D = compute / (6·N))."""
# TODO
...
# Проверьте себя кнопкой «Запустить»:
c = train_flops(70e9, 1.4e12)
print(c)
print(chinchilla_optimal(c) if c else "сначала реализуйте train_flops")
Когда тесты пройдут, посчитайте свой проект из модуля 5.6. Модель на 25M параметров по Chinchilla хочет M токенов, это FLOPs. Если видеокарта реально выдаёт 20 TFLOPS — около часа. Процессор, который выдаёт условные 0.2 TFLOPS, будет считать то же больше четырёх суток. Поэтому на CPU разумно брать модель меньше и токенов меньше.
Проверь себя
Заголовок раздела «Проверь себя»- Loss падает по степенному закону от параметров, данных и вычислений: предсказуемо, но каждый процент дороже предыдущего.
- Обучение стоит FLOPs; время и деньги получаются делением на пик GPU и MFU (обычно 35–50%).
- Chinchilla: при фиксированном бюджете модель и данные растут как , около 20 токенов на параметр. Kaplan переоценил выгоду от размера.
- Сегодня модели перекармливают данными (сотни и тысячи токенов на параметр): оптимум плоский, а инференс маленькой модели дешевле.
- «Эмерджентные» скачки часто создаёт разрывная метрика; loss предсказуем лучше, чем отдельные способности.
Дальше: откуда берутся триллионы токенов — Common Crawl, фильтрация, дедупликация и смеси данных: Данные для претрейна.