Перейти к содержимому
Китайская линза

Почему китайские модели такие эффективные

Как экспортные ограничения на GPU привели к инженерным решениям DeepSeek — DualPipe, FP8, MLA, MoE — и что на самом деле стоит за «5.6 млн долларов» на обучение V3.

УРОКchina/02-why-efficient.mdx1 ч 30 минМатериал 2 из 10
После урока вы сможете
  • Объяснить, как экспортные ограничения США повлияли на архитектуру и инфраструктуру DeepSeek-V3
  • Разложить стоимость обучения на множители (активные параметры, токены, FLOP/s, MFU) и показать, на какой множитель действует каждый приём
  • Посчитать GPU-часы, FLOPs и KV-кэш V3 и объяснить, почему 5.6 млн долл. — не полная стоимость модели
  • Рассказать о курсе на отечественные чипы (Ascend) и о том, что значит «ця боцзы»

В декабре 2024 года DeepSeek сообщила, что обучение V3 — модели уровня GPT-4o — заняло около 2.8 млн GPU-часов, то есть примерно 5.6 млн долларов по цене аренды. Для сравнения: Meta на Llama 3.1 405B потратила 30.8 млн GPU-часов. Эту цифру обсуждали месяцами. Одни объявили, что «американские лаборатории сжигают деньги». Другие — что DeepSeek «что-то скрывает».

Правда интереснее обеих версий. Эффективность DeepSeek — это сумма известных инженерных приёмов, доведённых до предела под давлением одного жёсткого ограничения: доступ к лучшим GPU для Китая закрыт. В этом уроке вы разложите стоимость обучения на множители, увидите, на какой множитель действует каждый приём, и научитесь отличать реальную экономию от маркетинга. Это навык инженера: в модулях 5.2–5.4 вы реализуете эти приёмы сами.

Ограничение: какие ускорители доступны Китаю

Заголовок раздела «Ограничение: какие ускорители доступны Китаю»

экспортный контрольэкспортный контрольEN export controlsОграничения США на поставку в Китай передовых GPU и оборудования для их производства (с октября 2022 г.). США против китайской AI-индустрии вводили и ужесточали поэтапно.

КогдаЧто произошло
10.2022США запрещают поставлять в Китай A100 и H100, а также оборудование для производства передовых чипов
2022–2023NVIDIA выпускает для Китая A800 и H800: вычисления те же, но межчиповая связь урезана
10.2023Правила ужесточают: под запрет попадают и A800/H800
2024Для Китая выходит H20 — много памяти, но вычислительная мощность в разы ниже
2025Поставки H20 то запрещают, то снова разрешают. По сообщениям СМИ, китайские регуляторы сами начинают отговаривать компании от их покупки
15.01.2026Бюро промышленности и безопасности США (BIS) переводит лицензирование H200 и AMD MI325X для Китая в режим рассмотрения в индивидуальном порядке, с пошлиной 25 % и лимитами объёма

DeepSeek-V3 обучали на кластере из 2048 GPU H800. Ключевой факт про H800: считает он так же быстро, как H100, а вот обмениваться данными с соседями может гораздо медленнее. По открытым данным, скорость NVLink у H800 — около 400 ГБ/с против 900 ГБ/с у H100. Это пропускная способность межсоединенияпропускная способность межсоединенияEN interconnect bandwidthСкорость обмена данными между GPU — NVLink внутри узла, InfiniBand между узлами. У H800 урезана по сравнению с H100., и для больших моделей она критична: при распределённом обучении GPU постоянно пересылают друг другу активации, градиенты и — в MoE — сами токены.

Из этого следует главная мысль урока. Если GPU мало и они плохо связаны, нужно (1) меньше считать, (2) считать в более дешёвом формате и (3) ни секунды не ждать данных. Именно это DeepSeek и сделала.

Обучение трансформера на DD токенах требует примерно 6ND6 N D операций с плавающей точкой (FLOPs), где NN — число параметров, участвующих в обработке токена. Двойка — прямой проход (умножение + сложение), ещё четвёрка — обратный. Это правило подробно выводится в уроке о законах масштабирования. Делим на скорость железа и получаем время:

