Ollama или llama.cpp: что выбрать для работы на VPS
Сравнение Ollama и llama.cpp для запуска моделей на CPU. Узнайте, как управлять потреблением RAM через квантование и почему для VPS с малым объемом памяти лучше llama.cpp.
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.
Эта упаковка — единственное различие. Ollama самостоятельно определяет квантование, шаблон и длину контекста, предоставляя вам одно имя для запоминания. llama.cpp ничего не решает за вас и предоставляет управление через флаги.
Ось 1: управление моделью и квантованием
Квантование уменьшает размер каждого веса с 16 или 32 бит до 4, 5 или 8 бит. Именно это позволяет модели с 8 миллиардами параметров поместиться в оперативной памяти обычного VPS. Именование GGUF становится понятным, если знать закономерность: Q4_K_M означает 4-битное K-квантование среднего размера. Более высокое число сохраняет больше точности, но требует больше памяти.
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 ГиБ оперативной памяти этот выбор определяет, загрузится ли модель вообще.
В 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. У 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 во время загрузки модели и не доверяйте оценкам, которые вы не измерили самостоятельно.
Ollama умножает эти затраты. Параметр OLLAMA_NUM_PARALLEL по умолчанию равен 1, а объем памяти, необходимый модели, масштабируется пропорционально этому числу, умноженному на длину контекста. Увеличьте оба параметра одновременно, и демон незаметно потребует в несколько раз больше RAM, чем вы ожидали.
Ось 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 ollamaOLLAMA_KEEP_ALIVE имеет большее значение на CPU VPS, чем где-либо еще. Модели по умолчанию удерживаются в памяти в течение 5 минут, после чего выгружаются. Для следующего запроса требуется повторное чтение всего файла с диска перед ответом, поэтому перезагрузка файла размером 4.58 GiB превращает двухсекундный отклик в тридцатисекундный на медленных накопителях. Длительный keep-alive устраняет задержку, но постоянно занимает RAM. Оба варианта имеют свои издержки. Выберите тот, который менее критичен для вас.
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 в диапазоне нескольких единиц. Обработка промпта — наиболее затратная часть: весь промпт обрабатывается до появления первого выходного токена, поэтому длинный системный промпт добавляет задержку к каждому запросу.
Пригодно для CPU: модели от 1B до 4B для задач классификации, извлечения данных, кратких резюме или маршрутизации. Ответы приходят за секунды, а объем памяти соответствует стандартному тарифу. Непригодно для CPU: интерактивный чат со скоростью чтения, помощники по написанию кода, работа с длинными документами или любые задачи с циклом агента, выполняющим множество последовательных вызовов. Цикл, совершающий двенадцать вызовов по четыре секунды каждый, потребует целую минуту, прежде чем выдаст хоть какой-то результат.
Существует два выхода, если показатели не соответствуют требованиям. Если проблема в конкурентности, когда множество пользователей обращаются к одной модели одновременно, меняется выбор движка, и сравнение 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 только с CPU?
Они используют один и тот же движок, поэтому при одинаковом файле модели, квантовании, размере контекста и количестве потоков результаты будут близки. Разница, о которой сообщают пользователи, обычно возникает из-за различных настроек по умолчанию (чаще всего длины контекста и количества потоков), а не из-за самого движка. Измерьте производительность с помощью 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.