Добавить в корзинуПозвонить
Найти в Дзене
Библиотека программиста

🚀🤖 Как развернуть LLM с помощью vLLM и TorchServe

Хочешь запустить большую языковую модель в продакшене, но не знаешь, как совместить простоту развертывания с промышленной надежностью? Комбинация vLLM и TorchServe решает эту задачу. Она обеспечивает как простой запуск, так и продвинутые возможности для масштабирования. Этот материал взят из нашей еженедельной email-рассылки, посвященной ИИ. Подпишитесь, чтобы быть в числе первых, кто получит дайджест. 📧 Подписаться (function () { let link = document .getElementById ("27597fb0-2799-44e7-a1e4-24b624262865-https://proglib.io/w/f1df5b2d-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href);
Оглавление

Хочешь запустить большую языковую модель в продакшене, но не знаешь, как совместить простоту развертывания с промышленной надежностью? Комбинация vLLM и TorchServe решает эту задачу. Она обеспечивает как простой запуск, так и продвинутые возможности для масштабирования.

Этот материал взят из нашей еженедельной email-рассылки, посвященной ИИ. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.

📧 Подписаться

(function () { let link = document .getElementById ("27597fb0-2799-44e7-a1e4-24b624262865-https://proglib.io/w/f1df5b2d-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

vLLM – один из самых подходящих движков для простого запуска LLM: он предоставляет команду vllm serve для развертывания на одной машине. Однако для развертывания в продакшене требуются дополнительные продвинутые функции, которых у него нет. Такие возможности есть у TorchServe:

  1. Пользовательские метрики.
  2. Версионирование моделей.
  3. Гибкие обработчики, позволяющие легко интегрировать генерацию с дополнением из базы знаний (RAG) и защитные механизмы вроде Llama Guard.

Поэтому логично объединить движок vLLM с TorchServe для создания полноценного решения по запуску LLM в продакшене.

Процесс развертывания включает:

1. Сборка Docker-образа

2. Запуск контейнера с моделью

3. Тестирование

При развертывании с помощью vLLM с TorchServe:

  1. Веса модели хранятся в локальной папке data.
  2. Используется скрипт ts.llm_launcher для упрощения запуска.
  3. Поддерживается автоматическое распараллеливание на нескольких GPU.
  4. Возможно создание model archive для доступа к расширенным функциям.

Важно отметить, что простой запуск через ts.llm_launcher не дает доступа ко всем возможностям TorchServe. Для использования продвинутых функций (RAG, версионирование) требуется создание model archive, что сложнее, зато обеспечивает большую гибкость, надежность и масштабируемость в продакшене. Прежде, чем мы рассмотрим, как это сделать, стоит разобраться в особенностях интеграции vLLM и TorchServe.

Интеграция движка vLLM в TorchServe

vLLM предлагает множество продвинутых функций, среди которых:

  1. PagedAttention – эффективное управление памятью.
  2. Непрерывная пакетная обработка.
  3. Быстрое выполнение модели через CUDA Graphs.
  4. Поддержка различных методов квантования – GPTQ, AWQ, INT4/INT8/FP8.
  5. Интеграция с методами эффективной настройки параметров (LoRA).
  6. Поддержка моделей с различными архитектурами (Llama*, Mistral).

*Meta и все ее продукты, включая Llama, признаны экстремистскими и запрещены на территории РФ.

Раньше TorchServe использовал синхронный режим, ожидая либо определенное время (batch_delay), либо достаточное количество запросов (batch_size). Теперь он может работать в асинхронном режиме, и запросы сразу передаются в бэкенд для обработки vLLM. Интеграция vLLM в TorchServe позволяет эффективно использовать сильные стороны этих инструментов, обеспечивая оптимальное использование ресурсов и гибкие возможности масштабирования. Вот основные преимущества интеграции:

Оптимизация памяти

  1. vLLM получает полный контроль над тем, какие запросы обрабатывать.
  2. Использует PagedAttention для оптимального комбинирования запросов разной длины.
  3. Работает как «Тетрис», заполняя неиспользуемые участки памяти.

Распределенный вывод

  1. Поддержка работы на нескольких GPU на одном узле.
  2. Использование распараллеливания для больших моделей.
  3. Кастомный параллелизм для запуска единого процесса бэкенда.

Гибкость настройки

  1. VLLMHandler позволяет быстро развертывать любую совместимую модель.
  2. Возможность добавления пользовательских шагов предобработки и постобработки.
  3. Поддержка потокового режима для немедленной отправки токенов.

Для развертывания LLM используется отдельный Dockerfile, основанный на GPU-образе TorchServe и оптимизированный для минимизации размера образа.

Статья по теме

🤖 ИИ в кармане: 11 лучших инструментов для работы с ИИ-моделями

Пошаговый гайд

Подготовка

После установки TorchServe нужно установить vLLM:

Загрузка весов модели (опционально)

Веса сохраняются в $HF_HOME. Можно пропустить этот шаг – тогда vLLM скачает веса при запуске.

Конфигурация модели

Создайте YAML-файл с параметрами фронтенда и обработчика:

   YAML-файл с параметрами фронтенда и обработчика
YAML-файл с параметрами фронтенда и обработчика

Создание архива модели

Здесь используется формат no-archive для удобства экспериментов, веса модели не включаются в архив:

Развертывание

Здесь аутентификация отключена только для локального тестирования, не забудьте включить ее в продакшене:

Тестирование

В интеграции используется OpenAI-совместимый формат API, поддерживается как потоковый stream=1, так и пакетный stream=0 режимы ответов:

Заключение

Главные преимущества этой интеграции:

  1. Гибкая конфигурация через YAML.
  2. Поддержка распределенного вывода на нескольких GPU.
  3. Совместимость с OpenAI API.
  4. Возможность потоковой генерации ответов.
  5. Простота развертывания в Docker/Kubernetes.

В планах разработчиков – реализация поддержки мульти-узлового вывода и создание готового Docker-образа для максимального упрощения процесса развертывания.

С какими сложностями вы сталкивались при развертывании LLM в продакшене? Поделитесь своим опытом и расскажите, как решали эти проблемы.

***

🤖 Для тех, кто хочет разобраться в машинном обучении

Курс «Базовые модели ML и приложения» — ваш компактный гид в мир машинного обучения.

Что тебя ждет:

  • Концентрированные знания от практика из Stripe
  • Фокус на трех ключевых областях: ансамбли, рекомендательные системы, нейросети
  • Баланс теории и практики для решения реальных задач

Особенности курса:

  • Доступное изложение сложных концепций
  • Видеолекции и текстовые материалы
  • Пожизненный доступ к контенту

Интересно, хочу попробовать

(function () { let link = document .getElementById ("27597fb0-2799-44e7-a1e4-24b624262865-https://proglib.io/w/c995278f-60"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();