# vLLM или Ollama: какой сервер выбрать для локальной модели

Источник: https://modelium.tech/zhurnal/vllm-ili-ollama/

Ollama удобна для первого локального запуска и работы с моделями через собственный и OpenAI-совместимый API. vLLM ориентирован на обслуживание выбранной модели через сервер и контролируемое тестирование нагрузки. Оба могут отвечать на Chat Completions, но одинаковый HTTP-маршрут не гарантирует одинаковые модели, параметры или скорость: решение зависит от платформы, формата весов и ваших запросов.

**Сверено 3 октября 2026 года** по закреплённым Git-ревизиям Ollama `42e911b` и vLLM `4ac0d0e`. Это сравнение документированных возможностей, а не независимый benchmark Modelium [s1](#src-s1)[s5](#src-s5). Частотность запроса «vllm vs ollama» для России не измерялась.

## vLLM или Ollama: короткий ответ

**Для первого запуска модели и проверки локального чата** сначала разберитесь с [Ollama](/zapusk/ollama/): у неё собственный `/api/chat` на `localhost:11434` и OpenAI-совместимый `/v1/chat/completions`; это разные интерфейсы одного локального сервера, а прямой Ollama Cloud — ещё один, отдельный маршрут [s1](#src-s1)[s2](#src-s2). **Для обслуживания одной выбранной модели и собственного нагрузочного теста** рассмотрите [vLLM](/zhurnal/vllm/): quickstart запускает `vllm serve` с репозиторием модели и открывает Chat Completions на `localhost:8000` [s5](#src-s5). Это выбор по рабочему сценарию, не универсальное утверждение, что один движок быстрее другого. Без одинаковой модели, железа и нагрузки сравнение скоростей бессмысленно.

        

          
        
        
Что проверить

      
    
        
Ollama

      
    
        
vLLM

      
    

`  </tr><tr>
    <td>
    <p>Локальный API</p>
  </td>
<td>
    <p>Нативный <code>/api/chat</code> и часть OpenAI API на <code>/v1/chat/completions</code> <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s2" rel="noopener noreferrer">s2</a></p>
  </td>
<td>
    <p><code>/v1/models</code> и <code>/v1/chat/completions</code> для совместимой модели с chat template <a href="#src-s5" rel="noopener noreferrer">s5</a><a href="#src-s6" rel="noopener noreferrer">s6</a></p>
  </td>

  </tr><tr>
    <td>
    <p>Размещение</p>
  </td>
<td>
    <p>Документация описывает NVIDIA и AMD с конкретными драйверами; работоспособность вашего GPU и версии надо проверить <a href="#src-s4" rel="noopener noreferrer">s4</a></p>
  </td>
<td>
    <p>Базовый путь Linux; CUDA, ROCm, XPU и vLLM-Metal имеют разные условия; Windows — через WSL, а не нативная установка <a href="#src-s5" rel="noopener noreferrer">s5</a><a href="#src-s8" rel="noopener noreferrer">s8</a></p>
  </td>

  </tr><tr>
    <td>
    <p>Несколько запросов</p>
  </td>
<td>
    <p><code>OLLAMA_NUM_PARALLEL</code> и очередь; параллелизм расходует память контекста <a href="#src-s3" rel="noopener noreferrer">s3</a></p>
  </td>
<td>
    <p>Тест нагрузки через <code>vllm bench serve</code> с явными rate и concurrency <a href="#src-s7" rel="noopener noreferrer">s7</a></p>
  </td>

  </tr><tr>
    <td>
    <p>Ключ API</p>
  </td>
<td>
    <p>Локальный Ollama не требует ключа, а значение в OpenAI-клиенте игнорирует; для прямого облака ключ нужен <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s2" rel="noopener noreferrer">s2</a></p>
  </td>
<td>
    <p><code>--api-key</code> защищает не все endpoints; сетевую границу настраивайте отдельно <a href="#src-s6" rel="noopener noreferrer">s6</a></p>
  </td>

  </tr></tbody>
    </table>
  <h2>Подходит ли ваша модель и оборудование?</h2><p>Не выбирайте runtime по одному названию модели. У Ollama клиент запрашивает установленный <strong>тег</strong>, а у vLLM quickstart сервер принимает конкретный идентификатор репозитория Hugging Face и обслуживает одну модель на сервер <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s5" rel="noopener noreferrer">s5</a>. Даже если семейство называется одинаково, это не гарантия одинаковых весов, квантизации, токенизатора и параметров генерации. До сравнения запишите точный тег и ревизию исходных весов, формат, модельный шаблон чата, длину контекста и режим генерации; если нельзя сделать их сопоставимыми, тестируйте пригодность <strong>двух стеков</strong>, а не скорость двух движков при «одинаковых» условиях <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s5" rel="noopener noreferrer">s5</a><a href="#src-s6" rel="noopener noreferrer">s6</a>. Отдельный <a href="/zhurnal/videokarta-dlya-llm/" rel="noopener noreferrer">гайд по видеокарте</a> поможет оценить запас, но размер файла весов не равен минимальной RAM или VRAM.</p><p>Ollama документирует NVIDIA и AMD, однако для каждой карты указывает собственные требования к драйверу/ROCm; не превращайте широкий список GPU в обещание поддержки конкретного ноутбука <a href="#src-s4" rel="noopener noreferrer">s4</a>. У vLLM стартовый quickstart ориентирован на Linux и Python 3.10–3.13. Для AMD ROCm, Intel XPU и Apple Silicon есть отдельные пути; vLLM-Metal на Mac — <strong>отдельный проект</strong> с собственными MLX-моделями, не обычный Linux CUDA-пакет <a href="#src-s5" rel="noopener noreferrer">s5</a>. Нативная Windows не поддерживается, WSL требует проверяемой Linux/GPU-конфигурации <a href="#src-s8" rel="noopener noreferrer">s8</a>. Если важнее достичь первого ответа на имеющемся компьютере, сначала проверьте совместимость доступного вам варианта, а не ориентируйтесь на опубликованные скорости чужих GPU.</p><h2>Совпадает ли интерфейс приложения?</h2><p>Если клиент использует OpenAI Chat Completions, Ollama документирует <code>http://localhost:11434/v1/chat/completions</code>, а vLLM — <code>http://localhost:8000/v1/chat/completions</code> <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s5" rel="noopener noreferrer">s5</a>. Сверьте <em>конкретные</em> параметры запроса: Ollama прямо называет поддержку подмножеством OpenAI API; vLLM требует chat template для чатовой модели, допускает дополнительные параметры и может брать параметры генерации из <code>generation_config.json</code> модели <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s6" rel="noopener noreferrer">s6</a>. Поменять только base URL и объявить приложение совместимым нельзя: проведите тест того же сообщения, структуры ответа, ограничений контекста и нужных вам tool/JSON-возможностей.</p><p>Не смешивайте локальную и облачную Ollama: локальный нативный <code>/api/chat</code> не требует ключа, а прямой <code>https://ollama.com/api</code> — требует. Документация по OpenAI-клиенту специально говорит, что локальный фиктивный ключ игнорируется; это <strong>не</strong> механизм защиты сети <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s2" rel="noopener noreferrer">s2</a>. У vLLM <code>--api-key</code> не охватывает, в частности, <code>/invocations</code>, поэтому не выставляйте сервер наружу только потому, что один маршрут отвечает 401 без токена; используйте закрытый интерфейс и отдельные сетевые ограничения <a href="#src-s6" rel="noopener noreferrer">s6</a>.</p><h2>Как честно сравнить скорость и качество на своём сценарии?</h2><p><strong>Сначала получите два успешных ответа.</strong> По <a href="/zapusk/ollama/" rel="noopener noreferrer">гайду Ollama</a> проверьте установленный тег и ответ локального API; по <a href="/zhurnal/vllm/" rel="noopener noreferrer">гайду vLLM</a> — совпадение ID в <code>/v1/models</code> и ответ <code>/v1/chat/completions</code> <a href="#src-s1" rel="noopener noreferrer">s1</a><a href="#src-s5" rel="noopener noreferrer">s5</a>. Если vLLM сообщает об отсутствии chat template или один из серверов меняет формат ответа, это проблема совместимости, а не результат benchmark <a href="#src-s6" rel="noopener noreferrer">s6</a>. Сохраните OS, устройство, драйвер, точные версии runtime, веса/квант, состояние сети и ошибки. При двух серверах на одном GPU запускайте их последовательно, чтобы не сравнивать разные остатки памяти.</p><p><strong>Затем прогоните один набор задач:</strong> короткие вопросы, длинные документы и, если нужно вашему продукту, параллельные запросы с повторяющимся префиксом. Укажите одинаковые ограничения длины ответа, temperature, streaming и ожидания по точности; отдельно фиксируйте случаи, где веса или формат невозможно сделать равными. Контролируйте прогрев модели и порядок прогонов: у Ollama модель по умолчанию остаётся загруженной после обращения, параметр <code>keep_alive</code> меняет это поведение <a href="#src-s3" rel="noopener noreferrer">s3</a>. В vLLM инструмент <code>vllm bench serve</code> позволяет задать входной поток через <code>--request-rate</code> и число незавершённых запросов через <code>--max-concurrency</code>; не путайте нагрузку «всё сразу» (<code>inf</code> по умолчанию) с обычным потоком клиентов <a href="#src-s7" rel="noopener noreferrer">s7</a>. Для Ollama увеличенный <code>OLLAMA_NUM_PARALLEL</code> расширяет потребность в памяти контекста, а ожидание в очереди и ответ 503 при перегрузке меняют пользовательскую задержку <a href="#src-s3" rel="noopener noreferrer">s3</a>.</p><p>Записывайте долю успешных ответов, точность по заранее проверяемым вопросам, время до первого токена при streaming, полную задержку, пропускную способность, очередь и фактическое использование памяти. Сравнивайте одинаково определённые метрики; benchmark из документации vLLM не является замером Ollama или Modelium <a href="#src-s7" rel="noopener noreferrer">s7</a>. Если один runtime не поддерживает необходимый формат/железо, это решение по совместимости — не повод выдумывать разницу в токенах в секунду.</p><h2>Где выбор остаётся открытым?</h2><p>Если нужен удобный старт на конкретном устройстве, Ollama может сократить путь к первому ответу, но её локальный API сам по себе не доказывает изоляцию приватных данных: отдельно проверьте сетевой выход и режим cloud-модели <a href="#src-s2" rel="noopener noreferrer">s2</a>. Если задача — сервис под однородной нагрузкой, vLLM предлагает серверный API и инструменты измерения, однако требует проверки GPU/backend, весов и шаблона чата для вашего случая <a href="#src-s5" rel="noopener noreferrer">s5</a><a href="#src-s6" rel="noopener noreferrer">s6</a><a href="#src-s7" rel="noopener noreferrer">s7</a>. Никакой из двух вариантов нельзя назвать победителем для всех моделей и платформ без воспроизводимого прогона.</p><p><strong>Следующий шаг:</strong> <a href="/zhurnal/vllm/" rel="noopener noreferrer">откройте гайд по vLLM</a>, проверьте ответ вашего сценария и сохраните его рядом с ответом Ollama; только после этого перенесите тот же набор входов в <a href="/zhurnal/vllm-bench-serve/" rel="noopener noreferrer">протокол нагрузки vLLM</a>. Modelium не запускал оба сервера в сопоставимых условиях и не измерял их производительность.</p>
`

## Источники

1. [Ollama — OpenAI compatibility, закреплённый срез](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/api/openai-compatibility.mdx) — получено 2026-10-03
2. [Ollama — API introduction, закреплённый срез](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/api/introduction.mdx) — получено 2026-10-03
3. [Ollama — FAQ: очередь и параллелизм, закреплённый срез](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/faq.mdx) — получено 2026-10-03
4. [Ollama — Hardware support, закреплённый срез](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/gpu.mdx) — получено 2026-10-03
5. [vLLM — Quickstart, закреплённый срез](https://github.com/vllm-project/vllm/blob/4ac0d0eac25eecc98ff519887f2aa3d659dc75f3/docs/getting_started/quickstart.md) — получено 2026-10-03
6. [vLLM — OpenAI-Compatible Server, закреплённый срез](https://github.com/vllm-project/vllm/blob/4ac0d0eac25eecc98ff519887f2aa3d659dc75f3/docs/serving/online_serving/openai_compatible_server.md) — получено 2026-10-03
7. [vLLM — Benchmark CLI, закреплённый срез](https://github.com/vllm-project/vllm/blob/4ac0d0eac25eecc98ff519887f2aa3d659dc75f3/docs/benchmarking/cli.md) — получено 2026-10-03
8. [vLLM — GPU installation, закреплённый срез](https://github.com/vllm-project/vllm/blob/4ac0d0eac25eecc98ff519887f2aa3d659dc75f3/docs/getting_started/installation/gpu.md) — получено 2026-10-03
