SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-26

Ollama или llama.cpp на VPS: что выбрать

Разбираем разницу между движком llama.cpp и оберткой Ollama для запуска нейросетей. Узнайте, как квантование влияет на потребление RAM и когда лучше запускать бинарный файл.

Ollama против llama.cpp: на каком уровне вы хотите работать?

Ollama и llama.cpp не являются конкурентами в том смысле, который подразумевает вопрос. llama.cpp — это движок инференса: он загружает файл модели и преобразует запрос в токены. Ollama — это менеджер моделей, фоновый демон и HTTP API, работающий поверх этого движка. В README проекта Ollama по-прежнему указан llama.cpp в качестве бэкенда для инференса (проверено 2 августа 2026 года). Таким образом, реальный вопрос заключается в том, на каком уровне вы хотите управлять работой на вашем VPS, а не в том, какой из них быстрее.

Используйте Ollama, если вам нужен сервис, который загружает модели по имени и продолжает работать без вашего участия. Запускайте llama.cpp напрямую, если у вас мало ресурсов и вам нужно выбрать конкретный файл модели, точный размер контекста и количество потоков, так как на небольшом VPS каждый из этих параметров требует оперативной памяти, которой у вас может не быть.

Что представляет собой каждый проект

llama.cpp — это реализация инференса трансформеров на C и C++, построенная на библиотеке ggml. Она считывает файлы GGUF. GGUF (GGML universal file format) — это однофайловый контейнер, содержащий веса, токенизатор и метаданные, необходимые движку для запуска модели. Проект поставляет отдельные бинарные файлы для разных задач. llama-server — это HTTP-сервер, llama-cli — интерактивная командная строка, а llama-bench измеряет пропускную способность. Релизы помечаются номером сборки, а не семантической версией. Текущий тег — b10224, опубликованный 2 августа 2026 года; новые теги выходят почти каждый рабочий день.

Ollama — это программа на Go. Фоновый демон, запускаемый командой ollama serve, загружает модели и отвечает на HTTP-запросы, а клиент командной строки взаимодействует с этим демоном. За обоими компонентами стоит реестр на ollama.com, содержащий готовые к использованию модели. Ollama использует семантическое версионирование; версия v0.32.5 была выпущена 27 июля 2026 года. ollama pull загружает GGUF вместе с шаблоном промпта и набором параметров по умолчанию, а затем сохраняет его в /usr/share/ollama/.ollama/models в Linux. Эти файлы размещаются на корневом диске и занимают по несколько гигабайт каждый, поэтому на VPS с корневым разделом объемом 25 GB стоит заранее узнать что остается после выполнения pull и как перенести директорию с моделями в другое место, прежде чем третья загрузка заполнит диск.

Вся разница заключается в упаковке. Ollama самостоятельно определяет квантование, шаблон и длину контекста, предоставляя вам одно имя для запоминания. llama.cpp ничего не решает за вас и предоставляет флаги.

Ось 1: управление моделью и квантованием

Квантование уменьшает размер каждого веса с 16 или 32 бит до 4, 5 или 8 бит. Именно это позволяет модели с 8 миллиардами параметров поместиться в оперативной памяти обычного VPS. Именование GGUF становится понятным, если знать закономерность: Q4_K_M означает 4-битное K-квантование среднего размера. Более высокое число сохраняет больше точности, но требует больше памяти.

ChartMeta-Llama-3.1-8B-Instruct GGUF file size by quantisation (GiB)
The data behind this chart
[
  {
    "label": "Q2_K",
    "file_size_gib": 2.96
  },
  {
    "label": "Q3_K_M",
    "file_size_gib": 3.74
  },
  {
    "label": "Q4_K_M",
    "file_size_gib": 4.58
  },
  {
    "label": "Q5_K_M",
    "file_size_gib": 5.34
  },
  {
    "label": "Q6_K",
    "file_size_gib": 6.14
  },
  {
    "label": "Q8_0",
    "file_size_gib": 7.95
  }
]