GPU-часы≈6⋅Nакт⋅DPпик⋅MFU⋅3600\text{GPU-часы} \approx \frac{6 \cdot N_{\text{акт}} \cdot D}{P_{\text{пик}} \cdot \text{MFU} \cdot 3600}
  • NактN_{\text{акт}} — активные параметрыактивные параметрыEN activated (active) parametersСколько параметров MoE-модели реально участвует в обработке одного токена. «A22B» в названии Qwen3-235B-A22B — 22 млрд активных из 235 млрд. на токен;
  • DD — число токенов обучения;
  • PпикP_{\text{пик}} — пиковая производительность GPU в FLOP/s (зависит от формата чисел);
  • утилизация FLOPs моделиутилизация FLOPs модели (MFU)EN model FLOPs utilization (MFU)Доля пиковой производительности железа, которая уходит на полезные вычисления модели. Для больших распределённых обучений типичны 30–50 %. — доля пика, которая реально уходит на полезную работу. Остальное съедают ожидание данных, коммуникации и «пузыри» конвейера.

Проверим формулу на V3. Числитель: 6⋅37⋅109⋅14.8⋅1012≈3.3⋅10246 \cdot 37 \cdot 10^9 \cdot 14.8 \cdot 10^{12} \approx 3.3 \cdot 10^{24} FLOPs. Пик H800 в BF16 — 989⋅1012989 \cdot 10^{12} FLOP/s. Если MFU равна 35 %, получаем 3.3⋅1024/(989⋅1012⋅0.35⋅3600)≈2.63.3 \cdot 10^{24} / (989 \cdot 10^{12} \cdot 0.35 \cdot 3600) \approx 2.6 млн GPU-часов — почти ровно 2.664 млн из отчёта DeepSeek. Откуда взялись 35 %, вы посчитаете сами в практике.

Каждый приём DeepSeek бьёт по одному из множителей:

flowchart LR
L1["Мало GPU"] --> M["MoE<br/>↓ N акт в 18 раз"]
L1 --> F["FP8<br/>↑ P пик в 2 раза"]
L2["Урезанный NVLink<br/>у H800"] --> D["DualPipe, свои all-to-all,<br/>маршрутизация ≤ 4 узлов<br/>↑ MFU"]
L3["Дорогие перезапуски"] --> S["Стабильность<br/>0 откатов"]
L4["Дорогой инференс"] --> I["MLA: KV-кэш −93 %<br/>MTP: ×1.8 токенов/с"]
Ограничения (слева) и инженерные ответы DeepSeek-V3 (справа)

У DeepSeek-V3 671 млрд параметров, но на каждый токен работает только 37 млрд (5.5 %). В каждом MoE-слое есть 256 маршрутизируемых экспертов и 1 общий. Роутер выбирает для токена 8 экспертов из 256. Плотная модель на 671B потребовала бы в 671/37≈18671 / 37 \approx 18 раз больше вычислений на токен.

Почему бы тогда не сделать плотную модель на 37B? Потому что «места для знаний» у MoE намного больше: все 671B параметров обучаются, просто каждый токен использует свою небольшую часть. Число способов выбрать 8 экспертов из 256 — (2568)≈4⋅1014\binom{256}{8} \approx 4 \cdot 10^{14}, и разные токены используют разные комбинации. Плотной модели на 671B такая MoE обычно уступает, но плотную модель на 37B заметно обходит. Подробно о мелкозернистых и общих экспертах — в модуле 5.3.

У MoE есть цена: эксперты лежат на разных GPU и даже разных узлах, поэтому токены приходится пересылать к ним и обратно (коммуникация all-to-all). На H800 со слабой межузловой связью это главный враг. Отсюда рычаг 3.

Рычаг 2. FP8: вдвое больше операций в секунду

Заголовок раздела «Рычаг 2. FP8: вдвое больше операций в секунду»

Тензорные ядра Hopper (H100/H800) выполняют матричные умножения в 8-битном формате FP8 вдвое быстрее, чем в BF16, а памяти FP8 занимает вдвое меньше. Но у FP8 E4M3 всего 4 бита экспоненты и 3 бита мантиссы, а максимальное значение — 448. В LLM встречаются выбросы (outliers): отдельные активации в тысячи раз больше остальных. Если масштабировать весь тензор под самый большой элемент, маленькие числа проваливаются в ноль.

