На одной RTX 4090 с моделью на 7–8B Ollama и vLLM работают примерно одинаково быстро, пока запрос один. Разрыв появляется, когда запросы приходят пачкой: в опубликованном в сентябре 2026 года тесте с 64 одновременными запросами vLLM выдал примерно втрое больше суммарной пропускной способности, чем Ollama. Hugging Face TGI по-прежнему работает, но с марта 2026 года, когда его репозиторий был архивирован, находится в режиме поддержки, и сама Hugging Face теперь отправляет людей к vLLM и SGLang.
Так что выбор сводится к тому, сколько людей обращаются к модели одновременно. Один пользователь, скрипт или небольшой внутренний инструмент — Ollama, потому что с ней меньше всего возни. Публичный API или пакетные задачи с множеством запросов в работе — vLLM. Новое развёртывание на TGI я бы начинать не стал.
Откуда цифры
В прежней версии этой страницы были данные о пропускной способности, задержках и VRAM, поданные как наши собственные измерения на RTX 4090. Мы не смогли связать их ни с воспроизводимым запуском, ни с опубликованным источником, поэтому убрали. Одна из причин для сомнений: старые цифры для одного потока в FP16 превышали то, что позволяет пропускная способность памяти RTX 4090 (см. следующий раздел).
Теперь каждая цифра ниже привязана к тому, кто её опубликовал, с указанием оборудования и модели. Там, где чистого сравнения на RTX 4090 никто не публиковал (например, для TGI), я так и пишу, а не заполняю пробел.
Основные источники:
- ComputingForGeeks, 18 сентября 2026 года. Ollama, vLLM и llama.cpp на RTX 4090, L40S и RTX 5090. Модель: Qwen2.5-7B-Instruct, AWQ 4 бита для vLLM и GGUF Q4_K_M для Ollama и llama.cpp. Фиксированный промпт на 512 токенов, температура 0, до 256 выходных токенов, контекст 4096 токенов на слот, 64 параллельных слота.
- Red Hat Developer, 8 августа 2025 года. Ollama 0.9.2 против vLLM 0.9.1 на одном A100 40 ГБ, Llama 3.1 8B Instruct в FP16, от 1 до 256 одновременных пользователей, замеры через GuideLLM.
- BentoML, 5 июня 2024 года. vLLM 0.4.2, TGI 2.0.4 и другие на A100 80 ГБ с Llama 3 8B Instruct.
- Сводная таблица CUDA от llama.cpp. Скорость одного потока для Llama 2 7B Q4_0 на множестве карт, включая RTX 4090.
Только первый тест проводился на RTX 4090 со всеми движками из этой статьи, кроме TGI. Остальные показывают ту же картину на дата-центровых картах.
Один запрос: потолок задаёт карта
Когда GPU генерирует токены для одного запроса, на каждый токен ему приходится читать из памяти все веса модели. Поэтому верхний предел задаёт пропускная способность памяти, а не движок.
У RTX 4090 24 ГБ GDDR6X с пропускной способностью 1008 ГБ/с. У Llama 3.1 8B 8,03 миллиарда параметров.
- В FP16 это 8,03 × 2 байта ≈ 16,1 ГБ весов. 1008 ÷ 16,1 ≈ 63 токена в секунду — максимум для одного запроса.
- Тег
llama3.1:8bв Ollama по умолчанию — это Q4_K_M, загрузка на 4,9 ГБ. 1008 ÷ 4,9 ≈ 205 токенов в секунду — максимум.
Реальные движки не дотягивают до этих потолков. Сводная таблица llama.cpp показывает, что RTX 4090 генерирует 186 токенов в секунду с Llama 2 7B в Q4_0 (189 с flash attention). ComputingForGeeks намерили около 174 токенов в секунду на один запрос с Qwen2.5-7B в 4 битах и выяснили, что vLLM, llama.cpp и Ollama на 4090 «примерно» одинаковы. (На L40S и RTX 5090 их сборка Ollama декодировала примерно вдвое медленнее llama.cpp, так что проверяйте на своей карте и версии.)
Если пользователь один, движок выбирайте по удобству, а квантизацию — по скорости. Переход с FP16 на 4 бита примерно утраивает потолок. Смена движка его почти не сдвигает.
Много запросов: решает батчинг
Когда в работе много запросов, GPU может прочитать веса один раз и использовать их для целого батча. Теперь важно, насколько хорошо движок собирает батчи и как он управляет KV-кэшем (памятью каждого запроса о разговоре на данный момент).
На RTX 4090 vLLM выдал суммарно 6623 токена в секунду на 64 запроса, сервер llama.cpp — 2391, Ollama — 2018. Ollama для этого теста настроили честно: OLLAMA_NUM_PARALLEL=64, num_ctx 4096 и включённый flash attention. vLLM запускали с --quantization awq_marlin --max-model-len 4096 --gpu-memory-utilization 0.90. Авторы также сообщили время до первого токена около 8–12 мс для llama.cpp и 16–25 мс для vLLM, а на L40S и RTX 5090 оно было выше всего у Ollama.
Тест Red Hat на A100 с весами в FP16 показывает то же направление. vLLM достиг пика в 793 токена в секунду; Ollama с настройками по умолчанию выдала 41. После того как лимит параллельных запросов Ollama подняли до 32, «максимального стабильного значения», она всё равно не догнала vLLM ни на одном уровне конкурентности. Время до первого токена у неё «резко росло с числом пользователей», а задержка между токенами на пиковой нагрузке давала «огромные всплески».
Две оговорки, прежде чем цитировать это кому-то. Во-первых, сравнение ComputingForGeeks не вполне равноценное: vLLM работал с весами AWQ, остальные — с GGUF, и сборки разные. Во-вторых, это суммы по всем запросам. Каждый из 64 пользователей видит на vLLM около 6623 ÷ 64 ≈ 103 токенов в секунду, что всё ещё вполне комфортно, а на Ollama — около 2018 ÷ 64 ≈ 32.
Что с TGI
Text Generation Inference был продакшен-сервером Hugging Face с непрерывным батчингом, Flash Attention и Paged Attention, тензорным параллелизмом, метриками Prometheus и трассировкой OpenTelemetry. Технически он был в одном классе с vLLM.
Его статус изменился. Документация TGI теперь начинается со слов: «text-generation-inference теперь в режиме поддержки. Впредь мы будем принимать pull request’ы только с мелкими исправлениями ошибок, улучшениями документации и несложными задачами по поддержке». Рекомендуют они «vllm, SGLang, а также локальные движки с совместимостью, такие как llama.cpp или MLX». 21 марта 2026 года репозиторий на GitHub был архивирован и переведён в режим только для чтения.
Свежих опубликованных бенчмарков TGI на RTX 4090 я не нашёл. Ближайшее заслуживающее доверия сравнение — от BentoML на A100 80 ГБ, июнь 2024 года: с Llama 3 8B vLLM достиг «2300–2500 токенов в секунду, как и TGI», а лучшее время до первого токена на каждом протестированном уровне конкурентности было у vLLM. Это было два года и много релизов назад для обоих движков, так что считайте это историей.
Если TGI уже обслуживает ваш продакшен-трафик, он продолжит работать. Но для нового развёртывания вы выбрали бы сервер, который не получит ни новых архитектур моделей, ни работы над производительностью. На одной RTX 4090 vLLM покрывает всё, что умел TGI.
VRAM на карте с 24 ГБ
Движки очень по-разному обращаются с памятью, и от этого зависит, что ещё может работать на той же карте.
vLLM сразу забирает большую часть карты. Значение --gpu-memory-utilization по умолчанию — 0.9, так что на RTX 4090 с 24 ГБ при старте он занимает около 21,6 ГБ, какого бы размера ни была модель. Всё, что не заняли веса, уходит под KV-кэш. С Llama 3.1 8B в FP16 (около 16,1 ГБ) остаётся примерно 5,5 ГБ на KV-кэш, активации и CUDA-графы, что ограничивает длину контекста и число одновременных запросов. С весами AWQ в 4 бита (сборка ComputingForGeeks занимала около 5,6 ГБ) большая часть из 21,6 ГБ уходит под KV-кэш — за счёт этого он и тянет 64 запроса. Не рассчитывайте запустить рядом вторую программу на GPU, если не уменьшите эту долю.
Ollama выделяет память под каждую модель и контекст. Модель llama3.1:8b в Q4_K_M занимает 4,9 ГБ плюс KV-кэш под окно контекста. Контекст по умолчанию Ollama выбирает по объёму VRAM: 4k при меньше чем 24 ГиБ, 32k от 24 до 48 ГиБ, 256k от 48 ГиБ. RTX 4090 находится ровно на границе 24 ГиБ (nvidia-smi показывает чуть меньше 24 ГиБ), так что проверьте через ollama ps, какой контекст вы на самом деле получили, или задайте его сами. Параллельные слоты это умножают: пример из документации — «контекст 2K с 4 параллельными запросами даст контекст 8K и дополнительное выделение памяти». Если памяти мало, помогает квантизация KV-кэша: q8_0 занимает примерно половину памяти от f16 по умолчанию, а q4_0 — около четверти. Кроме того, Ollama по умолчанию может держать загруженными до трёх моделей на GPU, если они помещаются, — это удобно для карты, которая переключается между моделями. Какие модели вообще помещаются на карты с 8, 12, 16 и 24 ГБ, — в статье какие AI-модели помещаются в VRAM вашего GPU.
TGI тоже заранее выделяет память под непрерывный батчинг, как и vLLM. Актуальной цифры VRAM для 8B-модели на 4090, на которую можно сослаться, я не нашёл, поэтому приводить её не буду.
Квантизация и форматы моделей
| Ollama | vLLM | TGI | |
|---|---|---|---|
| Основной формат | GGUF (например, Q4_K_M) | Hugging Face safetensors | Hugging Face safetensors |
| Варианты в 4 бита | Варианты GGUF Q4 | AWQ, GPTQ, bitsandbytes, INT4 W4A16 | AWQ, GPTQ, Marlin, EXL2, bitsandbytes NF4/FP4 |
| 8 бит / FP8 | GGUF Q8_0 | FP8 W8A8 на Ada (RTX 4090) и Hopper; INT8 | bitsandbytes 8-bit, EETQ, fp8 |
| GGUF | Родной | Поддерживается | Не указан |
| Квантизация KV-кэша | q8_0, q4_0 | Есть | Здесь не рассматривается |
RTX 4090 — карта на архитектуре Ada (SM 8.9), так что FP8 в vLLM на ней работает. Веса в FP8 занимают вдвое меньше памяти, чем в FP16: около 8 ГБ для 8B-модели — золотая середина между FP16 и 4 битами на одной 4090.
Библиотека моделей Ollama поставляет заранее квантизованные GGUF-теги, так что думать об этом почти не приходится: ollama pull llama3.1:8b даёт Q4_K_M. С vLLM вы выбираете заранее квантизованный чекпойнт на Hugging Face или сами передаёте флаг квантизации.
OpenAI-совместимые серверы и установка
Все три дают HTTP API в стиле OpenAI, так что SDK OpenAI и большинство чат-инструментов работают после замены base URL.
| Ollama | vLLM | TGI | |
|---|---|---|---|
| Адрес по умолчанию | localhost:11434/v1 | localhost:8000/v1 | Порт 80 контейнера (часто проброшен на 8080) |
| Chat completions | Да | Да | Да (Messages API, с 1.4.0) |
| Другие эндпоинты OpenAI | completions, models, embeddings, responses | completions, embeddings, responses, audio | Здесь не рассматривается |
| Установка | Один скрипт | Пакет pip | Docker-образ |
Как запустить 8B-модель, по документации каждого проекта:
# Ollama
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
# vLLM (Llama 3.1 is gated: accept the license on Hugging Face and set HF_TOKEN)
pip install vllm
vllm serve meta-llama/Llama-3.1-8B-Instruct
# TGI
docker run --gpus all --shm-size 1g -p 8080:80 -v $PWD/data:/data \
ghcr.io/huggingface/text-generation-inference:3.3.5 \
--model-id meta-llama/Llama-3.1-8B-Instruct
С Ollama возни меньше всего, и с большим отрывом. Она сама скачивает модели, работает с квантизованными файлами, загружает и выгружает модели и одинаково ведёт себя на ноутбуке и на арендованном сервере. В OpenAI-слое Ollama есть пробелы: нет logprobs и tool_choice в chat completions, а изображения нужно передавать в base64, а не ссылками. vLLM требует рабочего окружения CUDA и Python и большего числа флагов для настройки, но именно его Hugging Face теперь рекомендует вместо TGI. TGI прост, если у вас уже есть Docker, — с оговоркой про режим поддержки выше.
Какой движок для какой задачи
Ollama — для одного человека, скрипта, ассистента для программирования, внутреннего инструмента на несколько пользователей или машины, которая переключается между несколькими моделями. Установка занимает минуты, а скорость на одном запросе на 4090 не хуже, чем у любого другого движка.
vLLM — когда много запросов приходит одновременно: публичный API, многопользовательский чат или пакетные задачи, которые можно гнать по 32 или 64 сразу. Опубликованные цифры показывают примерно втрое большую суммарную пропускную способность, чем у Ollama, на RTX 4090 при 64 одновременных запросах и намного больше на A100. У него же самая широкая поддержка квантизации и API.
TGI — только если он у вас уже работает. Для новых задач сама Hugging Face советует vLLM или SGLang.
При почасовой аренде стоимость следует из пропускной способности. Возьмём миллион выходных токенов на RTX 4090 по $0,31 в час — самой низкой цене Vast.ai по требованию, которую показывал getdeploying.com в сентябре 2026 года, — и цифры ComputingForGeeks:
- По одному запросу, 174 токена/с: 1 000 000 ÷ 174 ≈ 5750 с ≈ 1,6 часа ≈ $0,50.
- 64 одновременно на Ollama, 2018 токенов/с: ≈ 496 с ≈ $0,04.
- 64 одновременно на vLLM, 6623 токена/с: ≈ 151 с ≈ $0,01.
Здесь предполагается, что GPU загружен всё время. Если у вас в работе всегда только один запрос, батчинг ничего не даёт, и выбор движка на счёт не влияет. Если у вас очередь задач — он меняет счёт на порядок. Та же логика в сравнении с API с оплатой за токены — в статье почасовой GPU или оплата за токены.
Где здесь GPUFlow
Установщик GPUFlow для провайдеров по умолчанию ставит Ollama, и агент GPUFlow пересылает запросы ей, так что там обычно применим столбец Ollama из таблиц выше. Вы арендуете OpenAI-совместимый API-ключ (https://gpuflow.app/v1, эндпоинты /v1/chat/completions и /v1/models, стриминг поддерживается) к модели на GPU провайдера. Оплачивается время — посекундно с минимумом 1 минута, а не токены.
Чего на GPUFlow сделать нельзя: выбрать движок, поменять его настройки или запустить свой код. SSH и командной оболочки нет. Чтобы воспроизвести бенчмарки выше или запустить vLLM самостоятельно, арендуйте машину с доступом на Vast.ai или RunPod (как они соотносятся). Чтобы использовать модель, которую обслуживает Ollama, из приложения, ничего не устанавливая, загляните в каталог GPUFlow и в статью как использовать ключ в популярных инструментах.
Если вы дообучили свою модель и решаете, как её обслуживать, руководство по дообучению приватной LLM описывает шаг перед этим.
Источники
Всё проверено в сентябре 2026 года.
- Ollama, vLLM и llama.cpp на RTX 4090, L40S и RTX 5090: ComputingForGeeks (18 сентября 2026 года)
- Ollama против vLLM на A100 40 ГБ: Red Hat Developer (8 августа 2025 года)
- vLLM, TGI и другие на A100 80 ГБ: BentoML, Benchmarking LLM Inference Backends (5 июня 2024 года)
- Сводная таблица CUDA от llama.cpp: github.com/ggml-org/llama.cpp/discussions/15013
- Память и пропускная способность RTX 4090: обзор TechPowerUp
- Параметры и лицензия Llama 3.1 8B: карточка модели на Hugging Face
- Ollama: FAQ (параллельные запросы, KV-кэш), длина контекста, совместимость с OpenAI, тег llama3.1:8b
- vLLM: OpenAI-совместимый сервер, квантизация, аргументы движка (gpu-memory-utilization)
- TGI: документация и уведомление о режиме поддержки, репозиторий на GitHub (архивирован), Messages API, квантизация
- Цена аренды RTX 4090: getdeploying.com
- GPUFlow: быстрый старт с API, начало работы для провайдеров