Frog Proger 12 ноября 2024

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

Хочешь запустить большую языковую модель в продакшене, но не знаешь, как совместить простоту развертывания с промышленной надежностью? Комбинация vLLM и TorchServe решает эту задачу. Она обеспечивает как простой запуск, так и продвинутые возможности для масштабирования.
🚀🤖 Как развернуть LLM с помощью vLLM и TorchServe
Этот материал взят из нашей еженедельной email-рассылки, посвященной ИИ. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.

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

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

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

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

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

        docker build --pull . -f docker/Dockerfile.vllm -t ts/vllm
    

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

Meta и все ее продукты, включая Llama, признаны экстремистскими и запрещены на территории РФ.
        docker run --rm -ti --shm-size 10g --gpus all -e HUGGING_FACE_HUB_TOKEN=$token -p 
8080:8080 -v data:/data ts/vllm --model_id meta-llama/Meta-Llama-3.1-70B-Instruct --disable_token_auth

    

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

        curl -X POST -d '{"model":"meta-llama/Meta-Llama-3.1-70B-Instruct", "prompt":"Hello, my name is", "max_tokens": 200}' --header "Content-Type: application/json" "http://localhost:8080/predictions/model/1.0/v1/completions"
    

При развертывании с помощью 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 и оптимизированный для минимизации размера образа.

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

Подготовка

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

        $ pip install -U vllm==0.6.1.post2
    

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

        huggingface-cli download meta-llama/Meta-Llama-3.1-70B-Instruct --exclude original/*
    

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

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

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

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

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

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

        mkdir model_store
torch-model-archiver --model-name vllm --version 1.0 --handler vllm_handler --config-file model_config.yaml --archive-format no-archive --export-path model_store/

    

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

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

        torchserve --start --ncs  --model-store model_store --models vllm --disable-token-auth

    

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

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

        echo '{
  "model": "llama3",
  "prompt": "A robot may not injure a human being",
  "stream": 0
}' | curl --header "Content-Type: application/json"   --request POST --data-binary @-   http://localhost:8080/predictions/vllm/1.0/v1/completions

    

Заключение

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

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

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

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

***

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

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

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

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

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

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

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Go-разработчик
по итогам собеседования
Senior Java Developer
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