Содержание
В 2026 году запустить LLM на своём сервере — уже не экзотика, а рутина. Собственники бизнеса задают этот вопрос не айтишникам, а друг другу: «мы хотим свою нейросеть, не зависеть от OpenAI и не платить за каждый токен».
Но здесь возникает развилка. LLM — это не бинарник, который можно просто скачать и запустить. Нужен движок инференса — программа, которая загружает модель в память, обрабатывает запросы и выдаёт ответы. Два главных претендента сегодня — Ollama и vLLM. Первый — для тех, кто хочет «взял и запустил». Второй — для тех, кому нужно выдерживать сотни параллельных запросов в продакшене.
Разберём, чем они отличаются на самом деле, когда каждый оправдан, и почему выбор не сводится к «какой лучше». В этой статье — без рекламных обещаний, только бенчмарки, архитектурные детали и реальные кейсы.
Зачем вообще нужен движок инференса
HHапрямую загрузить LLM через PyTorch — просто. model.generate() — и модель работает. Проблема в том, что для реальной нагрузки такой подход не годится. PyTorch аллоцирует под каждый запрос полный контекст, не умеет группировать запросы в батч и тратит гигабайты на хранение KV-кэша для каждого пользователя отдельно. В результате — низкая пропускная способность, дикий расход VRAM и никакого API для интеграции.
Движок инференса решает три задачи. Оптимизация памяти — через PagedAttention (vLLM), радикс-внимание (SGLang), квантизацию (llama.cpp). Ускорение генерации — через continuous batching, FlashAttention, асинхронную обработку. API-прослойку — OpenAI-совместимый эндпоинт, вызов функций, интеграция с Open WebUI, n8n, LangChain. Туториалы по сборке стека есть, например, в нашем гайде по локальным AI-агентам.
Ollama: простота любой ценой
Ollama — это C++-клиент на базе llama.cpp, обёрнутый в удобный CLI и HTTP API. Его главное достижение — установка в одну команду. curl -fsSL https://ollama.com/install.sh | sh — и у вас на сервере работает LLM. Второй командой ollama pull llama3.3:70b скачивается модель. Третьей — начинается чат. Всё.
За этой простотой скрывается несколько архитектурных ограничений. Ollama не использует continuous batching в понимании vLLM — она объединяет запросы, но без динамического управления очередью. На Хабре собрали бенчмарки: на одной H100 с Llama 3.1 8B Ollama выдерживает около 12 параллельных запросов до деградации latency. После 20 — время ответа растёт линейно, потому что движок начинает ставить запросы в очередь и обрабатывать последовательно.
Ещё один нюанс — формат моделей. Ollama работает исключительно с GGUF (квантизованные модели от llama.cpp). Это даёт огромную экономию памяти — модель 70B в Q4 занимает ~40 ГБ вместо 140 ГБ в FP16. Но GGUF не поддерживает все архитектурные фичи: например, вызов функций (tool calling) в Ollama работает с ограничениями, а multi-GPU балансировка — через костыли.
Ollama не предназначена для продакшена с высокой нагрузкой. Это инструмент для разработки, прототипирования и личного использования. Если к вашему API стучится 10 пользователей — Ollama справится. Если 50 — начнутся таймауты. Если 200 — нужен vLLM.
vLLM: продакшен-стандарт
vLLM — это Python-фреймворк от UC Berkeley, построенный вокруг алгоритма PagedAttention. Вместо того чтобы хранить KV-кэш для каждого запроса в непрерывном блоке памяти (как делает PyTorch), vLLM разбивает его на страницы по 16-32 токена и управляет ими как виртуальная память в ОС. Эффект — от 14 до 24 раз выше пропускная способность по сравнению с обычным инференсом, при том же объёме VRAM.
Но главное преимущество vLLM — continuous batching. В классическом батчинге модель ждёт, пока наберётся полный батч запросов, потом обрабатывает их все разом, потом ждёт следующий батч. В continuous batching движок добавляет новые запросы прямо в текущий батч по мере их поступления — как конвейер на заводе. Red Hat в своих тестах 2026 года показала разрыв в 9x при 8 параллельных пользователях между vLLM и Ollama на одной и той же модели Llama 3 70B на H100.
Кроме того, vLLM поддерживает:
- Multi-GPU и multi-node (Tensor Parallelism, Pipeline Parallelism)
- Все основные форматы: Safetensors, GPTQ, AWQ, FP8
- OpenAI-совместимый API с полноценным вызовом функций (tool calling)
- Prefix caching (кэширование общих префиксов запросов — экономия до 60% времени для системных промптов)
- Speculative decoding (маленькая «модель-черновик» ускоряет большую на 2-3x)
- LoRA-адаптеры на лету, без перезагрузки
Плата за это — сложность. Установка vLLM требует Python-окружения, CUDA-тулкита, понимания параметров GPU. Ошибка в --tensor-parallel-size или неверно выбранный тип квантизации — и модель не влезает в VRAM, или latency взлетает в 2 раза.
Данные: синтетические бенчмарки на основе публичных тестов Red Hat, serverflow.ru и Habr. Реальные цифры зависят от модели, квантизации и конфигурации GPU.
Бенчмарки: цифры, которые решают
Сравнивать движки «в лоб» некорректно — они оптимизированы под разные сценарии. Но есть три метрики, которые объективно показывают разницу.
Throughput (токенов/с). При одном пользователе vLLM быстрее Ollama на 15-20% за счёт оптимизированных CUDA-ядер. AI Bot Direct приводит данные: при 8 параллельных пользователях разрыв — 9x. При 128 — 15x. Причина — continuous batching: vLLM никогда не простаивает, пока хотя бы один запрос в очереди. Ollama обрабатывает запросы почти последовательно.
Latency (время первого токена, TTFT). Здесь vLLM проигрывает при малой нагрузке — из-за накладных расходов на планировщик continuous batching. Ollama даёт первый токен быстрее при 1-2 пользователях. При 10+ — vLLM отыгрывает и держит latency стабильной, тогда как у Ollama она растёт линейно.
Использование VRAM. Ollama с GGUF Q4_K_M потребляет на 30-40% меньше памяти, чем vLLM с той же моделью в FP16 или AWQ. Это преимущество для серверов с ограниченной видеопамятью (RTX 3090/4090 с 24 ГБ). Но vLLM эффективнее использует доступную память через PagedAttention — больше запросов в одном батче без переполнения.
| Метрика | Ollama | vLLM |
|---|---|---|
| Throughput (1 user) | 185 tok/s | 220 tok/s |
| Throughput (128 users) | 480 tok/s | 7 100 tok/s |
| TTFT (1 user) | ~150 мс | ~220 мс |
| TTFT (32 users) | ~1 200 мс | ~280 мс |
| Расход VRAM (8B Q4) | ~6 ГБ | ~10 ГБ (FP16) |
| Multi-GPU | Ограниченно | TP + PP из коробки |
Кому что подходит — конкретные сценарии
Вместо абстрактного «выбирайте по задачам» — четыре реальных сценария, с которыми к нам приходят клиенты.
Сценарий 1: Разработчик, который пишет AI-агента для себя. Нужен быстрый старт, модель на коленке, тестирование промптов. Выбор — Ollama. Ставится за 2 минуты, моделей в реестре 300+, API OpenAI-совместимый. Для одного-двух параллельных запросов производительности достаточно. Если потом понадобится продакшен — Ollama можно заменить на vLLM без изменения кода: оба поддерживают одинаковый эндпоинт /v1/chat/completions.
Сценарий 2: Команда из 10-50 человек в корпоративном чате. Open WebUI на Ollama — классическая комбинация. Open WebUI проксирует запросы к Ollama, добавляет RAG, управление пользователями. Работает стабильно до 10-15 одновременных пользователей. Дальше — latency растёт. Тут есть два пути: либо поставить vLLM за Open WebUI (через смену эндпоинта), либо оставить Ollama, но ограничить число одновременных сессий.
Сценарий 3: Продакшен-сервис, который обрабатывает тысячи запросов в час. Клиентский AI-агент поддержки, квалификатор лидов, автоматизация документов. Единственный адекватный выбор — vLLM. Continuous batching даёт стабильную latency при любой нагрузке, tool calling работает нативно, multi-GPU позволяет горизонтально масштабироваться. Подробно про архитектуру таких агентов мы писали в кейсе ИИ-оператора поддержки.
Сценарий 4: Бюджетный сервер без GPU. Только CPU, 32-64 ГБ RAM. Выбор — Ollama с llama.cpp backend (GGUF, Q4 или Q3). vLLM не поддерживает CPU-инференс (только с недавних пор экспериментальный V1 бэкенд, но без гарантий). Альтернатива — llama.cpp без обёртки Ollama, но тогда не будет HTTP API.
Практика: установка и первый запуск
Коротко — как поднять каждый движок на свежей Ubuntu 22.04/24.04 с NVIDIA GPU.
Ollama:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
ollama serve
# API: curl http://localhost:11434/v1/chat/completions
Всё. Open WebUI ставится через Docker: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway ghcr.io/open-webui/open-webui:main. Подробная установка — в отдельном гайде по Open WebUI.
vLLM:
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-7B-Instruct \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.90 \
--max-model-len 8192 \
--port 8000
# API: curl http://localhost:8000/v1/chat/completions
Основные параметры: --tensor-parallel-size — число GPU для тензорного параллелизма. --gpu-memory-utilization — доля VRAM под модель (0.80-0.95). --max-model-len — максимальная длина контекста. --enforce-eager — отключить CUDA graphs (помогает при малых объёмах VRAM).
Для Docker:
docker run --runtime nvidia --gpus all \
-p 8000:8000 \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct
Если модель не влезает в VRAM — используйте квантизацию: pip install vllm[awq] и флаг --quantization awq.
Итог
Выбор между Ollama и vLLM — это не технологический вопрос, а вопрос бюджета и нагрузки. Если вы разрабатываете AI-агента для себя или тестируете гипотезу — Ollama даст результат за 5 минут. Если агент идёт в продакшен и обрабатывает запросы реальных пользователей — vLLM окупит время на настройку за первую же неделю работы.
При этом не обязательно выбирать раз и навсегда. Современный стек позволяет начинать с Ollama, а потом прозрачно переключаться на vLLM через Open WebUI, продолжать через n8n или LangChain — API остаётся совместимым. Это не блокирующее решение.
На практике мы в N202 используем оба движка: Ollama на этапе разработки и тестирования агентов, vLLM — когда отдаём клиенту готовый продукт с SLA. Альтернативы тоже есть — SGLang быстрее vLLM на батчах за счёт радикс-внимания, llama.cpp оптимальнее Ollama для CPU, Triton от NVIDIA — для enterprise-инсталляций. Но стартовать с Ollama → vLLM — самый надёжный путь без vendor lock.