Abstract

vLLM — движок для инференса LLM на GPU. Быстрее Ollama в 3–5 раз за счёт PagedAttention и continuous batching. Даёт OpenAI-совместимый API — работает с любым клиентом, который умеет openai-compatible.

Почему не Ollama

Ollama удобна для начала, но:

  • Медленнее — нет continuous batching
  • Жрёт больше VRAM на те же модели
  • Нет prefix caching — каждый запрос прогоняет system prompt заново

vLLM решает все три проблемы. Ollama оставляем только для эмбеддингов (nomic-embed-text).

Запуск в Docker

Модель лежит в /models/<model> внутри контейнера (bind-mount с хоста). Важно: model ID = путь к модели, а не HuggingFace репо.

services:
  vllm:
    image: vllm/vllm-openai:<version>
    ports:
      - "localhost:<port>"
    volumes:
      - /path/to/model:/models/<model>
    command:
      - --model=/models/<model>
      - --quantization=fp8
      - --gpu-memory-utilization=0.96
      - --max-model-len=8128
      - --enforce-eager
      - --enable-auto-tool-choice
      - --tool-call-parser=gemma4
      - --reasoning-parser=gemma4

--enforce-eager обязателен на малом VRAM

Без него CUDA graphs съедят лишнюю память. --gpu-memory-utilization=0.96 отдаёт почти всё VRAM под KV cache.

Сеть в Docker

Если vLLM и клиент в разных Docker сетях — контейнер не достучится. Решение:

docker network connect app_default vllm-server

После этого в клиенте используем http://vllm-server:<port>/v1 вместо http://host.docker.internal:<port>/v1.

Команду надо повторять после пересоздания контейнера

Docker не сохраняет ad-hoc подключения к сетям. При docker-compose up --force-recreate vLLM снова потеряет доступ.

Tool calling

vLLM 0.24+ поддерживает нативные парсеры для разных моделей. Для Gemma 4:

--enable-auto-tool-choice --tool-call-parser=gemma4

Не используйте hermes парсер для не-Hermes моделей

Он ломает tool calls. Без --tool-call-parser vLLM отдаёт 400 на любой запрос с tool_choice.

Проверка

curl -s http://localhost:<port>/v1/models
 
curl -s http://localhost:<port>/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"/models/<model>","messages":[{"role":"user","content":"Привет"}],"max_tokens":50}'

Связанные статьи

  • — мультиагентный фреймворк, работает поверх vLLM
  • — ИИ-диджей на vLLM + Piper TTS
  • — мультиагентный бот на vLLM + CrewAI
  • — контейнеры, сети, bind-mounts

Связанные


← mrgnl