Быстрый старт с vLLM: высокопроизводительный инференс LLM — 2026

Быстрый вывод LLM с помощью OpenAI API

Содержимое страницы

vLLM — это высокопроизводительный и энергоэффективный движок инференса и сервинга для больших языковых моделей (LLM), разработанный лабораторией Sky Computing Lab при Калифорнийском университете в Беркли (UC Berkeley).

Благодаря революционному алгоритму PagedAttention, vLLM достигает пропускной способности в 14–24 раза выше по сравнению с традиционными методами обслуживания, что делает его предпочтительным выбором для промышленного развертывания LLM. Чтобы узнать, как vLLM соотносится с Ollama, Docker Model Runner, LocalAI и облачными провайдерами — включая компромиссы между стоимостью и инфраструктурой, — см. Хостинг LLM: локальное, самообслуживаемое и облачное сопоставление инфраструктуры.

vllm logo

Что такое vLLM?

vLLM (virtual LLM) — это открытая библиотека для быстрого инференса и сервинга LLM, которая быстро стала отраслевым стандартом для промышленного развертывания. Выпущенная в 2023 году, она ввела PagedAttention — новаторскую технику управления памятью, которая значительно повышает эффективность обслуживания.

Ключевые возможности

Высокая пропускная способность: vLLM обеспечивает пропускную способность в 14–24 раза выше по сравнению с HuggingFace Transformers на том же аппаратном обеспечении. Это значительное преимущество в производительности достигается за счет непрерывного батчинга (continuous batching), оптимизированных ядер CUDA и алгоритма PagedAttention, который устраняет фрагментацию памяти.

Совместимость с OpenAI API: vLLM включает встроенный API-сервер, полностью совместимый с форматом OpenAI. Это позволяет бесшовно мигрировать с OpenAI на самообслуживаемую инфраструктуру без изменения кода приложений. Просто направьте ваш API-клиент на эндпоинт vLLM, и он будет работать прозрачно.

Алгоритм PagedAttention: Основным инновационным элементом производительности vLLM является PagedAttention, который применяет концепцию виртуальной пейджинговой памяти к механизмам внимания. Вместо выделения непрерывных блоков памяти для кэшей KV (что приводит к фрагментации), PagedAttention делит память на блоки фиксированного размера, которые могут выделяться по требованию. Это сокращает потерю памяти до 4 раз и позволяет использовать значительно более крупные размеры батчей.

Непрерывный батчинг (Continuous Batching): В отличие от статического батчинга, где вы ждете завершения всех последовательностей, vLLM использует непрерывный (скользящий) батчинг. Как только одна последовательность завершается, к батчу может добавиться новая. Это максимизирует использование GPU и минимизирует задержку для входящих запросов.

Поддержка нескольких GPU: vLLM поддерживает тензорный параллелизм и конвейерный параллелизм для распределения больших моделей по нескольким GPU. Он может эффективно обслуживать модели, которые не помещаются в память одного GPU, поддерживая конфигурации от 2 до 8+ GPU.

Широкая поддержка моделей: Совместим с популярными архитектурами моделей, включая LLaMA, Mistral, Mixtral, Qwen, Phi, Gemma и многие другие. Поддерживает как инструкционные (instruction-tuned), так и базовые (base) модели из HuggingFace Hub.

Когда использовать vLLM

vLLM excels в определенных сценариях, где его сильные стороны проявляются наиболее ярко:

Промышленные API-сервисы: Когда вам нужно обслуживать LLM для многих пользователей через API, высокая пропускная способность vLLM и эффективный батчинг делают его лучшим выбором. Компании, запускающие чат-боты, помощников по коду или сервисы генерации контента, выигрывают от его способности обрабатывать сотни запросов в секунду.

Нагрузки с высокой конкуренцией (High-Concurrency): Если ваше приложение имеет множество пользователей, одновременно делающих запросы, непрерывный батчинг и PagedAttention в vLLM позволяют обслуживать больше пользователей на том же оборудовании по сравнению с альтернативами.