Это опубликованные размеры файлов в репозитории bartowski/Meta-Llama-3.1-8B-Instruct-GGUF на Hugging Face, данные актуальны на 2 августа 2026 года и переведены из байтов в ГиБ. Всего 6 сборок одной модели, при этом самая маленькая занимает 2.96 ГиБ, а самая большая — 7.95 ГиБ. Стандартный вариант по умолчанию, Q4_K_M, занимает 4.58 ГиБ. На VPS с 4 ГиБ ОЗУ этот выбор определяет, загрузится ли модель вообще. Размер — это лишь половина решения, так как доступная по объему строка не всегда является оптимальной для использования, и то, во что на самом деле обходятся Q4, Q8 и fp16 в плане качества ответов, определяет, стоят ли дополнительные гигабайты того, чтобы вы заметили разницу.

В llama.cpp вы указываете имя файла, поэтому выбираете эту строку самостоятельно.

llama-server -m ~/models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
  -c 4096 -t 4 --host 127.0.0.1 --port 8080

-c — это размер контекста в токенах, -t — количество потоков, а -ngl задает число слоев, переносимых на GPU (0 для системы только с CPU). Никакие параметры не подбираются автоматически.

В Ollama квантование привязано к тегу, который вы загружаете, а ollama ls показывает, что именно находится на диске. Если в реестре нет нужной вам сборки, импортируйте GGUF самостоятельно. Создайте Modelfile:

FROM ./Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf
PARAMETER num_ctx 4096

Затем выполните сборку и проверьте результат:

ollama create llama31-q4 -f ./Modelfile
ollama ls

Длина контекста — это настройка, на которой часто ошибаются. Ollama выбирает значение по умолчанию исходя из доступной VRAM, и система без GPU попадает в самую ограниченную категорию: 4096 токенов. Если отправить документ на 20 000 токенов, лишние токены будут отброшены до того, как модель их увидит, поэтому ответ будет уверенно неверным по файлу, который был прочитан лишь наполовину. Увеличьте это значение с помощью OLLAMA_CONTEXT_LENGTH для демона или PARAMETER num_ctx в Modelfile. Если увеличенное окно требуется только для одной задачи, num_ctx можно задать для каждого запроса, а не для всего сервера, что позволит не расходовать лишний кэш на другие задачи демона. В llama.cpp также нет значений по умолчанию, которым стоит доверять. Устанавливайте -c явно и контролируйте то, что вы задаете.

Арифметика памяти, о которой обычно умалчивают

Файл модели — это не единственная статья расходов. KV cache (кэш ключей и значений) хранит по одной записи на каждый слой для каждого токена контекста, и его объем растет вместе с диалогом.

Рассчитаем это для Llama 3.1 8B. Модель имеет 32 слоя, 8 голов ключей/значений и размерность головы 128. Каждый токен сохраняет ключ и значение по 2 байта каждое в формате f16, итого 2 x 8 x 128 x 2 = 4096 байт на слой. Для 32 слоев это составляет 128 KiB на токен. Таким образом, контекст в 4096 токенов требует 512 MiB, а контекст в 32,768 токенов — 4 GiB.

Следовательно, модель Q4_K_M 8B с контекстом 4k требует примерно 4.58 GiB для весов, плюс около 0.5 GiB для кэша, плюс ресурсы самого рантайма. Она не поместится в 4 GiB RAM. Она поместится в 8 GiB с запасом для работы. Увеличьте контекст до 32k на той же машине с 8 GiB, и один только кэш поглотит весь свободный объем. Отслеживайте использование в реальном времени с помощью free -h во время загрузки модели и не доверяйте оценкам, которые не проверили самостоятельно. Если вы подбираете конфигурацию для моделей значительно больше 8B, та же арифметика, примененная для модели 27B на VPS только с CPU, показывает, что на самом деле вмещает каждый уровень от 8 до 64 GB.

Ollama умножает эти показатели. Параметр OLLAMA_NUM_PARALLEL по умолчанию равен 1, и объем памяти, необходимый модели, масштабируется пропорционально этому числу, умноженному на длину контекста. Увеличьте оба параметра одновременно, и демон незаметно потребует в несколько раз больше RAM, чем вы ожидали. Эта же арифметика определяет ваш предел по количеству одновременных пользователей, так как каждый параллельный запрос требует свою долю KV cache, что и является причиной, по которой сервер, работающий нормально для одного человека, зависает при пяти.

Ось 2: демон, которым вам предстоит управлять

