CS336, задание 3 (scaling): законы масштабирования — путеводитель и перевод условия
Третье задание Stanford CS336 (весна 2026) почти целиком в переводе: метод IsoFLOP на синтетических данных, API обучения на B200 с бюджетом 12 часов и прогноз оптимальной модели на 48 часов B200. Плюс замена для тех, у кого нет доступа к API Стэнфорда: свой мини-эксперимент с законами масштабирования на 4 × RTX 4080.
Что это и когда делать
Заголовок раздела «Что это и когда делать»Задание 3 — самое короткое по коду и самое «исследовательское»: вы не пишете модель, а планируете эксперименты и подгоняете закон масштабирования, чтобы предсказать, какая модель будет лучшей при заданном бюджете вычислений.
- Когда: после урока 5.1.1 «Законы масштабирования» и лекций 9 и 11 (особенно разделы о методах Chinchilla, IsoFLOP и μP).
- Важное ограничение: вторая, главная часть задания (50 из 55 баллов) использует API обучения на серверах Стэнфорда, доступный только из сети Стэнфорда по студенческому номеру. Без него можно сделать первую часть полностью и вторую — в виде собственного эксперимента (см. раздел ниже).
| Раздел | Что делаете | Баллы | Урок курса |
|---|---|---|---|
| 2. Обзор законов масштабирования | Метод IsoFLOP на готовых синтетических данных | 5 | 5.1.1 |
| 3. Построение закона масштабирования | Эксперименты через API (бюджет 12 часов B200), прогноз на 48 часов B200, отчёт | 50 | лекция 11, 5.4.4 |
Перевод условия
Заголовок раздела «Перевод условия»1. Обзор задания
Заголовок раздела «1. Обзор задания»В этом задании вы получите практический опыт работы с законами масштабирования языковых моделей.
Постановка. Вы отвечаете за обучение языковой модели нового поколения в компании ClosedAI. Её обучение будет стоить ВВП небольшой страны и растопит шельфовый ледник в Антарктиде, так что ошибиться нельзя. Конкретно: вам дан фиксированный бюджет вычислений (в реальном времени работы). Цель — получить модель с наименьшими потерями на обучении (то есть вычислительно-оптимальную). Для этого нужно понять, как лучше распределить бюджет между (1) обучением модели побольше и (2) обучением на большем числе токенов.
Законы масштабирования, эмпирически связывающие потери модели с её размером и затраченными вычислениями, часто используют для прогноза этого баланса [Kaplan et al., 2020; Hoffmann et al., 2022]. В этом задании вы построите законы масштабирования, чтобы оценить вычислительно-оптимальный размер модели и её гиперпараметры для обучения на 48 часах B200. Вместо того чтобы обучать модели самим, вы будете обращаться к API обучения, передавая (1) гиперпараметры модели (число слоёв, размер эмбеддинга, число голов, размер батча, learning rate, число токенов обучения…) и (2) максимальное время эксперимента; API вернёт потери на валидации для этих гиперпараметров. Бюджет на подгонку законов — ещё 12 часов B200 (25% бюджета FLOPs большого запуска). API принимает широкий диапазон гиперпараметров, и часть вашей работы — решить, какие области пространства поиска исследовать, чтобы эффективно потратить бюджет.
Код. Условие доступно на GitHub: github.com/stanford-cs336/assignment3-scaling.
Как сдают. В Gradescope: writeup.pdf — полное описание методики подгонки закона масштабирования и его использования
для прогноза оптимального размера модели при данном бюджете FLOPs; описание должно позволять воспроизвести результаты;
code.zip — весь код подгонки и расчёта оценок. Кроме того, предсказанные оптимальные гиперпараметры и предсказанные
итоговые потери на валидации отправляются в API. Часть оценки зависит от качества вашей предсказанной оптимальной модели.
ИИ-инструменты — те же правила, что во всех заданиях: можно для понятийных вопросов и как справочник по API; нельзя
для реализации любой части задания (ни агенты, ни ИИ-автодополнение); агент должен использовать AGENTS.md, а промпт —
прикладываться при работе с чат-ботами.
2. Обзор законов масштабирования
Заголовок раздела «2. Обзор законов масштабирования»Разберём один из подходов к подгонке законов масштабирования из статьи Chinchilla [Hoffmann et al., 2022]. Центральный вопрос: при бюджете вычислений на обучение большой языковой модели какой выбор гиперпараметров (размера модели, числа токенов обучения и т. д.) даст наименьшие потери? Главная трудность — экстраполировать с экспериментов малого масштаба на большой. Во второй части задания можно использовать идеи и из других работ, например Kaplan et al. и Yang et al. (μP).
2.1. Законы масштабирования по профилям IsoFLOP
Заголовок раздела «2.1. Законы масштабирования по профилям IsoFLOP»Бюджет вычислений на обучение трансформера с параметрами на датасете из токенов — примерно . Подход IsoFLOP из статьи Hoffmann et al. таков: для каждого бюджета обучить модели разных размеров на токенах и получить итоговые потери .
Получается набор запусков с одинаковыми FLOPs , но разными размерами . Hoffmann et al. эмпирически наблюдают квадратичную зависимость итоговых потерь от размера модели при фиксированном бюджете . Интуиция: когда очень мало, модель не может описать данные, сколько бы мы ни считали, и потери высоки. С ростом модели потери плавно падают — до точки, где модель становится слишком большой и в бюджет не помещается достаточно шагов градиента (в пределе при даже один шаг превысит бюджет, и обучение остановится при очень высоких потерях). Метод состоит в том, чтобы найти оптимальные размеры модели и датасета для каждого , а затем подогнать степенной закон, предсказывающий и для целевого — обычно большего, чем в прежних запусках.
Для подгонки берутся точки: для каждого бюджета — размер , минимизирующий потери среди запусков этого бюджета (его «профиль IsoFLOP»). Получаем пары (и аналогично для ), по ним подгоняем и и экстраполируем на целевой бюджет.
Problem (chinchilla_isoflops): законы масштабирования IsoFLOP (5 баллов)
Заголовок раздела «Problem (chinchilla_isoflops): законы масштабирования IsoFLOP (5 баллов)»Напишите скрипт, воспроизводящий метод IsoFLOP по итоговым потерям набора запусков. Используйте (синтетические) данные
из файла data/isoflops_curves.json — массив JSON, где каждый элемент описывает запуск. Первые два запуска для примера
формата:
[ { "parameters": 49999999, "compute_budget": 6e+18, "final_loss": 7.192784500319437 }, { "parameters": 78730505, "compute_budget": 6e+18, "final_loss": 6.750171320661809 }, ...]Для подгонки может пригодиться пакет scipy (в частности, scipy.optimize.curve_fit), но можно использовать любой
метод. Hoffmann et al. подгоняют к каждому профилю IsoFLOP квадратичную функцию, чтобы найти минимум; мы же советуем
просто взять запуск с наименьшими потерями для каждого бюджета как минимум.
(a) Покажите экстраполированный вычислительно-оптимальный размер модели вместе с полученными точками . Каков прогноз оптимального размера модели при бюджете FLOPs? А при ? Сдать: график закона масштабирования размера модели от бюджета с точками, по которым он подогнан, и экстраполяцией как минимум до FLOPs; затем одно предложение с прогнозом.
(b) Покажите экстраполированный вычислительно-оптимальный размер датасета вместе с точками . Каков прогноз оптимального размера датасета для бюджетов и FLOPs? Сдать: аналогичный график для размера датасета и одно предложение с прогнозом.
3. Построение законов масштабирования
Заголовок раздела «3. Построение законов масштабирования»В этом разделе вы используете запуски через API обучения (раздел 3.2) в рамках фиксированного бюджета, чтобы подогнать закон масштабирования. Главная цель — выбрать размер модели и гиперпараметры, дающие наименьшие потери на валидации за 48 часов B200; кроме того, нужно предсказать эти потери. Чтобы задать гиперпараметры для предсказанного оптимального размера, советуем изучить, как гиперпараметры влияют на потери в малых масштабах. Тщательно планируйте запуски: как только бюджет в 12 часов B200 исчерпан, API перестаёт принимать запросы.
3.1. Как устроены запуски обучения
Заголовок раздела «3.1. Как устроены запуски обучения»- API запускает настоящие задания обучения на GPU B200. Эксперимент встаёт в общую очередь; стоящие в очереди и
выполняющиеся эксперименты резервируют весь свой
max_runtime_secondsиз вашего бюджета в 12 часов. Когда эксперимент завершается или падает, бюджет пересчитывается по фактическому времени (не меньше 1 секунды и не большеmax_runtime_seconds): если вы зарезервировали 30 минут, а запуск закончился за 12, неиспользованные 18 минут возвращаются. Запуск, превысивший лимит, списывается целиком. - Каждое задание выполняется
n_evalsкусками: на каждом куске обучаетсяtotal_train_tokens / n_evalsтокенов, после чего считаются потери на валидации; последовательность потерь возвращается вstatus.val_losses. Для завершённого эксперимента итоговые потери — последний элемент списка. Для упавших по таймауту API может вернуть частичные потери, но это не завершённые запуски. - Порядок данных фиксирован: обучающие данные — токенизированный DCLM объёмом до 500 млрд токенов, без повторения эпох;
каждая конфигурация потребляет одну и ту же детерминированную последовательность токенов. Валидация —
токенов (итоговая проверка в лидерборде использует больше). Поле
model_seedуправляет только инициализацией модели, а не порядком данных. - Архитектура в основном совпадает с заданием 1, с небольшими отличиями; код модели есть в репозитории только для справки — обучать модели нужно только через API.
- Модели обучаются на токенизированном DCLM со словарём 32K и контекстом 512. API поддерживает AdamW и SGD, оба — с расписанием «прогрев + косинус». Пример ниже использует AdamW с weight decay 0,01, обрезкой градиента 1,0, долей прогрева 0,05 и итоговым learning rate 0,1 от пикового. Потери — средняя cross-entropy следующего токена по последовательностям из 512 токенов. Dropout нет.
3.2. API обучения (кратко)
Заголовок раздела «3.2. API обучения (кратко)»Ключ API — восьмизначный студенческий номер Стэнфорда; запросы возможны только из сети Стэнфорда (может понадобиться VPN).
Все запросы передают ключ в заголовке X-API-Key. Эндпоинты:
POST /submit— поставить в очередь запуск и получитьexperiment_id. Тело:architecture_config(поляattention_bias,head_dim,hidden_size,intermediate_size,num_attention_heads,num_hidden_layers,num_key_value_heads,rms_norm_eps,rope_theta,tie_word_embeddings,dtype—"float32"или"bfloat16",vocab_size),optimizer_config(расписание learning rate, weight decay, , , , обрезка градиента),train_batch_size,val_batch_size,n_evals,total_train_tokens,max_runtime_seconds(от 1 секунды до 12 часов),model_seed. Проверки:hidden_size = num_attention_heads * head_dim,num_attention_headsделится наnum_key_value_heads,total_train_tokensделится на512 * train_batch_size. Повторная отправка той же конфигурации — ответ 409 без резервирования; еслиmax_runtime_secondsбольше остатка бюджета — ответ 400.GET /budget— использованные, оставшиеся и всего секунды бюджета.GET /experimentsиGET /experiment/{id}— список и состояние экспериментов:queued,running(с текущимиval_losses; сюда входят запуск и вытеснения, поэтому «running» может длиться дольше лимита),completed(сused_runtime_seconds,val_losses,completed_at),failed(упал или превысил время; при таймауте —partial_val_losses).POST /final_submission— отправить предсказанную оптимальную конфигурацию (training_config) и предсказанные итоговые потери (predicted_final_loss); можно отправлять повторно, засчитывается последняя.GET /final_submission— текущая отправка.
Пример конфигурации из условия: head_dim 64, hidden_size 448, intermediate_size 1280, 7 голов, 9 слоёв, 7 KV-голов,
rope_theta 1 000 000, BF16, словарь 32 000; AdamW с пиковым learning rate 3e-4, final_lr_frac 0,1, warmup_frac 0,05,
weight decay 1e-2, ; батч 128, валидационный батч 32, n_evals 16, total_train_tokens 1 048 576,
max_runtime_seconds 30.
3.3. Лидерборд
Заголовок раздела «3.3. Лидерборд»Теперь с помощью API выберите конфигурацию для запуска на 48 часов B200. Цель — минимизировать потери на валидации этой итоговой модели.
Problem (scaling_laws): лидерборд законов масштабирования (50 баллов)
Заголовок раздела «Problem (scaling_laws): лидерборд законов масштабирования (50 баллов)»Постройте закон масштабирования и с его помощью выберите размер модели и гиперпараметры, которые, по-вашему, дадут наименьшие потери на валидации за 48 часов B200. Предскажите также потери этой модели. Для построения закона используйте API, получая итоговые потери на валидации для разных конфигураций (раздел 3.2); на подгонку можно потратить не больше 12 часов B200 — это жёсткий предел, его соблюдает сам API.
Сдать: набранный отчёт с полным описанием подхода и методики подгонки закона масштабирования. В нём должно быть описано, как закон используется для прогноза оптимального размера модели при данном бюджете FLOPs, и ваши предсказанные значения. Отчёт должен объяснять, почему вы приняли те или иные решения, и быть достаточно подробным, чтобы ваш подход и результаты можно было воспроизвести.
Ограничений на гиперпараметры запуска в 48 часов B200 почти нет. Все запуски — на одной B200.
Для начала советуем подумать как минимум над вопросами ниже; в отчёте прокомментируйте, как принималось решение по каждому:
- При фиксированном бюджете на законы масштабирования в 12 часов B200 — как вы решали, какие запуски делать?
- Как вы подгоняли закон масштабирования? Опишите конкретный метод (или методы). Вероятно, полезно познакомиться с подходами Kaplan et al. и Hoffmann et al.
- Насколько хорошо закон описывает экспериментальные данные?
- Какой оптимальный размер модели предсказывает ваш закон для бюджета 48 часов B200? Какие предсказанные потери?
- Если бы вы обучали модель с предсказанным оптимальным числом параметров, какие гиперпараметры вы бы взяли? Для оценки числа параметров без эмбеддингов используйте .
Кроме отчёта, отправьте в API (1) предсказанные оптимальные гиперпараметры и (2) предсказанные потери модели на валидации. Часть оценки зависит от качества вашей предсказанной оптимальной модели.
Если у вас нет доступа к API: свой эксперимент на 4 × RTX 4080
Заголовок раздела «Если у вас нет доступа к API: свой эксперимент на 4 × RTX 4080»Бюджет задания удобно переложить на вашу машину. У RTX 4080 пик около 97,5 TFLOPS в BF16 (урок 5.7.1), реально получается порядка 30–40 TFLOPS на маленьких моделях. Значит, один час работы четырёх карт ≈ FLOPs.
-
Задача 2 — без изменений. Сделайте
chinchilla_isoflopsна файлеdata/isoflops_curves.json: это всё, что нужно для первых 5 баллов. -
Модель и данные. Возьмите свою модель из задания 1 (или модель MiniMind из урока 5.6.2) и данные OpenWebText из задания 1 (или русский FineWeb-2 из урока 5.1.2). Контекст 512, словарь вашего токенизатора.
-
Целевой бюджет «большого запуска» — например, 8 часов на 4 картах ( FLOPs), а бюджет на законы — 25% от него, 2 часа ( FLOPs), как в условии.
-
Сетка IsoFLOP. 3–4 бюджета (например, , , FLOPs) × 4–6 размеров модели. Запускайте четыре эксперимента параллельно — по одному на карту (
CUDA_VISIBLE_DEVICES), DDP для таких моделей не нужен. Для каждого запуска расписание (прогрев + косинус) должно заканчиваться ровно на последнем шаге — это главный урок лекции 9 о расхождении Kaplan и Chinchilla. -
Гиперпараметры. Сначала на самом маленьком бюджете переберите learning rate и батч; если хотите масштабировать learning rate по ширине, попробуйте правило μP из лекции 11.
-
Прогноз и проверка. Подгоните , выберите модель для целевого бюджета, предскажите потери — и реально обучите её за 8 часов. Сравнение прогноза с фактом — самая ценная часть вашего отчёта.
Подсказки (без решений)
Заголовок раздела «Подсказки (без решений)»- Не тратьте бюджет на большие модели раньше времени. Сначала маленькие запуски для отладки скрипта и подбора learning rate; самые дорогие запуски — в конце, когда ясно, где минимум.
- Логарифмы. Степенной закон — это прямая в осях ; подгоняйте линейную регрессию в
логарифмах, а не
curve_fitпо исходным числам. - Минимум профиля. Если на каком-то бюджете лучшая модель — крайняя в сетке (самая маленькая или самая большая), минимум не найден: добавьте точку с другой стороны.
- Предсказание потерь. Кроме подгоните и — потери лучших моделей тоже ложатся на степенной закон (с неустранимым слагаемым).
- Эмбеддинги. Как напоминает условие, параметры без эмбеддингов оцениваются как ; у маленьких моделей эмбеддинги могут быть сравнимы с остальной моделью — решите и обоснуйте, что вы считаете за .
Что дальше
Заголовок раздела «Что дальше»- Задание 4 — данные: фильтрация и дедупликация Common Crawl.
- Теория: лекции 9 и 11.
- Обзор курса CS336.