Оптимизация затрат: Когда стоимость GPU является критичной, превосходная пропускная способность vLLM означает, что вы можете обслуживать тот же трафик с меньшим количеством GPU, что напрямую снижает затраты на инфраструктуру. 4-кратная эффективность памяти от PagedAttention также позволяет использовать более мелкие и дешевые GPU-инстансы.

Развертывание в Kubernetes: Stateless-дизайн vLLM и container-friendly архитектура делают его идеальным для кластеров Kubernetes. Его стабильная производительность под нагрузкой и простота управления ресурсами хорошо интегрируются с облачной инфраструктурой.

Когда НЕ использовать vLLM: Для локальной разработки, экспериментов или сценариев с одним пользователем инструменты вроде Ollama или llama.cpp обеспечивают лучший пользовательский опыт при более простой настройке. Сложность vLLM оправдана, когда вам нужны его преимущества в производительности для промышленных нагрузок.

Как установить vLLM

Предварительные требования

Перед установкой vLLM убедитесь, что ваша система соответствует этим требованиям:

  • GPU: NVIDIA GPU с вычислительной возможностью 7.0+ (V100, T4, A10, A100, H100, серия RTX 20/30/40)
  • CUDA: Версия 11.8 или выше
  • Python: 3.8 до 3.11
  • VRAM: Минимум 16 ГБ для 7B моделей, 24 ГБ+ для 13B, 40 ГБ+ для более крупных моделей
  • Драйвер: NVIDIA driver 450.80.02 или новее

Установка через pip

Самый простой метод установки — использование pip. Это работает в системах с CUDA 11.8 или новее:

# Create a virtual environment (recommended)
python3 -m venv vllm-env
source vllm-env/bin/activate

# Install vLLM
pip install vllm

# Verify installation
python -c "import vllm; print(vllm.__version__)"

Для систем с различными версиями CUDA установите соответствующий wheel:

# For CUDA 12.1
pip install vllm==0.4.2+cu121 -f https://github.com/vllm-project/vllm/releases

# For CUDA 11.8
pip install vllm==0.4.2+cu118 -f https://github.com/vllm-project/vllm/releases

Установка с Docker

Docker обеспечивает самый надежный метод развертывания, особенно для промышленного использования:

# Pull the official vLLM image
docker pull vllm/vllm-openai:latest

# Run vLLM with GPU support
docker run --runtime nvidia --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model mistralai/Mistral-7B-Instruct-v0.2

Флаг --ipc=host важен для конфигураций с несколькими GPU, так как он обеспечивает надлежащую межпроцессную коммуникацию.

Сборка из исходного кода

Для последних возможностей или кастомных модификаций, соберите из исходного кода:

git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .

Быстрый старт с vLLM

Запуск вашей первой модели

Запустите vLLM с моделью, используя интерфейс командной строки:

# Download and serve Mistral-7B with OpenAI-compatible API
python -m vllm.entrypoints.openai.api_server \
    --model mistralai/Mistral-7B-Instruct-v0.2 \
    --port 8000

vLLM автоматически скачает модель с HuggingFace Hub (если она не кеширована) и запустит сервер. Вы увидите вывод, указывающий на готовность сервера:

INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

Отправка API-запросов

После запуска сервера вы можете отправлять запросы, используя Python-клиент OpenAI или curl:

Использование curl:

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "mistralai/Mistral-7B-Instruct-v0.2",
        "prompt": "Explain what vLLM is in one sentence:",
        "max_tokens": 100,
        "temperature": 0.7
    }'

Использование Python-клиента OpenAI:

from openai import OpenAI

# Point to your vLLM server
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"  # vLLM doesn't require authentication by default
)

response = client.completions.create(
    model="mistralai/Mistral-7B-Instruct-v0.2",
    prompt="Explain what vLLM is in one sentence:",
    max_tokens=100,
    temperature=0.7
)

print(response.choices[0].text)