По словам авторов, V3 — первая модель такого масштаба, на которой FP8-обучение проверено на практике. Решение — смешанная точностьсмешанная точностьEN mixed precision с мелкими масштабами:

  • активации масштабируются тайлами 1×128, веса — блоками 128×128, у каждого блока свой множитель;
  • частичные суммы матричного умножения каждые 128 элементов переносятся в FP32 — иначе накапливается ошибка;
  • чувствительные части остаются в BF16/FP32: эмбеддинги, выходной слой, роутер MoE, нормализации, внимание.

Итог по данным отчёта: относительное отклонение loss от BF16-обучения — меньше 0.25 %. В практике ниже вы сами увидите, почему блочный масштаб спасает от выбросов. Форматы чисел и смешанная точность подробно разобраны в модуле 5.4.

Рычаг 3. DualPipe и коммуникации: не давать GPU простаивать

Заголовок раздела «Рычаг 3. DualPipe и коммуникации: не давать GPU простаивать»

Эксперты V3 разнесены по узлам кластера (экспертный параллелизм), и из-за пересылок токенов между узлами отношение времени вычислений к времени коммуникаций оказалось около 1 : 1. Если делать их по очереди, половину времени GPU просто ждут. DeepSeek ответила на трёх уровнях:

  1. DualPipe — двунаправленный конвейерконвейерный параллелизмEN pipeline parallelism. Микробатчи подаются с обоих концов конвейера, а прямой и обратный проходы соседних микробатчей перекрываются так, что пересылка одного идёт, пока считается другой. «Пузырей» простоя меньше, чем в классическом 1F1B.
  2. Свои ядра all-to-all. Коммуникацию ведут всего ~20 из 132 потоковых мультипроцессоров (SM) GPU, а остальные считают. Для этого авторы спустились ниже CUDA, до PTX — низкоуровневого набора инструкций GPU NVIDIA, близкого к ассемблеру.
  3. Маршрутизация с ограничением по узлам. Каждый токен отправляется не более чем на 4 узла. Внутри узла данные идут по NVLink (~160 ГБ/с), между узлами — по InfiniBand (~50 ГБ/с), в 3.2 раза медленнее. Чем меньше межузловых пересылок, тем лучше. Не путайте 160 ГБ/с с цифрой 400 ГБ/с выше: паспортная скорость NVLink считает обе стороны связи вместе, а в отчёте V3 приведены практические скорости, на которые авторы опирались в расчётах.

Схема параллелизма V3: 16-кратный конвейерный, 64-кратный экспертный (на 8 узлах) и ZeRO-1ZeRO (оптимизатор без избыточности)EN ZeRO (Zero Redundancy Optimizer)Вместо того чтобы хранить на каждом GPU полную копию, состояние оптимизатора (ZeRO-1), градиенты (ZeRO-2) и веса (ZeRO-3) делят между GPU параллелизма по данным. по данным (параллелизм по данным, где состояние оптимизатора поделено между GPU, урок 5.4.3). Тензорного параллелизма нет вовсе — он требует самой интенсивной связи между GPU. Подробно о видах параллелизма — в модуле 5.4, а как DualPipe и FP8 описаны в самом техотчёте (формула «пузырей», точность накопления) — в уроке 6 этого трека.

Всплеск loss на прогоне длиной в триллионы токенов часто означает откат к чекпоинту и потерянные дни. В формуле этого множителя нет: она считает идеальный прогон, а каждый откат добавляет GPU-часы сверху. Сутки работы 2048 GPU — это 49 152 GPU-часыGPU-часыEN GPU hoursЧисло ускорителей × часы работы. 2048 GPU за сутки — 49 152 GPU-часа., около 100 тысяч долларов. Авторы V3 пишут, что за всё обучение не было ни одного необратимого всплеска loss и ни одного отката. Moonshot пошла дальше: Kimi K2 обучили на 15.5T токенов без единого всплеска благодаря MuonClip (модуль 5.4).

Обучение — разовая трата, инференс — постоянная. Здесь работают два приёма.

