DeepSeek Researchers представляют ‘nano-vLLM’: легковесная реализация vLLM
Новая разработка от команды DeepSeek, проект под названием ‘nano-vLLM’, представляет собой минималистичную и эффективную реализацию vLLM (виртуальная большая языковая модель). Этот инструмент создан для тех, кто ценит простоту, скорость и прозрачность. Написанный с нуля на Python, nano-vLLM удачно сочетает производительность и элегантность кода, состоящего всего из примерно 1200 строк. Несмотря на небольшие размеры, он демонстрирует сопоставимую скорость вывода с оригинальным движком vLLM в большинстве оффлайн-сценариев.
Ключевые особенности nano-vLLM
- Быстрый оффлайн вывод: Nano-vLLM обеспечивает скорость вывода, близкую к vLLM, что делает его идеальным для исследовательских экспериментов, небольших развертываний или образовательных целей.
- Чистый и читаемый код: Реализация в 1200 строк Python-кода без скрытых абстракций и лишних слоев зависимостей делает его отличным инструментом для изучения систем вывода LLM.
- Набор оптимизаций:
- Кэширование префиксов: Переиспользует состояния кэша ключ-значение при повторении подсказок, уменьшая избыточные вычисления.
- Тензорный параллелизм: Распределяет слои модели по нескольким GPU для масштабирования вывода на аппаратном уровне.
- Компиляция в Torch: Использует torch.compile() для слияния операций и снижения накладных расходов Python.
- Графы CUDA: Предварительно захватывает и переиспользует графы выполнения GPU, минимизируя задержки запуска.
Архитектура nano-vLLM
Архитектура nano-vLLM интуитивно понятна:
- Управление токенизацией и вводом: Обрабатывает разбор подсказок и преобразование идентификаторов токенов с использованием токенизаторов Hugging Face.
- Обертка модели: Загружает LLM на основе трансформеров с использованием PyTorch, применяя обертки для тензорного параллелизма.
- Управление кэшем KV: Обрабатывает динамическое выделение и извлечение кэша с поддержкой переиспользования префиксов.
- Двигатель выборки: Реализует выборку top-k/top-p, масштабирование температуры и другие стратегии декодирования.
Сценарии использования и ограничения
Nano-vLLM лучше всего подходит для:
- Исследователей, создающих пользовательские приложения LLM.
- Разработчиков, изучающих оптимизации на уровне вывода.
- Преподавателей, обучающих инфраструктуре глубокого обучения.
- Инженеров, развертывающих вывод на системах с низкими ресурсами.
Однако, как минималистская реализация, она не включает многие продвинутые функции, доступные в полноценной системе:
- Нет динамической пакетной обработки или планирования запросов.
- Нет потоковой генерации токен за токеном для реального времени.
- Ограниченная поддержка для нескольких одновременных пользователей.
Заключение
Nano-vLLM представляет собой продуманный баланс между простотой и производительностью. Хотя он не предназначен для замены полнофункциональных двигателей вывода на производстве, он служит быстрым, понятным и модульным альтернативным решением. Для практиков, стремящихся понять основы современного вывода LLM или создать свои собственные варианты с чистого листа, nano-vLLM предлагает надежную отправную точку.
Доступна поддержка основных оптимизаций и четкая структура дизайна, что делает его потенциально любимым инструментом для образовательного использования и легковесных развертываний LLM. Узнайте больше на странице GitHub проекта. Все кредиты за эту разработку принадлежат исследователям данного проекта.
Следите за нами в Twitter и не забудьте присоединиться к нашему сообществу более 100 тысяч подписчиков на ML SubReddit и подписаться на нашу рассылку.