Chat Completions API:

response = client.chat.completions.create(
    model="mistralai/Mistral-7B-Instruct-v0.2",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is PagedAttention?"}
    ],
    max_tokens=200
)

print(response.choices[0].message.content)

Расширенная конфигурация

vLLM предлагает множество параметров для оптимизации производительности:

python -m vllm.entrypoints.openai.api_server \
    --model mistralai/Mistral-7B-Instruct-v0.2 \
    --port 8000 \
    --gpu-memory-utilization 0.95 \  # Use 95% of GPU memory
    --max-model-len 8192 \            # Maximum sequence length
    --tensor-parallel-size 2 \        # Use 2 GPUs with tensor parallelism
    --dtype float16 \                 # Use FP16 precision
    --max-num-seqs 256                # Maximum batch size

Объяснение ключевых параметров:

  • --gpu-memory-utilization: Сколько памяти GPU использовать (0.90 = 90%). Более высокие значения позволяют создавать более крупные батчи, но оставляют меньше запаса на пиковые нагрузки памяти.
  • --max-model-len: Максимальная длина контекста. Снижение этого значения экономит память для более крупных батчей.
  • --tensor-parallel-size: Количество GPU, на которые распределить модель.
  • --dtype: Тип данных для весов (float16, bfloat16 или float32). FP16 обычно оптимален.
  • --max-num-seqs: Максимальное количество последовательностей для обработки в батче.

vLLM против Ollama

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

Для подробного руководства по принятию решений, охватывающего сигналы миграции, этапы планирования, настройку Docker Compose и практический чек-лист, см. Ollama to vLLM: Когда мигрировать ваш локальный LLM-сервер.

vLLM против Docker Model Runner

Docker недавно представил Model Runner (ранее GenAI Stack) как свое официальное решение для локального разворачивания ИИ-моделей. Как он сравнивается с vLLM?

Философия архитектуры

Docker Model Runner стремится стать “Docker для ИИ” — простым, стандартизированным способом запускать ИИ-модели локально с такой же легкостью, как запуск контейнеров. Он абстрагирует сложность и предоставляет единообразный интерфейс для разных моделей и фреймворков.

vLLM — это специализированный движок инференса, сосредоточенный исключительно на обслуживании LLM с максимальной производительностью. Это инструмент низкого уровня, который вы контейнеризируете с Docker, а не полноценная платформа.

Настройка и начало работы

Установка Docker Model Runner проста для пользователей Docker:

docker model pull llama3:8b
docker model run llama3:8b

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

vLLM требует более первоначальной настройки (Python, CUDA, зависимости) или использования готовых образов Docker:

docker pull vllm/vllm-openai:latest
docker run --runtime nvidia --gpus all vllm/vllm-openai:latest --model <model-name>

Характеристики производительности

vLLM обеспечивает превосходную пропускную способность для многопользовательских сценариев благодаря PagedAttention и непрерывному батчингу. Для промышленных API-сервисов, обрабатывающих сотни запросов в секунду, оптимизации vLLM обеспечивают пропускную способность в 2–5 раз лучше, чем у общих подходов к обслуживанию.

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

Поддержка моделей

Docker Model Runner предоставляет курируемую библиотеку моделей с доступом к популярным моделям в одну команду. Он поддерживает несколько фреймворков (не только LLM), включая Stable Diffusion, Whisper и другие ИИ-модели, что делает его более универсальным для разных ИИ-нагрузок.

vLLM специализируется на инференсе LLM с глубокой поддержкой трансформерных языковых моделей. Он поддерживает любой LLM, совместимый с HuggingFace, но не распространяется на другие типы ИИ-моделей, такие как генерация изображений или распознавание речи.

Промышленное развертывание

vLLM испытан в промышленных условиях в таких компаниях, как Anthropic, Replicate и многие другие, обслуживающие миллиарды токенов ежедневно. Его характеристики производительности и стабильность под высокой нагрузкой делают его де-факто стандартом для промышленного обслуживания LLM.