Скрипт установки Ollama создает unit-файл systemd, создает системного пользователя ollama и активирует службу. Вы получаете управление жизненным циклом без необходимости писать его самостоятельно. Настройка выполняется через systemd:

sudo systemctl edit ollama
[Service]
Environment="OLLAMA_CONTEXT_LENGTH=8192"
Environment="OLLAMA_KEEP_ALIVE=30m"
sudo systemctl daemon-reload
sudo systemctl restart ollama
journalctl -e -u ollama

OLLAMA_KEEP_ALIVE имеет большее значение на CPU VPS, чем где-либо еще. Модели по умолчанию удерживаются в оперативной памяти в течение 5 минут, после чего выгружаются. Следующий запрос вынуждает систему заново считывать весь файл с диска перед ответом, поэтому перезагрузка файла размером 4.58 GiB превращает двухсекундный отклик в тридцатисекундный на медленных накопителях. Увеличение времени удержания (keep-alive) устраняет задержку, но постоянно занимает RAM. Оба варианта имеют свою цену. Выберите тот, который менее критичен для вас. Если вы решили, что модель должна постоянно находиться в памяти, настройка keep_alive для сохранения модели в периоды простоя и после перезагрузок потребует всего пару строк и избавит вас от необходимости прогревать модель вручную при каждом перезапуске сервера.

llama.cpp не предоставляет демона, поэтому вы пишете unit-файл самостоятельно как /etc/systemd/system/llama-server.service:

[Unit]
Description=llama.cpp server
After=network-online.target

[Service]
ExecStart=/usr/local/bin/llama-server -m /srv/models/model-Q4_K_M.gguf -c 4096 -t 4 --host 127.0.0.1 --port 8080
Restart=always
RestartSec=3
User=llama

[Install]
WantedBy=multi-user.target

Активируйте его с помощью sudo systemctl enable --now llama-server. Процесс будет удерживать модель в памяти на протяжении всего времени своей работы. Ничто не выгружается при простое, что исключает задержки при повторном обращении, но и не позволяет освободить память иначе, как остановкой службы. Если написание unit-файлов для вас в новинку, это делается по тому же шаблону, что и запуск собственных служб через systemd на VPS.

Ось 3: API, с которым будет взаимодействовать ваше приложение

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

Ollama ожидает запросы на 127.0.0.1:11434. Его совместимый с OpenAI маршрут — http://localhost:11434/v1/chat/completions, а параллельно он сохраняет собственный API по адресу /api/chat. Также задокументирован маршрут, совместимый с Anthropic.

curl -X POST http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "llama31-q4", "messages": [{"role": "user", "content": "Say this is a test"}]}'

llama-server ожидает запросы на 127.0.0.1:8080 и обслуживает /v1/chat/completions, /v1/completions и /v1/embeddings, а также имеет собственную конечную точку /completion и встроенный веб-интерфейс. Он также предоставляет операционные маршруты, которых нет в Ollama: /health для проверки готовности (readiness probe), /props для настроек загруженной модели, /slots для отслеживания состояния каждого слота запросов и /metrics в формате Prometheus. Если вы планируете мониторить этот сервис, это различие, вероятно, станет решающим фактором.

Ни один из серверов не включает аутентификацию автоматически. Оба по умолчанию привязаны к loopback, и это оправдано. Получайте к ним доступ через SSH-туннель или через reverse proxy и никогда не открывайте порты 11434 или 8080 в интернет.

На что реально способен VPS только с CPU

VPS только с CPU медленно запускает небольшие модели. Это честное резюме, а полезная часть заключается в понимании того, где проходит граница. Проведите измерения, прежде чем проектировать что-либо на этой базе:

llama-bench -m ~/models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -p 512 -n 128

Столбец pp — это скорость обработки промпта, а столбец tg — скорость генерации токенов, оба значения указаны в токенах в секунду. На тарифе с общим vCPU модель 8B в квантовании Q4_K_M обычно выдает значения tg в диапазоне нескольких единиц. Обработка промпта — это наиболее болезненная часть: весь промпт обрабатывается до появления первого выходного токена, поэтому длинный системный промпт добавляет ожидание к каждому запросу. Длина ответа — это та часть счета, которую вы можете контролировать, поскольку при скорости три токена в секунду модель, генерирующая 600 токенов, занимает ресурсы сервера на три минуты, поэтому ограничение вывода через num_predict — самый дешевый способ предотвратить превращение одного длинного ответа в таймаут.

