How GPT, Claude, and Gemini are actually trained and served – Reiner Pope

Райнер Поуп (CEO стартапа MatX, ранее разрабатывавший архитектуру TPU в Google) и Дваркеш Патель разбирают на доске фундаментальную экономику и математику инференса и обучения LLM.
Главная мысль выпуска: понимание того, как модели работают на уровне физического железа (пропускная способность памяти, FLOPs, батчинг, топология кластеров), объясняет всё — от архитектуры современных нейросетей до ценообразования по API и причин замедления или ускорения прогресса в ИИ. Все рассуждения строятся на строгих физических лимитах чипов и пропускной способности сетей.
Базовая математика инференса: Roofline-модель
Анализ производительности через Roofline-модель 02:10: Время генерации одного токена ограничено либо скоростью вычислений (compute), либо скоростью работы с памятью (memory bandwidth). Итоговое время выполнения шага инференса — это всегда максимум из этих двух значений: t = max(t_compute, t_mem). Для анализа берется кластер уровня стойки NVIDIA Blackwell NVL72 (72 GPU).
Формула времени вычислений (t_compute) 03:19: Вычисления состоят из умножения матриц весов на контекст. Время вычисляется как t_compute = B · N_active / FLOPS, где B — размер батча (количество параллельно обслуживаемых пользователей), N_active — количество активных параметров модели при генерации одного токена (например, у DeepSeek V3 это 37 млрд из 700 млрд общих), а FLOPS — вычислительная мощность чипа. Временем вычисления самого механизма внимания (attention) на этом этапе можно пренебречь, так как оно мало по сравнению с умножением матриц.
Формула времени работы с памятью (t_mem) 05:00: Память тратится на две задачи: загрузку весов модели и загрузку KV-кэша. Формула выглядит как t_mem = (N_total + B · L_context · Bytes_per_token) / Mem_BW. Здесь N_total — общий размер всех параметров модели (их нужно прочитать целиком), L_context — длина контекста, Bytes_per_token — вес одного токена в байтах, а Mem_BW — пропускная способность памяти (байт/сек). Загрузка KV-кэша линейно зависит от размера батча, так как для каждого пользователя нужно подтягивать его уникальную историю контекста.
Зависимость задержки (latency) от размера батча 08:19: Если построить график задержки от размера батча, видно жесткое нижнее ограничение. Даже при батче равном 1 (один пользователь), задержка не может быть меньше времени, необходимого для считывания всех весов модели (N_total) из памяти чипа. По мере роста батча время вычислений и время загрузки KV-кэша растут линейно, и в какой-то момент график задержки начинает идти вверх.
Зависимость стоимости от размера батча 13:08: Стоимость инференса на один токен — это время аренды GPU (t), деленное на количество токенов в батче (B). При батче равном 1 стоимость стремится к бесконечности, так как огромные затраты на загрузку весов (N_total) не амортизируются. По мере роста батча стоимость загрузки весов на одного пользователя падает по параболе, пока график не упирается в константу — базовую стоимость самих вычислений (t_compute / B) и загрузки уникального KV-кэша. Именно поэтому провайдеры не могут сделать сверхдешевый «медленный режим» (Slow Mode) — стоимость упирается в физический лимит вычислений и памяти на конкретного пользователя.
Оптимальный размер батча и влияние разреженности (Sparsity)
Точка баланса между памятью и вычислениями 16:00: Оптимальный размер батча достигается там, где время вычислений равно времени загрузки памяти (t_compute = t_mem). Если отбросить KV-кэш для упрощения, уравнение сводится к аппаратно-программной пропорции: B = (FLOPS / Mem_BW) · (N_total / N_active).
Аппаратная константа и реальный размер батча 18:51: Отношение FLOPS к пропускной способности памяти (Mem_BW) — это аппаратная константа, которая остается удивительно стабильной от поколения к поколению (A100, H100, B100) и составляет около 300. Отношение N_total к N_active — это параметр разреженности (sparsity) модели. Для DeepSeek, где активируются 32 эксперта из 256, этот множитель равен 8. Итоговый оптимальный батч: B ≈ 300 × 8 = 2400 уникальных последовательностей. На практике берут чуть больше (х2-х3), чтобы компенсировать неидеальную утилизацию железа.
[20:57-21:58] рекламная интеграция Jane Street.
Механика запуска батчей («расписание поездов») 21:58: Инференс работает как поезд, отправляющийся по строгому расписанию. Время эвакуации и заполнения всей HBM-памяти (Capacity / Bandwidth) на современных чипах составляет около 15-20 миллисекунд (например, 288 ГБ / 20 ТБ/с на поколении Rubin). Каждые 20 мс запускается новый цикл (forward pass). Если запрос пользователя пришел сразу после старта, он ждет 20 мс до следующего «поезда» и еще 20 мс едет. Худшая задержка в очереди — 40 мс.
Глобальный трафик и конкуренция 26:13: Батч в 2000 пользователей при цикле в 20 мс (около 64 итераций в секунду) означает пропускную способность системы около 128 000 токенов в секунду. Для сравнения, глобальный трафик Gemini оценивается в сотни миллионов токенов в секунду. Чтобы экономика инференса сходилась и была конкурентной, провайдер должен обслуживать хотя бы 1/1000 от трафика Gemini.
Экономика Mixture of Experts (MoE) 27:50: Увеличение разреженности (sparsity) позволяет радикально снизить объем вычислений (t_compute). Однако, чтобы сохранить качество модели, приходится экспоненциально увеличивать общее число параметров (N_total). Например, модель с 64 экспертами (370 млн активных параметров) дает качество плотной модели на 1.3 млрд параметров, но требует огромного объема памяти. Экономически это выгодно только в том случае, если у провайдера есть гигантский поток пользователей (огромный батч), чтобы амортизировать загрузку этих раздутых весов.
Топология кластеров и виды параллелизма
Распределение MoE-слоя по GPU (Expert parallelism) 32:08: В слое MoE токен проходит через роутер и отправляется к нужным экспертам. Лучший способ разложить это на железе — Expert parallelism, когда разные эксперты лежат на разных GPU. Для модели с 256 экспертами на стойке из 64 GPU на каждый чип ложится по 4 эксперта. Это порождает паттерн трафика all-to-all: любой GPU должен иметь возможность мгновенно отправить данные любому другому GPU.
Ограничения физического размера стойки (rack) 36:52: Внутри стойки (scale-up network, например NVLink) все GPU соединены коммутаторами напрямую (в два хопа) с колоссальной пропускной способностью. Выход за пределы стойки (scale-out network) работает примерно в 8 раз медленнее. Сделать стойку на 1000 GPU невозможно из-за физических ограничений: плотности кабелей, радиуса их изгиба, веса металла, энергообеспечения и охлаждения. Увеличение числа GPU в стойке требует квадратичного роста числа кабелей.
[44:24-44:58] рекламная интеграция Gemma 4 / Cursor.
Pipeline-параллелизм между стойками 44:58: Если модель не влезает в одну стойку, используется Pipeline parallelism — разрезание модели по слоям. Первая стойка считает первые слои, затем передает данные во вторую стойку по медленной сети (scale-out). Это не становится узким местом, потому что между стойками передается только размер батча (B), тогда как внутри стойки при all-to-all коммуникации передается батч, умноженный на число активированных экспертов и число слоев (B × N_experts × N_layers).
Проблема «пузырей» (pipeline bubbles) при обучении 54:33: При пайплайнинге во время обучения возникает проблема простоя. Чтобы сделать обратное распространение ошибки (backward pass), нужно дождаться прохождения всего батча через все стойки. Это создает огромные «пузыри» (idle time), когда часть стоек ничего не делает. Для решения используются микро-батчи и сложные схемы вроде 1F1B (one-forward-one-backward), переплетающие прямые и обратные проходы.
Бесполезность пайплайнинга для ускорения инференса 1:00:58: В инференсе пайплайнинг не улучшает ни задержку, ни пропускную способность. Он не экономит время вычислений или памяти, а просто переносит часть работы на другую стойку. Единственный его плюс — снижение требований к объему памяти (capacity) на одной стойке, так как веса размазываются по нескольким.
Проблема памяти и масштабирование моделей
[1:02:36-1:03:36] рекламная интеграция Cursor.
Потребление емкости памяти (Memory Capacity) 1:03:36: Требования к памяти состоят из весов (N_total) и KV-кэша (B · L_context · Bytes_per_token). Пайплайнинг (P) делит веса на количество стоек, но не спасает от KV-кэша. Чтобы стойки не простаивали, при пайплайнинге приходится увеличивать количество микро-батчей (глобальный батч растет пропорционально числу стадий P). В итоге множитель P сокращается, и объем памяти под KV-кэш на каждом GPU остается неизменным. Поэтому для инференса пайплайнинг почти не используют — выгоднее держать всю модель в пределах одной стойки (scale-up domain).
Истинная причина скачка в размерах моделей 1:13:30: Долгое время размеры моделей стагнировали, пока не появились стойки с огромным scale-up доменом (переход от Hopper с 8 GPU к Blackwell с 72 GPU). Главная польза большой стойки — не суммарный объем памяти (памяти хватало и раньше за счет пайплайнинга), а суммарная пропускная способность памяти (Memory Bandwidth). 72 GPU, читающие веса параллельно, радикально снижают t_mem, позволяя обслуживать большие батчи и длинные контексты с приемлемой задержкой.
Сетевые задержки при межузловом взаимодействии 1:15:06: Прыжок между стойками добавляет физическую задержку (около нескольких миллисекунд на хоп). При генерации токена эти задержки суммируются. 4 стадии пайплайна добавят ~10 мс на каждый токен, что критично замедляет авторегрессионный вывод.
Экономика обучения: Chinchilla, RL и переобучение
Балансировка стоимости претрейна, RL и инференса 1:18:53: Оптимизация общих затрат на ИИ-модель сводится к уравниванию стоимости разных этапов. Эвристическое правило гласит: общая стоимость минимизируется там, где затраты на претрейн, RL-генерацию и инференс примерно равны (по 33% бюджета на каждый этап).
Вычислительная стоимость разных этапов 1:22:13: Стоимость претрейна на один параметр — 6 FLOPS (прямой + обратный проход). Стоимость инференса — 2 FLOPS (только прямой). Стоимость RL (где генерируются траектории, но градиентный шаг делается не всегда) колеблется от 2 до 6 FLOPS. С учетом неэффективности утилизации железа при генерации в RL, для равенства затрат объем токенов в претрейне должен быть примерно равен объему токенов в RL и объему токенов, которые модель сгенерирует за весь свой жизненный цикл на проде.
Оценка объема данных для претрейна через трафик инференса 1:28:08: Если модель уровня GPT-5 будет генерировать 50 млн токенов в секунду и проработает до устаревания 2 месяца, она выдаст около 200 триллионов токенов. Значит, в ее претрейн тоже должно быть вложено около 200 триллионов токенов. По законам масштабирования Chinchilla, для модели на 100 млрд активных параметров оптимальный объем данных — 2 трлн токенов. Вывод: современные frontier-модели переобучаются (over-trained) примерно в 100 раз сверх оптимума Chinchilla, чтобы сделать инференс экономически выгодным.
Реверс-инжиниринг цен на API (Gemini, Claude, GPT)
Скачок цены при длинном контексте (на примере Gemini > 200k) 1:33:03: В API Gemini цена вырастает на 50% при превышении контекста в 200 000 токенов. Это точка перегиба на графике Roofline-модели. До 200k стоимость ограничена вычислениями (t_compute), которые не зависят от длины контекста. После 200k доминирующим фактором становится время загрузки KV-кэша из памяти (t_mem), которое растет линейно вместе с контекстом.
Оценка размера KV-кэша на токен 1:38:20: Зная точку перегиба (200k токенов), можно вычислить размер KV-кэша. Приравняв t_compute и t_mem для KV-кэша, получаем, что один токен весит около 1.6 КБ. Это достигается за счет плотного внимания с переиспользованием контекста (MQA/GQA), где на слой приходится, например, 8 KV-голов с размерностью 128, либо за счет алгоритмов разреженного внимания (sparse attention).
Разница в цене между Prefill (ввод) и Decode (вывод) 1:41:42: В API обработка входящих токенов (prefill) стоит в 3-5 раз дешевле, чем генерация (decode). При prefill модель обрабатывает весь промпт параллельно за один проход. Загрузка весов из памяти происходит один раз и амортизируется на тысячи токенов промпта. Процесс упирается исключительно в дешевые вычисления (compute-bound). При decode модель вынуждена заново грузить все веса ради генерации каждого единственного токена, что делает процесс жестко ограниченным пропускной способностью памяти (memory-bandwidth bound).
Ценообразование кэширования контекста (Cache hits) 1:48:29: Провайдеры предлагают скидки (до 10x) за попадание в кэш контекста. Удержание KV-кэша в памяти стоит денег, так как занимает емкость (Capacity), не давая обслуживать других пользователей. Альтернатива — удалить кэш и пересчитать его заново (Rematerialization), потратив GPU-время (вычисления).
Определение типа памяти по времени хранения 1:59:32: В API есть тарифы на хранение кэша на 5 минут и на 1 час. Оптимальное время хранения в конкретном типе памяти равно времени полного чтения/записи этого объема памяти (drain time). Для HBM (видеопамяти) это 20 миллисекунд. Для DDR (оперативной памяти хоста) — секунды. Для Flash-накопителей (SSD) — около минуты. Для жестких дисков (HDD) — около часа. Наличие часового тарифа прямо указывает на то, что провайдеры сбрасывают «холодный» контекст на дешевые медленные диски.
Нейросети и криптография: конвергентная эволюция
Сходство задач криптографии и глубокого обучения 2:03:48: Обе сферы занимаются перемешиванием информации. Криптография берет структурированные данные и превращает их в белый шум (лавинный эффект, где малейшее изменение входа меняет весь выход). Нейросети делают обратное — берут шум (пиксели, текст) и извлекают структуру. При этом случайная инициализация нейросети работает как неплохой шифр.
Сеть Фейстеля (Feistel network) в нейросетях 2:08:34: В криптографии давно используется конструкция Фейстеля, позволяющая сделать любую неинвертируемую функцию обратимой за счет сохранения части входа (x, y -> x+f(y), y). В 2017 году эту идею перенесли в машинное обучение в виде архитектуры Reversible Networks (RevNets).
Reversible Networks (RevNets) для экономии памяти 2:10:48: При стандартном обучении трансформера все промежуточные активации слоев (forward pass) должны сохраняться в HBM-памяти, чтобы позже использовать их для вычисления градиентов (backward pass). Это сжирает гигантский объем памяти. Использование обратимых слоев (RevNets) позволяет вообще не хранить активации. Во время обратного прохода сеть буквально вычисляется задом наперед, восстанавливая состояния на лету. Это разменивает дополнительные вычисления на радикальную экономию памяти — подход, прямо противоположный KV-кэшированию (где память тратится ради экономии вычислений).
ЛИЧНО ДЛЯ ТЕБЯ
Управляй счётом за API через физику: генерация в 4–8× дороже ввода, контекст свыше ~200k дорожает скачком, кэш префикса даёт до 10×. Практически: стабильные инструкции и документы — в начало промпта и не менять, задача — в конец; просить короткие ответы и меньше «думания»; фоновые задачи гонять через Batch API (−50%). Проверяй фактические cached tokens в биллинге, а не полагайся на теорию.
Дешёвого до нуля инференса не будет — калибруй ожидания при любых расчётах, где AI — переменная себестоимость: цена токена упирается в compute на пользователя и его уникальный KV-кэш. Удешевление идёт через разреженность, квантизацию и рост батча, а не через «подождём, станет бесплатно».
Сравнивай AI-инструменты по трём метрикам, а не по «токенам в секунду»: время до первого токена (интерактив), скорость потока и стоимость решённой задачи. Для правки кода в диалоге критична отзывчивость, для фонового ревью — цена и качество результата.
Не читай прайс-лист как рентген модели: размер модели, KV-кэша или тип накопителя из тарифов не выводится — половина «реверс-инжиниринга» в выпуске не сошлась по цифрам. Для решений о деньгах собственные замеры надёжнее красивых выкладок на доске.
КОНСЕНСУС РЕЦЕНЗЕНТОВ
Все трое сошлись: концептуальный каркас (roofline, compute- vs memory-bound, prefill/decode, Chinchilla, RevNets) верен и полезен, а конкретные числа в пересказе местами перепутаны (DeepSeek 8 vs 32 экспертов, размер KV-кэша, «константа 300»). Разошлись в строгости: Gemini подтверждает почти всё, включая HDD и «100× переобучение»; Claude и GPT считают выводы из прайс-листов (HDD, 200k-перегиб, 33/33/33) гипотезами, а GPT дополнительно отвергает «бесконечную стоимость при B=1» и невозможность медленного режима.