Docker Model Runner новее и позиционирует себя скорее для сценариев разработки и локального тестирования. Хотя он может обслуживать промышленный трафик, ему не хватает подтвержденной истории и оптимизаций производительности, которые требуются для промышленных развертываний.

Экосистема интеграций

vLLM интегрируется с инструментами промышленной инфраструктуры: Kubernetes-операторами, метриками Prometheus, Ray для распределенного обслуживания и обширной совместимостью с OpenAI API для существующих приложений.

Docker Model Runner естественным образом интегрируется с экосистемой Docker и Docker Desktop. Для команд, уже стандартизированных на Docker, эта интеграция обеспечивает целостный опыт, но предлагает меньше специализированных функций обслуживания LLM.

Когда использовать каждый

Используйте vLLM для:

  • Промышленных LLM API-сервисов
  • Развертываний с высокой пропускной способностью и многопользовательским доступом
  • Облачных развертываний, чувствительных к стоимости, требующих максимальной эффективности
  • Сред окружений Kubernetes и cloud-native
  • Когда вам нужна проверенная масштабируемость и производительность

Используйте Docker Model Runner для:

  • Локальной разработки и тестирования
  • Запуска различных типов ИИ-моделей (не только LLM)
  • Команд, глубоко инвестировавших в экосистему Docker
  • Быстрых экспериментов без настройки инфраструктуры
  • Учебных и образовательных целей

Гибридный подход: Многие команды разрабатывают с Docker Model Runner локально для удобства, а затем разворачивают с vLLM в промышленной среде для производительности. Образы Docker Model Runner также могут использоваться для запуска контейнеров vLLM, комбинируя оба подхода.

Лучшие практики промышленного развертывания

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

Создайте готовое к промышленной эксплуатации конфигурацию Docker Compose:

version: '3.8'

services:
  vllm:
    image: vllm/vllm-openai:latest
    runtime: nvidia
    environment:
      - CUDA_VISIBLE_DEVICES=0,1
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
      - ./logs:/logs
    ports:
      - "8000:8000"
    command: >
      --model mistralai/Mistral-7B-Instruct-v0.2
      --tensor-parallel-size 2
      --gpu-memory-utilization 0.90
      --max-num-seqs 256
      --max-model-len 8192
    restart: unless-stopped
    shm_size: '16gb'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 2
              capabilities: [gpu]

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

Разверните vLLM на Kubernetes для промышленного масштаба:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vllm-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: vllm
  template:
    metadata:
      labels:
        app: vllm
    spec:
      containers:
      - name: vllm
        image: vllm/vllm-openai:latest
        args:
          - --model
          - mistralai/Mistral-7B-Instruct-v0.2
          - --tensor-parallel-size
          - "2"
          - --gpu-memory-utilization
          - "0.90"
        resources:
          limits:
            nvidia.com/gpu: 2
        ports:
        - containerPort: 8000
        volumeMounts:
        - name: cache
          mountPath: /root/.cache/huggingface
      volumes:
      - name: cache
        hostPath:
          path: /mnt/huggingface-cache
---
apiVersion: v1
kind: Service
metadata:
  name: vllm-service
spec:
  selector:
    app: vllm
  ports:
  - port: 80
    targetPort: 8000
  type: LoadBalancer

Мониторинг и наблюдаемость

vLLM предоставляет метрики Prometheus для мониторинга:

import requests

# Get metrics
metrics = requests.get("http://localhost:8000/metrics").text
print(metrics)

Ключевые метрики для мониторинга:

  • vllm:num_requests_running - Активные запросы
  • vllm:gpu_cache_usage_perc - Использование кэша KV
  • vllm:time_to_first_token - Метрика задержки
  • vllm:time_per_output_token - Скорость генерации

Настройка производительности

Оптимизация использования памяти GPU: Начните со значения --gpu-memory-utilization 0.90 и корректируйте в зависимости от наблюдаемого поведения. Более высокие значения позволяют создавать более крупные батчи, но несут риск ошибок OOM (Out of Memory) во время пиков трафика.