многоголовое латентное вниманиемногоголовое латентное внимание (MLA)EN multi-head latent attention (MLA)Предложено DeepSeek в DeepSeek-V2 (2024). (из DeepSeek-V2) сжимает ключи и значения всех голов в один латентный вектор. Вместо 2×128×128=32 7682 \times 128 \times 128 = 32\,768 чисел на слой в кэше лежат 512 + 64 = 576. В V2 это сократило KV-кэшKV-кэшEN KV cache на 93.3 % и подняло максимальную пропускную способность генерации в 5.76 раза по сравнению с DeepSeek 67B. Реализуете MLA в модуле 5.2.

предсказание нескольких токеновпредсказание нескольких токенов (MTP)EN multi-token prediction (MTP) — модель учится предсказывать не только следующий токен, но и токен после него. На инференсе этот дополнительный прогноз служит черновиком для спекулятивного декодированияспекулятивное декодированиеEN speculative decoding (урок 5.4.2): второй токен принимается в 85–90 % случаев, и генерация ускоряется примерно в 1.8 раза.

Таблица из техотчёта (по цене аренды H800 2 долл. за GPU-час):

ЭтапGPU-часы H800Долл.
Претрейн (14.8T токенов)2 664 0005.328 млн
Расширение контекста до 128K119 0000.238 млн
Пост-трейнинг5 0000.01 млн
Итого2 788 0005.576 млн

Претрейн — 180 тыс. GPU-часов на триллион токенов, то есть 3.7 дня на кластере из 2048 GPU. Весь претрейн занял меньше двух месяцев.

Чего в этой сумме нет — авторы прямо пишут, что учтён только финальный прогон:

  • предварительные исследования и абляционные экспериментыабляционный эксперимент, абляцияEN ablation studyУбрать или заменить один компонент и сравнить с полной моделью, чтобы измерить вклад этого компонента. над архитектурой, алгоритмами и данными;
  • неудачные прогоны и модели-предшественники (V2, DeepSeekMoE, DeepSeekMath — всё это годы работы);
  • сбор и очистка данных, зарплаты исследователей;
  • покупка и содержание собственного кластера: 2 долл. за час — цена аренды, а не реальная стоимость владения;
  • обучение R1 поверх V3.

Сторонние аналитики оценивали полные затраты компании на железо и исследования во много раз выше 5.6 млн. Это оценки, а не данные DeepSeek. Честное сравнение — финальный прогон с финальным прогоном: 2.79 млн GPU-часов у V3 против 30.84 млн у Llama 3.1 405B. Разница в 11 раз. Её почти целиком объясняет MoE: у Llama все 405B параметров активны на каждом токене, у V3 — только 37B.

Проверим по формуле. Llama 3.1 405B обучали на 15.6T токенов: 6⋅405⋅109⋅15.6⋅1012≈3.8⋅10256 \cdot 405 \cdot 10^9 \cdot 15.6 \cdot 10^{12} \approx 3.8 \cdot 10^{25} FLOPs. Это в 11.5 раза больше, чем 3.3⋅10243.3 \cdot 10^{24} у V3, то есть почти во столько же раз, во сколько различаются GPU-часы. Значит, в пересчёте на одну GPU обе команды выжали примерно одинаковую скорость — около 340 TFLOP/s по правилу 6ND6ND. Грубый вывод: FP8, DualPipe и свои ядра не сделали каждую H800 вдвое быстрее H100 у Meta. Они позволили MoE-модели с тяжёлыми пересылками работать на урезанных H800 так же эффективно, как плотная модель работает на полноценных H100.

Экспортные ограничения не только заставили экономить: они запустили программу импортозамещения — по-китайски «гочань тидай», «замена отечественным». Главный игрок — Huawei с ускорителями Ascend и программным стеком CANN вместо CUDA. Есть и другие: Cambricon, Hygon, Kunlunxin (Baidu), T-Head (Alibaba), Moore Threads, MetaX, Biren.

Как это видно по моделям:

  • DeepSeek-V3.1 (август 2025) использует формат масштабов FP8 UE8M0. DeepSeek пояснила, что он рассчитан на готовящиеся отечественные чипы нового поколения.
  • GLM-5 (февраль 2026) адаптировали под 7 китайских чиповых платформ.
  • DeepSeek-V4 (апрель 2026) получила поддержку инференса на Huawei Ascend в день релиза. В репозиториях DeepSeek появился DeepGEMM-Ascend.

