Перейти к содержанию

Открытые модели

DeepSeek выложила движок своего API, Huawei наравне с Nvidia

5 мин чтения

Наш ИИ-аналитик сам проверил эту историю: запускал, считал, сверял с оригиналами. Что мы проверили

Текст написан ИИ-моделью по источникам, на которые ведут ссылки, и сверен с ними второй моделью. Как мы работаем

20 октября DeepSeek открыла под лицензией Apache 2.0 DeepInfer, движок, на котором сама обслуживает V4.1-Flash. Вместе с ним вышла новая версия deepseek-recipe, библиотеки, которая превращает запрос к API во вход модели так же, как это делает официальный API DeepSeek. Мы проверили код и обе версии энкодера: совпадение с API подтверждается, но с оговорками.

Цель DeepSeek сформулировала в посте в X: «Мы делимся своим продакшен-стеком, чтобы помочь сообществу снизить затраты на вычисления, сократить энергопотребление и сделать ИИ доступнее». Веса моделей DeepSeek и раньше можно было скачать и запустить в vLLM. Но, как отмечает The New Stack, скорость, пропускная способность и стоимость во многом зависят от софта, который принимает запросы, раскладывает работу по чипам и генерирует ответы. Теперь у разработчиков есть собственный вариант DeepSeek.

Что лежит в репозитории

В DeepInfer вошли оптимизированные ядра и коммуникационные библиотеки, в том числе открытые раньше FlashMLA, DeepGEMM и DeepEP, а также распределённый инференс на много чипов. Есть спекулятивное декодирование: модель набрасывает несколько токенов вперёд и проверяет их за один проход. Асинхронное планирование сокращает простой процессоров в ожидании работы, а структурированный вывод загоняет ответ в заданный формат. Код для будущих моделей DeepSeek обещает выкладывать в тот же репозиторий. Сам движок, по README, построен в основном на vLLM, с идеями из SGLang и TensorRT-LLM. В vLLM, по данным TNW, пообещали дальше улучшать собственную поддержку V4.1-Flash с оглядкой на DeepInfer.

deepseek-recipe выходит для Rust и Python. Тихо её выложили ещё в сентябре, а во вторник вышло обновление.

Из железа поддерживаются только Nvidia SM100 (Blackwell) и Huawei Ascend 950. Hopper в списке нет, и это не упущение документации: строк sm90 и hopper мы не нашли во всём дереве кода, а SM100 упоминается только в README. Ascend при этом добавлен не на правах порта: из 30 файлов с операторами для CUDA у 27 есть одноимённые пары в каталоге для Ascend. Есть и свои подмодули DeepEP-Ascend и DeepGEMM-Ascend, а версии стека закреплены отдельно: torch-npu==2.13.0rc1 и CANN 9.2.

Полноценный сервис из релиза пока не собрать. В README перечислены три недостающих компонента: система KV-кэша (хранилище промежуточных состояний внимания), разнесение стадий VE, prefill и decode по разным машинам и балансировка между репликами для prefill и decode. Про разнесение стадий сделана оговорка: большая часть нужной для него функциональности в движке уже реализована.

Полтора года от отказа до релиза

  • 14 апреля 2025 года: DeepSeek объясняет, почему не выкладывает движок целиком. Он был основан на раннем форке vLLM и сильно переделан под модели DeepSeek, завязан на внутреннюю инфраструктуру вплоть до инструментов управления кластерами, а на поддержку у небольшой команды не хватает рук. Вместо этого компания обещает выносить отдельные функции в библиотеки и отдавать улучшения в существующие проекты.
  • 10 сентября 2026 года: на PyPI появляются deepseek-recipe 0.1.0 и 0.1.1.
  • Сентябрь 2026 года: выходит V4.1-Flash.
  • 29-30 сентября: в организации DeepSeek на GitHub создаются библиотеки для Ascend. TNW относит инструменты для Huawei к началу октября, но, по нашей проверке, ничего связанного с Ascend в октябре там не создавалось.
  • 17 октября: обновление V4.1-Flash-1017 выходит без Jinja-шаблона чата, с эталонным кодом на Python.
  • 20 октября: DeepInfer и deepseek-recipe 0.2.0.

Три недостающих компонента касаются ровно того слоя, который в 2025 году DeepSeek называла намертво связанным с её кластерами. Судя по всему, эту часть из релиза просто вырезали. Bloomberg отмечает, что такие приёмы ИИ-компании обычно держат при себе. По оценке агентства, ими смогут воспользоваться облачные провайдеры, которые уже хостят модели DeepSeek, а компании, разворачивающие их на своих серверах, могут сократить расходы. При этом Саритха Рай из Bloomberg указывает, что независимых замеров прироста от DeepInfer пока нет.

Авторский разбор

Что мы проверили

20 октября мы прочитали код и README DeepInfer, а затем сравнили deepseek-recipe 0.2.0 с эталонным энкодером чекпойнта V4.1-Flash-1017 и со старым Jinja-шаблоном из сентябрьского репозитория. Сравнивали на CPU, только по строкам промпта: железа для запуска движка у нас не было.

Как мы проверяем истории

Для свежего чекпойнта обещание «того же поведения, что у API» подтвердилось. А вот у тех, кто поднимал модель со старым шаблоном, стандартный уровень рассуждений «medium» даёт другой бюджет, чем в API. Опубликованные графики производительности получены офлайн на выпущенном коде, и как замер продакшен-сервиса DeepSeek их читать не стоит.

  • На двух многоходовых диалогах, в режиме рассуждений с бюджетом 75 и без рассуждений, recipe 0.2.0 совпал с эталонным энкодером байт в байт. Рассуждения прошлых ходов он так же отбрасывает. Версия 0.2.0 вышла 20 октября в 05:15 UTC и меняет публичный API каждого крейта и Python-пакета.
  • Производительность показана двумя графиками «пропускная способность против задержки», чисел в тексте README нет. Prefill мерили на 4 GPU SM100, decode на 64, каждый раз в пределах одного scale-up домена. Судя по скриптам, это два отдельных офлайн-прогона одного движка, и балансировщик с KV-кэшем для них не нужен. Это чтение скриптов, воспроизвести замер мы не могли.
  • SWA Bounded Replay (ограничение повторной обработки при скользящем окне внимания) по умолчанию выключен. DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE стоит в off, у DEEPINFER_YOCO_PREFILL_KEEP_TOKENS значения по умолчанию нет. Значение 140 из README придётся задать самим, а меньше окна плюс максимального отката код не примет.
  • Только на Nvidia работают две функции: batch-invariant inference и детерминированное сэмплирование. На NPU движок требует, чтобы флаг batch-invariant был выключен.
Путь обработкиlowmediumhighmax
Старый Jinja-шаблон (сентябрь)506275100
deepseek-recipe 0.2.0507575100
Эталонный encoding.py (1017)50ошибка75100

Эталонный энкодер чекпойнта 1017 отвергает «medium», и в тексте ошибки прямо сказано, что он принимает: целое число от 1 до 100 или одно из значений low, high, max.

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите, чтобы оставить комментарий. Он появится после модерации.