Настройка максимальной длины последовательности: Если в вашем случае не требуется полная длина контекста, уменьшите --max-model-len. Это высвобождает память для более крупных батчей. Например, если вам нужен только контекст 4K, установите --max-model-len 4096 вместо использования максимального значения модели (часто 8K-32K).

Выбор соответствующей квантизации: Для моделей, которые это поддерживают, используйте квантованные версии (8-бит, 4-бит), чтобы уменьшить объем памяти и увеличить пропускную способность:

--quantization awq  # For AWQ quantized models
--quantization gptq # For GPTQ quantized models

Включение кэширования префиксов: Для приложений с повторяющимися промптами (например, чат-ботами с системными сообщениями), включите кэширование префиксов:

--enable-prefix-caching

Это кеширует KV-значения для общих префиксов, снижая вычисления для запросов, разделяющих один и тот же префикс промпта.

Устранение распространенных неполадок

Ошибки “Память исчерпана” (Out of Memory)

Симптомы: Сервер падает с ошибками CUDA out of memory.

Решения:

  • Уменьшите --gpu-memory-utilization до 0.85 или 0.80
  • Уменьшите --max-model-len, если это позволяет ваш случай
  • Уменьшите --max-num-seqs, чтобы снизить размер батча
  • Используйте квантованную версию модели
  • Включите тензорный параллелизм для распределения по большему количеству GPU

На одиночной карте на 16 ГБ большинство таких ошибок OOM можно проследить до бюджета KV-кэша, а не только до весов — KV Cache on 16 GB GPUs охватывает точную формулу, тип данных FP8 KV-кэша и компромиссы кэширования префиксов за --max-model-len и --max-num-seqs, прежде чем вы прибегнете к более мелкой модели.

Низкая пропускная способность

Симптомы: Сервер обрабатывает меньше запросов, чем ожидалось.

Решения:

  • Увеличьте --max-num-seqs, чтобы разрешить более крупные батчи
  • Увеличьте --gpu-memory-utilization, если у вас есть запас
  • Проверьте, не является ли CPU узким местом с помощью htop – рассмотрите более быстрые CPU
  • Проверьте использование GPU с помощью nvidia-smi – должно быть 95%+
  • Включите FP16, если используете FP32: --dtype float16

Медленное время первого токена

Симптомы: Высокая задержка перед началом генерации.

Решения:

  • Используйте более мелкие модели для приложений, критичных к задержке
  • Включите кэширование префиксов для повторяющихся промптов
  • Уменьшите --max-num-seqs, чтобы приоритизировать задержку над пропускной способностью
  • Рассмотрите спекулятивное декодирование для поддерживаемых моделей
  • Оптимизируйте конфигурацию тензорного параллелизма

Ошибки загрузки модели

Симптомы: Сервер не запускается, не может загрузить модель.

Решения:

  • Убедитесь, что имя модели точно соответствует формату HuggingFace
  • Проверьте сетевое подключение к HuggingFace Hub
  • Убедитесь, что на диске достаточно места в ~/.cache/huggingface
  • Для моделей с ограниченным доступом (gated models), установите переменную окружения HF_TOKEN
  • Попробуйте загрузить вручную с помощью huggingface-cli download <model>

Продвинутые функции

Спекулятивное декодирование (Speculative Decoding)

vLLM поддерживает спекулятивное декодирование, где меньшая модель черновика предлагает токены, которые более крупная целевая модель верифицирует. Это может ускорить генерацию в 1,5–2 раза. Для комплексного руководства по методам спекулятивного декодирования — моделям черновиков, EAGLE-3, P-EAGLE и n-gram — см. Speculative Decoding: Быстрый инференс без потери качества.

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-70b-chat-hf \
    --speculative-model meta-llama/Llama-2-7b-chat-hf \
    --num-speculative-tokens 5