Важная оговорка: на отечественных чипах сейчас в основном запускают модели. Данные о том, на каком железе обучались фронтирные модели 2026 года, противоречивы. Самое сложное в замене NVIDIA — не сам кристалл, а программная экосистема: компиляторы, библиотеки ядер, отлаженные фреймворки. Поэтому для китайской индустрии отечественный (китайский) чипотечественный (китайский) чипEN domestic chipСвязано с курсом на импортозамещение («гочань тидай», буквально «замена отечественным»); главный пример — ускорители Huawei Ascend. — вопрос не одного поколения железа.

Повторите расчёты урока сами. Первый скрипт не требует библиотек:

# Прикидка «на салфетке»: сколько стоит обучение и сколько памяти ест KV-кэш.
# Числа DeepSeek-V3 — из техотчёта (arXiv:2412.19437); пиковая производительность H800 — как у H100 SXM.
N_ACTIVE = 37e9 # активных параметров на токен
N_TOTAL = 671e9 # всего параметров
TOKENS = 14.8e12 # токенов претрейна
GPU_HOURS = 2.664e6 # GPU-часов H800 на претрейн (без расширения контекста и пост-трейнинга)
PEAK_BF16 = 989e12 # FLOP/s, плотная BF16 на H100/H800 (FP8 — вдвое больше)
flops = 6 * N_ACTIVE * TOKENS # правило 6·N·D (прямой + обратный проход)
achieved = flops / (GPU_HOURS * 3600) # FLOP/s на одну GPU в среднем
print(f"Вычисления претрейна: {flops:.2e} FLOP")
print(f"Плотная модель 671B потребовала бы в {N_TOTAL / N_ACTIVE:.1f} раза больше")
print(f"Реальная скорость: {achieved / 1e12:.0f} TFLOP/s на GPU")
print(f"MFU относительно BF16: {achieved / PEAK_BF16:.0%}")
def kv_bytes_per_token(layers, elems_per_layer, bytes_per_elem=2):
"""Сколько байт KV-кэша нужно на один токен контекста."""
return layers * elems_per_layer * bytes_per_elem
LAYERS, HEADS, D_HEAD = 61, 128, 128
variants = {
"MHA (128 голов)": 2 * HEADS * D_HEAD, # K и V для каждой головы
"GQA (8 групп)": 2 * 8 * D_HEAD,
"MLA (512 + 64)": 512 + 64, # латентный вектор + развязанный RoPE-ключ
}
ctx = 128 * 1024
for name, elems in variants.items():
b = kv_bytes_per_token(LAYERS, elems)
print(f"{name:16s} {b / 1024:8.1f} КиБ/токен {b * ctx / 2**30:7.1f} ГиБ на 128K токенов")
Вычисления претрейна: 3.29e+24 FLOP
Плотная модель 671B потребовала бы в 18.1 раза больше
Реальная скорость: 343 TFLOP/s на GPU
MFU относительно BF16: 35%
MHA (128 голов) 3904.0 КиБ/токен 488.0 ГиБ на 128K токенов
GQA (8 групп) 244.0 КиБ/токен 30.5 ГиБ на 128K токенов
MLA (512 + 64) 68.6 КиБ/токен 8.6 ГиБ на 128K токенов

Две оговорки. MFU здесь — грубая оценка: правило 6ND6ND не учитывает FLOPs внимания, а часть умножений шла в FP8 с вдвое большим пиком. Варианты MHA и GQA — гипотетические: так выглядел бы кэш V3, если бы вместо MLA стояло обычное внимание. Но порядок виден ясно: кэш одного запроса на 128K токенов с MHA занял бы 488 ГиБ — больше, чем память шести GPU по 80 ГБ, и это ещё без весов модели. С MLA тот же запрос умещается в 8.6 ГиБ.

Второй скрипт показывает, зачем FP8 нужны блочные масштабы. Нужен PyTorch 2.1+ (работает на CPU):

