Исследователи DeepSeek открыли исходный код личного проекта под названием «nano-vLLM»: облегчённая реализация движка vLLM, созданная с нуля

Исследователи из DeepSeek выпустили интересный личный проект под названием «nano-vLLM» — минималистичную и эффективную реализацию движка vLLM (виртуальная большая языковая модель), разработанную специально для пользователей, которые ценят простоту, скорость и прозрачность. Nano-vLLM написан полностью на Python с нуля и содержит около 1200 строк кода. Несмотря на небольшой размер, он соответствует скорости вывода (inference speed) оригинального движка vLLM во многих автономных сценариях.

Традиционные системы вывода (inference frameworks)

Традиционные системы вывода, такие как vLLM, обеспечивают впечатляющую производительность за счёт внедрения сложных стратегий планирования и оптимизации. Однако они часто сопровождаются большими и сложными кодовыми базами, которые затрудняют понимание, модификацию или развёртывание в ограниченных средах. Nano-vLLM разработан таким образом, чтобы быть лёгким, проверяемым и модульным. Авторы создали его как чистую эталонную реализацию, которая устраняет вспомогательную сложность, сохраняя при этом основные характеристики производительности.

Ключевые особенности

1. Быстрый автономный вывод (Offline Inference).
Nano-vLLM достигает почти паритета с vLLM по скорости автономного вывода. Сосредоточившись на более экономичном конвейере выполнения, он устраняет накладные расходы во время выполнения и упрощает развёртывание, что делает его пригодным для исследовательских экспериментов, небольших развёртываний или образовательных целей.

2. Чистый и читаемый код.
Вся система реализована примерно в 1200 строках кода Python, без скрытых абстракций или избыточных слоёв зависимостей. Это делает его отличным инструментом для изучения того, как устроены системы вывода больших языковых моделей (LLM): шаг за шагом можно увидеть выборку токенов, управление кэшем и параллельное выполнение.

3. Набор инструментов для оптимизации.
Nano-vLLM включает в себя надёжный набор стратегий оптимизации для максимизации пропускной способности:
* Кэширование префиксов (Prefix Caching): повторное использование прошлых состояний кэша «ключ-значение» при повторении запросов, что сокращает объём вычислений.
* Тензорный параллелизм (Tensor Parallelism): распределение слоёв модели по нескольким GPU для масштабирования вывода в соответствии с аппаратными возможностями.
* Компиляция Torch (Torch Compilation): использование torch.compile() для объединения операций и сокращения накладных расходов Python.
* CUDA Graphs: предварительное захват и повторное использование графиков выполнения на GPU, минимизация задержек запуска.

Эти оптимизации, хотя и реализованы минимально, соответствуют методам, используемым в системах производственного масштаба, и обеспечивают реальный прирост производительности на практике.

Обзор архитектуры

Nano-vLLM использует простую архитектуру:
* Токенизатор и обработка входных данных (Tokenizer and Input Handling): управляет разбором запросов и преобразованием идентификаторов токенов с помощью токенизаторов Hugging Face.
* Обёртка модели (Model Wrapper): загружает трансформеры на основе LLM с помощью PyTorch, применяя тензорные параллельные обёртки там, где это необходимо.
* Управление кэшем KV (KV Cache Management): обрабатывает динамическое распределение и извлечение кэша с поддержкой повторного использования префиксов.
* Механизм выборки (Sampling Engine): реализует выборку top-k/top-p, температурное масштабирование и другие стратегии декодирования.

Ограничивая количество движущихся частей, nano-vLLM обеспечивает ясность и отслеживаемость пути выполнения от входного запроса до сгенерированного вывода.

Варианты использования и ограничения

Nano-vLLM лучше всего подходит для:
* исследователей, создающих собственные приложения LLM;
* разработчиков, изучающих оптимизации на уровне вывода;
* преподавателей, обучающих инфраструктуре глубокого обучения;
* инженеров, развёртывающих вывод на периферийных устройствах или в системах с ограниченными ресурсами.

Однако, как минимальная реализация, она не включает многие расширенные функции, которые есть в системах производственного уровня:
* нет динамического пакетирования или планирования запросов;
* нет потоковой передачи/генерации токенов для реального времени;
* ограниченная поддержка нескольких одновременных пользователей.

Эти компромиссы являются преднамеренными и способствуют ясности и производительности кодовой базы в однопоточных автономных сценариях.

Заключение

Nano-vLLM отражает продуманный баланс между простотой и производительностью. Хотя он и не претендует на замену полноценных движков вывода в производстве, он является быстрой, понятной и модульной альтернативой. Для практиков, стремящихся понять основы современного вывода LLM или создать свои собственные варианты с нуля, nano-vLLM предлагает надёжную отправную точку. Благодаря поддержке ключевых оптимизаций и чётко структурированному дизайну, он может стать популярным инструментом для образовательных целей и развёртывания лёгких LLM.

Ознакомьтесь с [GitHub Page](https://github.com/). Вся заслуга в этом исследовании принадлежит исследователям этого проекта. Также подписывайтесь на нас в [Twitter](https://twitter.com/) и присоединяйтесь к нашему [ML SubReddit](https://www.reddit.com/r/MachineLearning/) (более 100 тысяч участников) и подписывайтесь на [наш Newsletter](https://www.marktechpost.com/newsletter/).

Статья «DeepSeek Researchers Open-Sources a Personal Project named ‘nano-vLLM’: A Lightweight vLLM Implementation Built from Scratch» впервые опубликована на [MarkTechPost](https://www.marktechpost.com/).

Источник

Оставьте комментарий