Адаптеры LoRA

Обслуживайте несколько адаптеров LoRA поверх базовой модели без загрузки нескольких полных моделей:

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-7b-hf \
    --enable-lora \
    --lora-modules sql-lora=./path/to/sql-adapter \
                   code-lora=./path/to/code-adapter

Затем укажите, какой адаптер использовать для каждого запроса:

response = client.completions.create(
    model="sql-lora",  # Use the SQL adapter
    prompt="Convert this to SQL: Show me all users created this month"
)

Обслуживание Multi-LoRA

Обслуживание Multi-LoRA в vLLM позволяет хостить десятки дообученных адаптеров с минимальными затратами памяти. Это идеально подходит для обслуживания клиент-специфичных или задачно-специфичных вариантов моделей:

# Request with specific LoRA adapter
response = client.chat.completions.create(
    model="meta-llama/Llama-2-7b-hf",
    messages=[{"role": "user", "content": "Write SQL query"}],
    extra_body={"lora_name": "sql-lora"}
)

Кэширование префиксов (Prefix Caching)

Включите автоматическое кэширование префиксов, чтобы избежать повторного вычисления KV-кэша для повторяющихся префиксов промптов:

--enable-prefix-caching

Это особенно эффективно для:

  • Чат-ботов с фиксированными системными промптами
  • RAG-приложений с постоянными шаблонами контекста
  • Few-shot промптов, повторяющихся между запросами

Кэширование префиксов может сократить время до первого токена на 50-80% для запросов, разделяющих префиксы промптов.

Примеры интеграции

Интеграция LangChain

from langchain.llms import VLLMOpenAI

llm = VLLMOpenAI(
    openai_api_key="EMPTY",
    openai_api_base="http://localhost:8000/v1",
    model_name="mistralai/Mistral-7B-Instruct-v0.2",
    max_tokens=512,
    temperature=0.7,
)

response = llm("Explain PagedAttention in simple terms")
print(response)

Интеграция LlamaIndex

from llama_index.llms import VLLMServer

llm = VLLMServer(
    api_url="http://localhost:8000/v1",
    model="mistralai/Mistral-7B-Instruct-v0.2",
    temperature=0.7,
    max_tokens=512
)

response = llm.complete("What is vLLM?")
print(response)

Приложение FastAPI

from fastapi import FastAPI
from openai import AsyncOpenAI

app = FastAPI()
client = AsyncOpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

@app.post("/generate")
async def generate(prompt: str):
    response = await client.completions.create(
        model="mistralai/Mistral-7B-Instruct-v0.2",
        prompt=prompt,
        max_tokens=200
    )
    return {"result": response.choices[0].text}

Бенчмарки производительности

Данные о производительности в реальных условиях помогают проиллюстрировать преимущества vLLM:

Сравнение пропускной способности (Mistral-7B на GPU A100):

  • vLLM: ~3,500 токенов/секунду с 64 одновременными пользователями
  • HuggingFace Transformers: ~250 токенов/секунду с той же конкурентностью
  • Ollama: ~1,200 токенов/секунду с той же конкурентностью
  • Результат: vLLM обеспечивает 14-кратное улучшение по сравнению с базовыми реализациями

Эффективность памяти (LLaMA-2-13B):

  • Стандартная реализация: 24 ГБ VRAM, 32 одновременных последовательности
  • vLLM с PagedAttention: 24 ГБ VRAM, 128 одновременных последовательностей
  • Результат: 4-кратное количество одновременных запросов при той же памяти

Задержка под нагрузкой (Mixtral-8x7B на 2xA100):

  • vLLM: P50 задержка 180 мс, P99 задержка 420 мс при 100 req/s
  • Стандартное обслуживание: P50 задержка 650 мс, P99 задержка 3,200 мс при 100 req/s
  • Результат: vLLM сохраняет стабильную задержку под высокой нагрузкой

Эти бенчмарки демонстрируют, почему vLLM стал де-факто стандартом для промышленного обслуживания LLM, где производительность имеет значение.