Пригодно для CPU: модели от 1B до 4B для классификации, извлечения данных, кратких резюме или маршрутизации. Ответы приходят за секунды, а объем памяти соответствует стандартному тарифу. В качестве примера работы с таким размером, а не с диапазоном, Nemotron 3.5 Lightning, загруженный и измеренный на VPS показывает точный тег, реальный объем требуемой RAM и скорость, которую модель удерживает без GPU. Непригодно для CPU: интерактивный чат со скоростью чтения, помощники по программированию, работа с длинными документами или любые задачи с циклом агента, выполняющим множество последовательных вызовов. Цикл, который делает двенадцать вызовов по четыре секунды каждый, занимает минуту, прежде чем выдаст хоть какой-то результат. Если вы все же планировали использовать помощника по программированию, настройка агента на модель, которую вы хостите самостоятельно определяет, в каких задачах небольшая локальная модель действительно выигрывает, а какие должны остаться на hosted API.

Существует два выхода, если цифры вас не устраивают. Если проблема в конкурентности, когда множество пользователей обращаются к одной модели одновременно, выбор движка меняется, и сравнение Ollama и vLLM для конкурентного обслуживания охватывает этот вопрос. Если проблема в чистой скорости, ответом будет VPS с подключенным GPU, где -ngl начинает иметь значение. Прежде чем переходить к любому из вариантов, получите базовые показатели самого оборудования, так как пропускная способность диска и памяти влияют на время загрузки не меньше, чем CPU. Воспроизводимый бенчмарк VPS стоит потраченного часа.

Установка llama.cpp с фиксацией версии сборки

Оба проекта обновляются еженедельно, поэтому фиксируйте версию, которую вы развернули. Стандартная команда установки загружает текущую сборку:

curl -LsSf https://llama.app/install.sh | sh
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUF

Чтобы зафиксировать конкретную сборку, используйте готовый архив (tarball) со страницы релизов. Сборка b10224 является актуальным тегом на 2 августа 2026 года:

curl -LO https://github.com/ggml-org/llama.cpp/releases/download/b10224/llama-b10224-bin-ubuntu-x64.tar.gz
tar xf llama-b10224-bin-ubuntu-x64.tar.gz
find . -type f -name 'llama-server'

Либо соберите этот же тег из исходного кода:

sudo apt update && sudo apt install -y build-essential cmake git libssl-dev
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
git checkout b10224
cmake -B build
cmake --build build --config Release -j $(nproc)

libssl-dev является документированной зависимостью для работы функций HTTPS. Компиляция занимает несколько минут и требует больше оперативной памяти, чем доступно на младших тарифных планах. Если на сервере с малым объемом ОЗУ возникает ошибка нехватки памяти, выполните сборку на более мощной машине, а затем скопируйте готовые бинарные файлы.

Установка Ollama с фиксацией версии

curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.32.5 sh
ollama -v

Скрипт считывает OLLAMA_VERSION, поэтому вы можете зафиксировать проверенный релиз вместо того, чтобы устанавливать последнюю версию, вышедшую сегодня. Версия v0.32.5 была опубликована 27 июля 2026 года. Также существует ручной способ установки, если вы не хотите передавать скрипт напрямую в оболочку:

sudo rm -rf /usr/lib/ollama
curl -fsSL https://ollama.com/download/ollama-linux-amd64.tar.zst | sudo tar x -C /usr
ollama -v

Ручной способ не создает unit-файл systemd и системного пользователя, поэтому их нужно добавить самостоятельно. В руководстве Полное руководство по установке Ollama на VPS этот этап настройки сервиса описан пошагово.

Режимы сбоев и сообщения об ошибках

Ollama отказывается загружать модель. ollama run возвращает строку следующего вида:

Error: model requires more system memory (5.6 GiB) than is available (3.2 GiB)

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

llama.cpp не выдает ошибку, но работает крайне медленно. По умолчанию llama.cpp использует memory-map для GGUF, поэтому файл, размер которого превышает объем RAM, все равно запускается. В этом случае ядро постоянно выгружает и загружает веса с диска при генерации каждого токена, из-за чего скорость падает до нескольких секунд на токен, а нагрузка на диск достигает 100 процентов. Используйте --no-mmap, чтобы принудительно выполнить выделение памяти: тогда процесс завершится с ошибкой сразу, а не будет деградировать. Когда вмешивается ядро, dmesg показывает причину:

