vLLM – один из самых подходящих движков для простого запуска LLM: он предоставляет команду vllm serve
для развертывания на одной машине. Однако для развертывания в продакшене требуются дополнительные продвинутые функции, которых у него нет. Такие возможности есть у TorchServe
:
- Пользовательские метрики.
- Версионирование моделей.
- Гибкие обработчики, позволяющие легко интегрировать генерацию с дополнением из базы знаний (RAG) и защитные механизмы вроде Llama Guard.
Поэтому логично объединить движок vLLM с TorchServe для создания полноценного решения по запуску LLM в продакшене.
Процесс развертывания включает:
1. Сборка Docker-образа
2. Запуск контейнера с моделью
3. Тестирование
При развертывании с помощью vLLM с TorchServe:
- Веса модели хранятся в локальной папке
data
. - Используется скрипт
ts.llm_launcher
для упрощения запуска. - Поддерживается автоматическое распараллеливание на нескольких GPU.
- Возможно создание
model archive
для доступа к расширенным функциям.
Важно отметить, что простой запуск через ts.llm_launcher
не дает доступа ко всем возможностям TorchServe. Для использования продвинутых функций (RAG, версионирование) требуется создание model archive
, что сложнее, зато обеспечивает большую гибкость, надежность и масштабируемость в продакшене. Прежде, чем мы рассмотрим, как это сделать, стоит разобраться в особенностях интеграции vLLM и TorchServe.
Интеграция движка vLLM в TorchServe
vLLM предлагает множество продвинутых функций, среди которых:
- PagedAttention – эффективное управление памятью.
- Непрерывная пакетная обработка.
- Быстрое выполнение модели через CUDA Graphs.
- Поддержка различных методов квантования – GPTQ, AWQ, INT4/INT8/FP8.
- Интеграция с методами эффективной настройки параметров (LoRA).
- Поддержка моделей с различными архитектурами (Llama*, Mistral).
*Meta и все ее продукты, включая Llama, признаны экстремистскими и запрещены на территории РФ.
Раньше TorchServe использовал синхронный режим, ожидая либо определенное время (batch_delay), либо достаточное количество запросов (batch_size). Теперь он может работать в асинхронном режиме, и запросы сразу передаются в бэкенд для обработки vLLM. Интеграция vLLM в TorchServe позволяет эффективно использовать сильные стороны этих инструментов, обеспечивая оптимальное использование ресурсов и гибкие возможности масштабирования. Вот основные преимущества интеграции:
Оптимизация памяти
- vLLM получает полный контроль над тем, какие запросы обрабатывать.
- Использует PagedAttention для оптимального комбинирования запросов разной длины.
- Работает как «Тетрис», заполняя неиспользуемые участки памяти.
Распределенный вывод
- Поддержка работы на нескольких GPU на одном узле.
- Использование распараллеливания для больших моделей.
- Кастомный параллелизм для запуска единого процесса бэкенда.
Гибкость настройки
- VLLMHandler позволяет быстро развертывать любую совместимую модель.
- Возможность добавления пользовательских шагов предобработки и постобработки.
- Поддержка потокового режима для немедленной отправки токенов.
Для развертывания LLM используется отдельный Dockerfile, основанный на GPU-образе TorchServe и оптимизированный для минимизации размера образа.
Пошаговый гайд
Подготовка
После установки TorchServe нужно установить vLLM:
Загрузка весов модели (опционально)
Веса сохраняются в $HF_HOME
. Можно пропустить этот шаг – тогда vLLM скачает веса при запуске.
Конфигурация модели
Создайте YAML-файл с параметрами фронтенда и обработчика:
Создание архива модели
Здесь используется формат no-archive для удобства экспериментов, веса модели не включаются в архив:
Развертывание
Здесь аутентификация отключена только для локального тестирования, не забудьте включить ее в продакшене:
Тестирование
В интеграции используется OpenAI-совместимый формат API, поддерживается как потоковый stream=1, так и пакетный stream=0 режимы ответов:
Заключение
Главные преимущества этой интеграции:
- Гибкая конфигурация через YAML.
- Поддержка распределенного вывода на нескольких GPU.
- Совместимость с OpenAI API.
- Возможность потоковой генерации ответов.
- Простота развертывания в Docker/Kubernetes.
В планах разработчиков – реализация поддержки мульти-узлового вывода и создание готового Docker-образа для максимального упрощения процесса развертывания.
С какими сложностями вы сталкивались при развертывании LLM в продакшене? Поделитесь своим опытом и расскажите, как решали эти проблемы.
🤖 Для тех, кто хочет разобраться в машинном обучении
Курс «Базовые модели ML и приложения» — ваш компактный гид в мир машинного обучения.
Что тебя ждет:
- Концентрированные знания от практика из Stripe
- Фокус на трех ключевых областях: ансамбли, рекомендательные системы, нейросети
- Баланс теории и практики для решения реальных задач
Особенности курса:
- Доступное изложение сложных концепций
- Видеолекции и текстовые материалы
- Пожизненный доступ к контенту
Комментарии