Анализ затрат

Понимание последствий выбора vLLM для затрат:

Сценарий: Обслуживание 1M запросов/день

С стандартным обслуживанием:

  • Требуется: 8x A100 GPU (80 ГБ)
  • Стоимость AWS: ~$32/час × 24 × 30 = $23,040/месяц
  • Стоимость за 1M токенов: ~$0.75

С vLLM:

  • Требуется: 2x A100 GPU (80 ГБ)
  • Стоимость AWS: ~$8/час × 24 × 30 = $5,760/месяц
  • Стоимость за 1M токенов: ~$0.19
  • Экономия: $17,280/месяц (снижение на 75%)

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

Взаимосвязь с OpenAI

Переход с OpenAI на самообслуживаемый vLLM прост благодаря совместимости API:

До (OpenAI):

from openai import OpenAI

client = OpenAI(api_key="sk-...")
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Hello"}]
)

После (vLLM):

from openai import OpenAI

client = OpenAI(
    base_url="https://your-vllm-server.com/v1",
    api_key="your-internal-key"  # If you added authentication
)
response = client.chat.completions.create(
    model="mistralai/Mistral-7B-Instruct-v0.2",
    messages=[{"role": "user", "content": "Hello"}]
)

Необходимы только два изменения: обновите base_url и имя model. Весь остальной код остается идентичным.

Из Ollama в vLLM

Ollama использует другой формат API. Базовое изменение на стороне клиента — переключение с REST-эндпоинта Ollama на OpenAI-совместимый API vLLM:

API Ollama:

import requests

response = requests.post('http://localhost:11434/api/generate',
    json={'model': 'llama2', 'prompt': 'Why is the sky blue?'})

Эквивалент в vLLM:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.completions.create(
    model="meta-llama/Llama-2-7b-chat-hf",
    prompt="Why is the sky blue?"
)

Для подробного руководства по миграции, охватывающего выбор моделей, чат-шаблонов, поэтапной миграции и практического чек-листа, см. Ollama to vLLM: Когда мигрировать ваш локальный LLM-сервер.

Из HuggingFace Transformers в vLLM

Миграция прямого использования Python:

HuggingFace:

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")

inputs = tokenizer("Hello", return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])

vLLM:

from vllm import LLM, SamplingParams

llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.2")
sampling_params = SamplingParams(max_tokens=100)

outputs = llm.generate("Hello", sampling_params)
result = outputs[0].outputs[0].text

Python API vLLM проще и намного быстрее для пакетного инференса.

Будущее vLLM

vLLM продолжает стремительное развитие с увлекательными функциями в дорожной карте:

Дизагрегированное обслуживание (Disaggregated Serving): Разделение префилла (обработки промпта) и декодинга (генерации токенов) на разных GPU для оптимизации использования ресурсов. Префилл ограничен вычислениями, тогда как декодинг ограничен памятью, поэтому выполнение их на специализированном оборудовании повышает эффективность.

Мультинодальный инференс (Multi-Node Inference): Распределение очень больших моделей (100B+ параметров) по нескольким машинам, позволяя обслуживать модели, слишком большие для одноузловых конфигураций.

Улучшенная квантизация: Поддержка новых форматов квантизации, таких как GGUF (используется llama.cpp) и улучшенная интеграция AWQ/GPTQ для лучшей производительности с квантованными моделями.

Улучшения спекулятивного декодирования: Более эффективные модели черновиков и адаптивные стратегии спекуляции для достижения более высокого ускорения без потери точности.

Оптимизации внимания: FlashAttention 3, ring attention для чрезвычайно длинных контекстов (100K+ токенов) и другие передовые механизмы внимания.

Лучшее покрытие моделей: Расширение поддержки для мультимодальных моделей (vision-language models), аудио-моделей и специализированных архитектур по мере их появления.