Out of memory: Killed process 1234 (llama-server)

Файл модели не загружается вовсе. GGUF, собранный для семейства моделей, которое новее вашего движка, вызывает ошибку с указанием неизвестной архитектуры:

error loading model architecture: unknown model architecture: 'qwen3next'

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

API отвечает локально, но не из вашего приложения. Ollama привязывается к 127.0.0.1:11434, поэтому при обращении с другого хоста возникает ошибка connection refused. Устанавливайте OLLAMA_HOST=0.0.0.0:11434 через systemctl edit ollama только в том случае, если порт находится за межсетевым экраном или в частной сети, так как API не имеет встроенной аутентификации.

Первый ответ после паузы очень медленный. Произошла выгрузка модели из-за 5-минутного простоя, и теперь она снова считывается с диска. Команда ollama ps, выполненная непосредственно перед запросом, показывает, что ничего не загружено, что подтверждает этот факт. Увеличьте значение OLLAMA_KEEP_ALIVE.

Что именно стоит запускать?

Запускайте Ollama, если вам нужно автоматическое управление моделями и готовый API-интерфейс, совместимый с OpenAI, без дополнительных настроек. Это оптимальный вариант по умолчанию для первого развертывания и для случаев, когда вы планируете часто менять модели.

Запускайте llama.cpp напрямую, если объем оперативной памяти ограничен и вам необходимо самостоятельно выбирать уровень квантования, если вам нужны /health, /slots и /metrics для мониторинга или если требуется флаг, который не поддерживается в Ollama. Это оправданный выбор для VPS, где модель едва помещается в память, так как параметры для оптимизации использования ресурсов в этом случае требуют ручного подбора, который Ollama выполняет автоматически.

Использование обоих инструментов — обычная практика. Ollama подходит для экспериментов, а llama.cpp — для модели, которую вы переводите в промышленную эксплуатацию и не планируете менять.

FAQ

Ollama — это просто обертка над llama.cpp?

Почти, но эта обертка выполняет реальную работу. В README проекта Ollama указано, что llama.cpp используется в качестве движка для инференса (проверено 2 августа 2026 года). Поверх него Ollama добавляет реестр моделей, шаблоны промптов для преобразования сообщений чата в запрос, набор параметров сэмплирования по умолчанию, демон с функцией выгрузки неактивных моделей из памяти и HTTP API. Сравнивая количество токенов в секунду при идентичных настройках, вы сравниваете один и тот же движок. Выбор на самом деле идет между уровнями управления.

Что работает быстрее на VPS без GPU?

Они используют один и тот же движок, поэтому при одинаковом файле модели, квантовании, размере контекста и количестве потоков результаты будут близки. Разница, о которой сообщают пользователи, обычно связана с различными настройками по умолчанию (чаще всего это длина контекста и количество потоков), а не с самим движком. Измерьте производительность с помощью llama-bench -m <file> -p 512 -n 128 и сравните столбец tg на своем сервере, прежде чем доверять любым опубликованным цифрам.

Можно ли использовать свой файл GGUF с Ollama?

Да. Разместите файл на сервере, создайте Modelfile, первая строка которого содержит FROM ./your-model.gguf, добавьте необходимые строки PARAMETER, например num_ctx, а затем выполните ollama create your-name -f ./Modelfile. ollama ls отобразит вашу модель в списке наряду с моделями, загруженными из реестра. Именно так можно использовать квантование, которого нет в реестре.

Сколько оперативной памяти нужно для модели 8B?

Рассчитывайте объем исходя из размера файла, KV-кэша и среды выполнения. Сборка Q4_K_M для Llama 3.1 8B занимает около 4.58 GiB на диске, а контекст в 4096 токенов добавляет примерно 512 MiB кэша, поэтому 8 GiB RAM будет достаточно, а 4 GiB — недостаточно. Кэш масштабируется вместе с контекстом: та же модель при контексте 32,768 токенов потребует около 4 GiB только под кэш. В случае с Ollama помните, что требования к памяти также зависят от OLLAMA_NUM_PARALLEL.