Open Source Week, день 6: система инференса DeepSeek-V3/R1
Полный перевод обзора боевой системы инференса DeepSeek-V3/R1: параллелизм экспертов между узлами, наложение вычислений и связи, балансировка нагрузки, реальные цифры нагрузки и экономики сервиса.
Принципы проектирования системы
Заголовок раздела «Принципы проектирования системы»Цели, ради которых оптимизируется инференс DeepSeek-V3/R1, — большая пропускная способность и малая задержка.
Чтобы достичь обеих целей, мы используем параллелизм экспертов (Expert Parallelism, EP) между узлами.
- Во-первых, EP сильно увеличивает размер батча. Матричные вычисления на GPU становятся эффективнее, пропускная способность растёт.
- Во-вторых, EP распределяет экспертов по GPU, и каждая GPU обрабатывает лишь небольшую часть экспертов. Ей нужно меньше читать из памяти, поэтому задержка падает.
Однако EP усложняет систему, в основном в двух отношениях:
- EP вводит обмен данными между узлами. Чтобы пропускная способность была высокой, вычисления нужно организовать так, чтобы обмен данными накладывался на вычисления.
- EP охватывает несколько узлов, а значит, неизбежно требует и параллелизма по данным (Data Parallelism, DP), и балансировки нагрузки между разными экземплярами DP.
В этой статье рассказано, как мы решаем эти задачи:
- используем EP, чтобы увеличить размер батча;
- прячем задержку обмена данными за вычислениями;
- балансируем нагрузку.
Масштабный параллелизм экспертов между узлами
Заголовок раздела «Масштабный параллелизм экспертов между узлами»В DeepSeek-V3/R1 очень много экспертов: в каждом слое из 256 экспертов активны только 8. Из-за такой высокой разреженности модели нужен огромный общий размер батча — только тогда на каждого эксперта приходится достаточно токенов, и можно получить высокую пропускную способность при малой задержке. Поэтому масштабный параллелизм экспертов между узлами необходим.
Поскольку мы используем архитектуру с раздельными prefill и decode, на этих фазах применяются разные степени параллелизма:
- Фаза prefill [маршрутизируемые эксперты — EP32, MLA и общий эксперт — DP32]. Каждый блок развёртывания занимает 4 узла и содержит 32 избыточных маршрутизируемых эксперта; каждая GPU обслуживает 9 маршрутизируемых экспертов и 1 общий.
- Фаза decode [маршрутизируемые эксперты — EP144, MLA и общий эксперт — DP144]. Каждый блок развёртывания занимает 18 узлов и содержит 32 избыточных маршрутизируемых эксперта; каждая GPU обслуживает 2 маршрутизируемых эксперта и 1 общий.
Наложение вычислений и обмена данными
Заголовок раздела «Наложение вычислений и обмена данными»Масштабный EP между узлами создаёт большие накладные расходы на связь. Чтобы их уменьшить, мы применяем стратегию наложения двух микробатчей (dual-batch overlap): батч запросов делится на два микробатча, и стоимость связи прячется, а общая пропускная способность растёт.
На фазе prefill два микробатча выполняются поочерёдно, и обмен данными одного микробатча прячется за вычислениями другого.
На фазе decode разные стадии выполняются неравное время. Поэтому мы делим слой внимания на два шага и используем пятиступенчатый конвейер, чтобы наложение связи на вычисления было бесшовным.
Подробнее о нашем механизме наложения вычислений и связи — в репозитории profile-data.
Как добиться оптимальной балансировки нагрузки
Заголовок раздела «Как добиться оптимальной балансировки нагрузки»Масштабный параллелизм (и DP, и EP) порождает серьёзную проблему: если одна GPU перегружена вычислениями или связью, она становится узким местом, тормозит всю систему, а остальные GPU простаивают. Чтобы использовать ресурсы по максимуму, мы стремимся выровнять нагрузку вычислений и связи на всех GPU.
1. Балансировщик prefill
Заголовок раздела «1. Балансировщик prefill»- Главная проблема: у разных экземпляров DP разное число запросов и разная длина последовательностей. Из-за этого неравномерны вычисления основного внимания (core attention) и объём отправки при рассылке (dispatch send).
- Цели оптимизации:
- выровнять вычисления основного внимания между GPU (балансировка вычислительной нагрузки внимания);
- уравнять число входных токенов на GPU (балансировка отправки при рассылке), чтобы ни одна GPU не задерживала обработку.
2. Балансировщик decode
Заголовок раздела «2. Балансировщик decode»- Главная проблема: неравное число запросов и длины последовательностей у экземпляров DP приводят к разнице в вычислениях основного внимания (они зависят от занятого KV-кэша) и в объёме отправки при рассылке.
- Цели оптимизации:
- выровнять использование KV-кэша между GPU (балансировка вычислительной нагрузки внимания);
- уравнять число запросов на GPU (балансировка отправки при рассылке).
3. Балансировщик параллелизма экспертов
Заголовок раздела «3. Балансировщик параллелизма экспертов»- Главная проблема: у любой MoE-модели есть эксперты, которые по своей природе нагружены сильнее других. Из-за этого вычислительная нагрузка экспертов на разных GPU неравномерна.
- Цель оптимизации:
- выровнять вычисления экспертов на каждой GPU, то есть минимизировать максимальный объём приёма при рассылке (dispatch receive) среди всех GPU.
Схема онлайн-системы инференса DeepSeek
Заголовок раздела «Схема онлайн-системы инференса DeepSeek»flowchart TB API["API Server"] --> PLB["Prefill Load Balancer"] PLB --> PS["Prefill Service (несколько экземпляров)<br/>внутри: Expert-Parallel Load Balancer"] PS --> DLB["Decode Load Balancer"] DLB --> DS["Decode Service (несколько экземпляров)<br/>внутри: Expert-Parallel Load Balancer"] DS --> API PS <--> KV["External KVCache Storage (необязательно)"] DS --> KV
Статистика онлайн-сервиса DeepSeek
Заголовок раздела «Статистика онлайн-сервиса DeepSeek»Все сервисы инференса DeepSeek-V3/R1 работают на GPU H800, с той же точностью, что и при обучении. Конкретно: матричные умножения и пересылки при рассылке (dispatch) используют формат FP8, согласованный с обучением, а основные вычисления MLA и пересылки при сборе (combine) — формат BF16. Так обеспечивается оптимальное качество сервиса.
Кроме того, днём нагрузка на сервис высокая, а ночью низкая, поэтому мы сделали механизм, который в дневные пиковые часы разворачивает сервисы инференса на всех узлах. В ночные часы низкой нагрузки мы уменьшаем число узлов инференса и отдаём ресурсы под исследования и обучение. За последние 24 часа (с 12:00 27.02.2025 до 12:00 28.02.2025 по UTC+8) суммарная пиковая занятость узлов сервисами инференса V3 и R1 достигла 278, а средняя — 226,75 узла (в каждом узле 8 GPU H800). Если считать аренду одной GPU H800 за 2 доллара в час, общие затраты за сутки составляют 87 072 доллара.
За 24-часовой период статистики (с 12:00 27.02.2025 до 12:00 28.02.2025 по UTC+8) у V3 и R1:
- всего входных токенов — 608 млрд, из них 342 млрд (56,3%) попали в KV-кэш на диске;
- всего выходных токенов — 168 млрд. Средняя скорость вывода — 20–22 токена в секунду, средняя длина KV-кэша на один выходной токен — 4989 токенов;
- каждый узел H800 в среднем обрабатывает около 73,7 тыс. входных токенов в секунду на prefill (с учётом попаданий в кэш) или около 14,8 тыс. выходных токенов в секунду на decode.
Приведённая статистика включает все запросы пользователей из веба, приложения и API. Если бы все токены оплачивались по ценам DeepSeek-R1 (*), суточная выручка составила бы 562 027 долларов, а маржа (прибыль к затратам) — 545%.
(*) Цены R1: 0,14 долл. за 1 млн входных токенов (попадание в кэш), 0,55 долл. за 1 млн входных токенов (промах кэша), 2,19 долл. за 1 млн выходных токенов.
Однако наша реальная выручка значительно ниже по следующим причинам:
- цены DeepSeek-V3 заметно ниже, чем у R1;
- платная лишь часть сервисов (веб и приложение остаются бесплатными);
- в часы низкой нагрузки автоматически действуют ночные скидки.
Приложение 1. Оглавление репозитория open-infra-index
Заголовок раздела «Приложение 1. Оглавление репозитория open-infra-index»Привет, DeepSeek Open Infra!
Заголовок раздела «Привет, DeepSeek Open Infra!»202505 — статья индустриальной секции ISCA 2025
Заголовок раздела «202505 — статья индустриальной секции ISCA 2025»Insights into DeepSeek-V3: Scaling Challenges and Reflections on Hardware for AI Architectures («Взгляд на DeepSeek-V3: трудности масштабирования и размышления о железе для архитектур ИИ»). Статья на arXiv.
202504 — Путь к открытию движка инференса DeepSeek
Заголовок раздела «202504 — Путь к открытию движка инференса DeepSeek»202502 — неделя открытого кода
Заголовок раздела «202502 — неделя открытого кода»Мы — крошечная команда в @deepseek-ai, которая выжимает максимум в исследовании AGI.
Начиная с этой недели, с 24 февраля 2025 года, мы откроем 5 репозиториев — по одному в день. Не потому, что делаем громкие заявления, а просто как разработчики, которые с полной прозрачностью делятся своим скромным, но искренним прогрессом.
Это скромные строительные блоки нашего онлайн-сервиса: задокументированные, развёрнутые и проверенные в бою в продакшене. Никаких обещаний без кода — только честный код, который продвинул нашу крошечную, но амбициозную мечту.
Зачем? Потому что каждая опубликованная строка становится общим импульсом, который ускоряет путь. Ежедневные публикации скоро начнутся. Никаких башен из слоновой кости — только чистая гаражная энергия и инновации, движимые сообществом 🔧
Следите за новостями — давайте вместе увлечённо копаться в открытом коде.
Эффективное ядро декодирования MLA для GPU Hopper. Оптимизировано для последовательностей переменной длины, проверено в бою в продакшене.
- поддержка BF16;
- страничный KV-кэш (размер блока 64);
- производительность: 3000 ГБ/с в режиме, ограниченном памятью, и 580 TFLOPS в BF16 в режиме, ограниченном вычислениями, на H800.
(Разбор ядра — на странице «FlashMLA изнутри».)
Представляем DeepEP — первую открытую библиотеку связи для EP при обучении и инференсе MoE-моделей.
- эффективная и оптимизированная связь «все со всеми» (all-to-all);
- поддержка связи внутри узла и между узлами через NVLink и RDMA;
- высокопроизводительные ядра для обучения и для prefill на инференсе;
- низкозадержечные ядра для декодирования на инференсе;
- нативная поддержка рассылки (dispatch) в FP8;
- гибкое управление ресурсами GPU для наложения вычислений и связи.
Представляем DeepGEMM — библиотеку умножения матриц (GEMM) в FP8, которая поддерживает и плотные, и MoE-GEMM и обеспечивает обучение и инференс V3/R1.
- до 1350+ TFLOPS в FP8 на GPU Hopper;
- без тяжёлых зависимостей, чистая, как учебный пример;
- полностью компилируется на лету (Just-In-Time);
- основная логика — около 300 строк, но на большинстве размеров матриц обгоняет ядра, настроенные экспертами;
- поддерживает плотную раскладку и две раскладки для MoE.
День 4 — оптимизированные стратегии параллелизма
Заголовок раздела «День 4 — оптимизированные стратегии параллелизма»- DualPipe — алгоритм двунаправленного конвейерного параллелизма для наложения вычислений и связи при обучении V3/R1. Репозиторий.
- EPLB — балансировщик нагрузки параллелизма экспертов для V3/R1. Репозиторий.
- Анализ наложения вычислений и связи в V3/R1. Репозиторий.
(Перевод README DualPipe и EPLB — на странице «DualPipe и EPLB».)
День 5 — 3FS, ускоритель для всего доступа к данным DeepSeek
Заголовок раздела «День 5 — 3FS, ускоритель для всего доступа к данным DeepSeek»Fire-Flyer File System (3FS) — параллельная файловая система, которая использует всю пропускную способность современных SSD и сетей RDMA.
- 6,6 ТиБ/с суммарной скорости чтения в кластере из 180 узлов;
- 3,66 ТиБ/мин на тесте GraySort в кластере из 25 узлов;
- 40+ ГиБ/с пиковой пропускной способности на клиентский узел при поиске в KV-кэше;
- дезагрегированная архитектура с семантикой строгой согласованности;
- применяется в V3/R1 для предобработки обучающих данных, загрузки датасетов, сохранения и загрузки чекпойнтов, векторного поиска по эмбеддингам и поиска в KV-кэше на инференсе.
Репозитории: 3FS и Smallpond — фреймворк обработки данных поверх 3FS. (Перевод проектных заметок — на странице «3FS: проектные заметки».)
День 6 — ещё одно: обзор системы инференса DeepSeek-V3/R1
Заголовок раздела «День 6 — ещё одно: обзор системы инференса DeepSeek-V3/R1»Пропускная способность и задержка оптимизированы за счёт:
- масштабирования батча с помощью EP между узлами;
- наложения вычислений и связи;
- балансировки нагрузки.
Данные продакшен-сервисов V3/R1:
- 73,7 тыс. / 14,8 тыс. входных / выходных токенов в секунду на узел H800;
- маржа (прибыль к затратам) — 545%.
Надеемся, что идеи этой недели будут полезны сообществу и внесут вклад в наши общие цели на пути к AGI.
Подробный разбор — документ дня 6 (переведён выше). Китайская версия: «Обзор системы инференса DeepSeek-V3/R1» (Чжиху, Zhihu).
2024 — статья об ИИ-инфраструктуре (SC24)
Заголовок раздела «2024 — статья об ИИ-инфраструктуре (SC24)»Fire-Flyer AI-HPC: A Cost-Effective Software-Hardware Co-Design for Deep Learning («Fire-Flyer AI-HPC: экономичное совместное проектирование программ и железа для глубокого обучения»). Статья, arXiv.
Приложение 2. Путь к открытию движка инференса DeepSeek
Заголовок раздела «Приложение 2. Путь к открытию движка инференса DeepSeek»Несколько недель назад, во время недели открытого кода, мы открыли несколько библиотек. Сообщество отреагировало невероятно тепло: появились вдохновляющие совместные проекты, продуктивные обсуждения и ценные исправления ошибок. Это побудило нас сделать ещё один шаг: вернуть открытому сообществу наш внутренний движок инференса.
Мы глубоко благодарны экосистеме открытого кода, без которой наш путь к AGI был бы невозможен. Наш фреймворк обучения опирается на PyTorch, а движок инференса построен на основе vLLM; оба сыграли ключевую роль в ускорении обучения и развёртывания моделей DeepSeek.
Спрос на развёртывание моделей вроде DeepSeek-V3 и DeepSeek-R1 растёт, и мы хотим вернуть сообществу как можно больше. Сначала мы думали открыть внутренний движок инференса полностью, но увидели несколько трудностей:
- Расхождение кодовых баз. Наш движок основан на раннем форке vLLM более чем годичной давности. Структурно он похож, но мы сильно доработали его под модели DeepSeek, и расширить его для более широких сценариев трудно.
- Зависимости от инфраструктуры. Движок тесно связан с нашей внутренней инфраструктурой, включая инструменты управления кластером, поэтому для публичного развёртывания без серьёзных переделок он непригоден.
- Ограниченные силы на поддержку. Мы — небольшая исследовательская команда, сосредоточенная на создании лучших моделей, и у нас нет ресурсов поддерживать большой открытый проект.
С учётом этих трудностей мы решили сотрудничать с существующими открытыми проектами — это более устойчивая альтернатива.
Дальше мы будем тесно работать с существующими открытыми проектами, чтобы:
- выделять самостоятельные функции: оформлять переиспользуемые компоненты в модули и передавать их как независимые библиотеки;
- делиться оптимизациями: напрямую передавать улучшения архитектуры и детали реализации.
Мы глубоко благодарны движению открытого кода — от операционных систем и языков программирования до фреймворков машинного обучения и движков инференса. Для нас честь вносить вклад в эту процветающую экосистему и видеть, как сообщество принимает наши модели и код. Давайте вместе раздвигать границы AGI и добиваться того, чтобы его польза служила всему человечеству.
Уточним: эта статья описывает наш подход только к открытию кодовой базы DeepSeek-Inference-Engine. Что касается будущих моделей, мы сохраняем открытую и готовую к сотрудничеству позицию и по отношению к сообществу открытого кода, и по отношению к партнёрам-производителям железа. Мы обязуемся заранее, до выпуска новых моделей, синхронизировать инженерные работы, связанные с инференсом, чтобы сообщество могло обеспечить передовую (SOTA) поддержку с первого дня. Наша конечная цель — синхронизированная экосистема, в которой передовые возможности ИИ бесшовно реализуются на разных аппаратных платформах сразу после официального выпуска моделей.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| throughput / latency | пропускная способность / задержка |
| expert parallelism (EP) | параллелизм экспертов |
| data parallelism (DP) | параллелизм по данным |
| prefill-decode disaggregation | раздельные prefill и decode (PD-дезагрегация) |
| redundant experts | избыточные (дублированные) эксперты |
| dual-batch overlap | наложение двух микробатчей |
| dispatch / combine | рассылка токенов экспертам / сбор ответов экспертов |
| core attention | основное внимание (сама операция softmax(QKᵀ)V) |
| load balancer | балансировщик нагрузки |
| on-disk KV cache | KV-кэш на диске |
| cost profit margin | маржа, отношение прибыли к затратам |