Проект vLLM поддерживает активное развитие с вкладом от UC Berkeley, Anyscale и более широкого сообщества open-source. По мере того, как разворачивание LLM становится более критичным для промышленных систем, роль vLLM как стандарта производительности продолжает расти. Для более широкого сравнения vLLM с другими локальной и облачной LLM-инфраструктурой, проверьте наше Хостинг LLM: локальное, самообслуживаемое и облачное сопоставление инфраструктуры.

Полезные ссылки

Связанные статьи на этом сайте

  • Local LLM Hosting: Complete 2026 Guide - Ollama, vLLM, LocalAI, Jan, LM Studio & More - Комплексное сравнение 12+ локальных инструментов хостинга LLM, включая детальный анализ vLLM наряду с Ollama, LocalAI, Jan, LM Studio и другими. Охватывает зрелость API, поддержку вызова инструментов, совместимость с GGUF и бенчмарки производительности, чтобы помочь выбрать правильное решение.

  • Ollama Cheatsheet - Полное справочное руководство и шпаргалка по командам Ollama, охватывающие установку, управление моделями, использование API и лучшие практики для локального разворачивания LLM. Обязательно для разработчиков, использующих Ollama наряду с vLLM или вместо него.

  • llama.cpp Quickstart with CLI and Server - Легковесный C/C++ инференс для GGUF-моделей с llama-cli и OpenAI-совместимым llama-server. Идеально, когда вам нужен детальный контроль, оффлайн-развертывание или минимальный стек без Python.

  • Docker Model Runner vs Ollama: Which to Choose? - Подробное сравнение Docker Model Runner и Ollama для локального разворачивания LLM, анализ производительности, поддержки GPU, совместимости API и случаев использования. Помогает понять конкурентную среду, в которой работает vLLM.

  • Docker Model Runner Cheatsheet: Commands & Examples - Практическая шпаргалка по Docker Model Runner с командами и примерами для разворачивания ИИ-моделей. Полезно для команд, сравнивающих подход Docker со специализированными возможностями обслуживания LLM в vLLM.

Внешние ресурсы и документация

  • vLLM GitHub Repository - Официальный репозиторий vLLM с исходным кодом, исчерпывающей документацией, руководствами по установке и активными обсуждениями сообщества. Необходимый ресурс для отслеживания последних функций и устранения неполадок.

  • vLLM Documentation - Официальная документация, охватывающая все аспекты vLLM от базовой настройки до продвинутой конфигурации. Включает справочник API, руководства по настройке производительности и лучшие практики развертывания.

  • PagedAttention Paper - Научная статья, вводящая алгоритм PagedAttention, обеспечивающий эффективность vLLM. Необходимое чтение для понимания технических инноваций, лежащих в основе преимуществ производительности vLLM.

  • vLLM Blog - Официальный блог vLLM с анонсами релизов, бенчмарками производительности, техническими глубинными разборами и кейс-стади сообщества из промышленных развертываний.

  • HuggingFace Model Hub - Комплексный репозиторий открытых LLM, которые работают с vLLM. Ищите модели по размеру, задаче, лицензии и характеристикам производительности, чтобы найти правильную модель для вашего случая использования.

  • Ray Serve Documentation - Документация фреймворка Ray Serve для построения масштабируемых, распределенных развертываний vLLM. Ray предоставляет передовые функции, такие как автомасштабирование, обслуживание многомоделей и управление ресурсами для промышленных систем.

  • NVIDIA TensorRT-LLM - TensorRT-LLM от NVIDIA для высокооптимизированного инференса на GPU NVIDIA. Альтернатива vLLM с разными стратегиями оптимизации, полезная для сравнения и понимания ландшафта оптимизации инференса.

  • OpenAI API Reference - Официальная документация API OpenAI, с которым совместим API vLLM. Ссылайтесь на это при создании приложений, которые должны работать как с OpenAI, так и с самообслуживаемыми эндпоинтами vLLM взаимозаменяемо.

Подписаться

Получайте новые материалы про системы, инфраструктуру и AI engineering.