import torch
E4M3_MAX = 448.0 # максимальное число в формате FP8 E4M3
def fp8_roundtrip(t, scale):
"""Делим на масштаб, округляем в FP8 E4M3 и возвращаем обратно во float32."""
return (t / scale).to(torch.float8_e4m3fn).to(torch.float32) * scale
def rel_error(a, b):
return ((a - b).norm() / b.norm()).item()
torch.manual_seed(0)
base = torch.randn(4, 1024) # «обычные» активации
mask = torch.ones_like(base, dtype=torch.bool)
mask[0, :128] = False # блок, в котором будет выброс, не учитываем
print("выброс общий масштаб блоки по 128")
for outlier in [10, 1e3, 1e4, 1e5, 1e6]:
x = base.clone()
x[0, 0] = outlier # один гигантский выброс, как бывает в LLM
per_tensor = fp8_roundtrip(x, x.abs().max() / E4M3_MAX)
blocks = x.view(-1, 128) # DeepSeek-V3: тайлы 1×128 для активаций
per_block = fp8_roundtrip(blocks, blocks.abs().amax(1, keepdim=True) / E4M3_MAX).view_as(x)
print(f"{outlier:7.0e} {rel_error(per_tensor[mask], x[mask]):13.3f} {rel_error(per_block[mask], x[mask]):12.3f}")
выброс общий масштаб блоки по 128
1e+01 0.027 0.026
1e+03 0.025 0.026
1e+04 0.027 0.026
1e+05 0.126 0.026
1e+06 0.949 0.026

Экспонента FP8 спасает от умеренных выбросов: при выбросе в 1000 раз ошибка не растёт. Но при выбросе в 10610^6 раз ошибка общего масштаба доходит до 95 %: обычные числа после деления на огромный масштаб меньше самого маленького числа FP8 и округляются в ноль. Поблочный масштаб держит ошибку на уровне 2.6 % при любом выбросе, потому что выброс портит только свой блок из 128 чисел.

Задание. Измените blocks = x.view(-1, 128) на блоки по 32 и по 1024. Как меняется ошибка? Почему блок не делают совсем маленьким? Подсказка: каждый масштаб — это лишнее число в памяти и лишнее умножение.

Проверь себя6 вопросов
1 Сколько миллионов долларов получится, если 2 788 000 GPU-часов умножить на 2 долл. за час? Округлите до двух знаков.
2 Что НЕ входит в 5.576 млн долл. из техотчёта DeepSeek-V3?Можно выбрать несколько ответов
3 Почему перекрытие вычислений и коммуникаций (DualPipe, свои all-to-all) было особенно важно именно на H800?
4 Какой приём DeepSeek в первую очередь уменьшает память на инференсе при длинном контексте?
5 MHA со 128 головами по 128 измерений хранит 2⋅128⋅1282 \cdot 128 \cdot 128 чисел KV-кэша на слой, MLA — 576. Во сколько раз MLA меньше? Округлите до целого.
6 Вы обучаете модель в FP8 и видите, что loss расходится. Каким частям модели прежде всего стоит вернуть BF16/FP32, следуя рецепту DeepSeek-V3?
  • Экспортные ограничения оставили Китаю урезанные по связи H800, а затем и их запретили. Поэтому в DeepSeek-V3 оптимизировано всё, что связано с коммуникациями и объёмом вычислений.
  • Стоимость обучения ≈ 6NактD/(Pпик⋅MFU)6 N_{\text{акт}} D / (P_{\text{пик}} \cdot \text{MFU}). MoE уменьшает NактN_{\text{акт}} в 18 раз, FP8 удваивает PпикP_{\text{пик}}, DualPipe и свои ядра поднимают MFU, стабильность избавляет от перезапусков.
  • MLA (KV-кэш −93 %) и MoE сделали дешёвым инференс DeepSeek-V2 — отсюда ценовая война 2024 года. В V3 к ним добавился MTP: генерация быстрее примерно в 1.8 раза.
  • 5.6 млн долл. — цена финального прогона по аренде, а не стоимость модели. Честное сравнение — GPU-часы с GPU-часами: у V3 их в 11 раз меньше, чем у Llama 3.1 405B, и почти весь выигрыш дало MoE.
  • Второй ответ на «ця боцзы» — импортозамещение: Ascend и другие китайские чипы, пока в основном для инференса.

Дальше: почему китайские лаборатории отдают веса бесплатно — стратегия открытых весов.