Сравнения

Ollama против llama.cpp: когда обёртка мешает

Не «что лучше», а шесть конкретных ситуаций, в которых удобство Ollama начинает стоить производительности или контроля — с протоколом замера, который вы повторите у себя.

Сравнивать Ollama и llama.cpp странно ровно до того момента, пока не поймёшь, что сравниваются не движки. Движок один и тот же: Ollama построена поверх llama.cpp и использует её для собственно вычислений. Сравниваются два способа взаимодействия с одним и тем же кодом — через удобный слой абстракции или напрямую.

Поэтому вопрос «что быстрее» бессмысленен: при одинаковых параметрах скорость будет одинаковой. Осмысленный вопрос другой: в каких ситуациях слой абстракции не даёт задать нужные параметры или задаёт их за вас неудачно. Таких ситуаций примерно шесть.

Факты об обоих проектах проверялись 25.08.2026; и Ollama, и llama.cpp меняются быстро, поэтому конкретные умолчания и имена переменных сверяйте с документацией своей версии.

#Что такое Ollama

Ollama — фоновый сервис, который скачивает модели из своего каталога, хранит их в собственном формате блобов и поднимает локальный HTTP API. Работа сводится к двум командам: ollama pull и ollama run. Параметры запуска — число слоёв на видеокарте, размер контекста, тип кэша — подбираются автоматически исходя из обнаруженного железа.

llama.cpp — тот же движок без этого слоя: вы собираете бинарник, указываете путь к файлу модели и задаёте все параметры руками.

#Что Ollama делает хорошо

Список честный и длинный, потому что для большинства людей Ollama — правильный выбор.

Автоматический подбор числа слоёв на GPU. Ollama определяет объём видеопамяти и сама решает, сколько слоёв выгрузить. В llama.cpp это флаг -ngl, который вы подбираете вручную и переподбираете при смене модели или контекста.

Управление жизненным циклом модели. Модель загружается по первому запросу, держится в памяти заданное время и выгружается сама. При работе с llama.cpp процесс либо запущен и занимает память, либо не запущен.

Один API для всех приложений. Поднятый сервис обслуживает и терминал, и любые сторонние программы — без повторной загрузки весов и без отдельного процесса на каждое.

Установка без компилятора. Обычный установщик под все три системы против CMake, тулкита и получаса сборки.

Каталог с осмысленными именами. qwen2.5:14b вместо поиска нужного файла среди пятнадцати вариантов квантизации.

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

#Ключевые различия

Уровень контроля над параметрами. Ollama отдаёт часть настроек через параметры модели и переменные окружения — но не все. Батч обработки промпта, тонкая настройка распределения между несколькими картами, специфические флаги бэкенда через неё недоступны.

Кто выбирает квантизацию. В каталоге Ollama за коротким именем вроде qwen2.5:7b стоит конкретный вариант, обычно Q4_K_M. Другой квант надо явно указывать тегом, если он опубликован. В llama.cpp вы просто скачиваете тот файл, который хотите.

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

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

Умолчания, о которых не сообщают. Самое болезненное — размер контекста. Историческое значение по умолчанию в Ollama было заметно меньше того, что модель способна обработать, и при превышении диалог молча обрезался с начала. В новых версиях умолчание подняли и добавили переменную окружения для его изменения — проверьте, что именно у вас, командой ollama show. Именно этот параметр стоит за большинством жалоб «модель забывает начало разговора». Разбор параметров, которые действительно влияют на результат, — в материале о настройке параметров Ollama.

#Таблица сравнения

Шесть ситуаций, каждая с вердиктом. Смотреть в ней надо не на «победителя», а на то, попадает ли ваш сценарий в строки со вторым столбцом.

Ситуация Чем решать Почему
Первый запуск, нужно «просто работало» Ollama автоподбор слоёв, никакой сборки
Модель влезает впритык llama.cpp ручной -ngl, -c, квантизация кэша одним флагом
Файл GGUF не из каталога llama.cpp в Ollama нужен Modelfile-обёртка
Свежевышедшая архитектура llama.cpp поддержка появляется там раньше
Модель как фоновый сервис для нескольких программ Ollama один сервис, один API, автовыгрузка
Воспроизводимый замер производительности llama.cpp llama-bench с прогревом и повторами

Вывод из таблицы: четыре строки из шести — про пограничные и продвинутые сценарии. Если ни один из них не ваш, вопрос закрыт в пользу Ollama, и читать дальше незачем.

Седьмая ситуация не попала в таблицу, потому что ответ в ней — «ни то и ни другое»: обслуживание десятков одновременных запросов. Оба инструмента рассчитаны на одного-двух пользователей, для нагрузки нужен другой класс серверов.

#Как замерить разницу у себя

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

Замер в llama.cpp:

./build/bin/llama-bench -m ~/models/qwen2.5-7b-instruct-q4_k_m.gguf -ngl 99 -c 4096 -p 512 -n 128

Замер в Ollama на той же модели того же кванта. Сначала прогрев, потом собственно замер:

ollama run qwen2.5:7b "" --verbose
ollama run qwen2.5:7b "Напиши 200 слов про устройство велосипеда" --verbose

Флаг --verbose выводит статистику: сколько токенов оценено, сколько сгенерировано и с какой скоростью. Сравнивать нужно строку скорости генерации с колонкой tg из llama-bench.

Три условия корректности: одинаковая модель и квант (проверьте через ollama show), одинаковый размер контекста, первый прогон отброшен. Подробнее о том, почему без прогрева цифры врут, — в материале о том, как измерить скорость локальной модели правильно.

Если числа совпали в пределах нескольких процентов — так и должно быть, движок один. Если Ollama заметно медленнее, смотрите на две вещи: сколько слоёв реально ушло на GPU (ollama ps, колонка PROCESSOR) и какой контекст выставлен.

#Где Ollama объективно лучше

Раздел, без которого сравнение было бы нечестным.

Она не требует от вас становиться администратором своего компьютера. Сборка llama.cpp под CUDA на Windows — отдельное упражнение с несовместимостями версий, из-за которого люди бросают локальный запуск целиком. Ollama ставится как браузер.

Она правильно ведёт себя с памятью в фоне. Модель, которой не пользуются, выгружается и освобождает видеопамять для игр и графики. С запущенным llama-server вы сами следите за тем, что он занимает.

Она даёт стабильный интерфейс. Флаги llama.cpp переименовывают и объединяют между релизами; команды pull, run, list не менялись годами. Для инструмента, который вы поставили один раз и хотите забыть, это существенно.

Она решает вопрос шаблонов чата. В каталоге лежат модели с уже настроенным шаблоном. При ручной работе неверный шаблон — источник самых загадочных ошибок в поведении модели.

Если вам ближе графический интерфейс, а не терминал, то честнее сравнивать не с llama.cpp, а с настольными приложениями — например, с LM Studio.

#Кому что подойдёт

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

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

Если хочется и того, и другого — это рабочий вариант: Ollama как повседневный сервис, llama.cpp для экспериментов и замеров. Модели можно не дублировать, подключив локальный файл GGUF через Modelfile в Ollama.

#Частые вопросы

#Ollama медленнее llama.cpp?

При одинаковых параметрах — нет, движок один и тот же. Разница появляется, когда параметры разные: автоподбор Ollama мог оставить часть слоёв на процессоре или выставить другой контекст. Проверяется командой ollama ps и явным сравнением настроек.

#Можно ли в Ollama задать число слоёв на видеокарте вручную?

Да, параметром num_gpu — через Modelfile или через /set parameter в интерактивном режиме. Это прямой аналог -ngl. Но часть более тонких параметров llama.cpp через Ollama недоступна вовсе.

#Ollama использует llama.cpp или свой движок?

Исторически Ollama использует llama.cpp как основной движок инференса, добавляя поверх управление моделями, API и упаковку. Отдельные части со временем переписываются, поэтому формулировка «полностью совпадает» уже неточна — но вычислительное ядро остаётся общим.

#Запустится ли в Ollama любой файл GGUF?

Почти любой, если архитектура поддерживается вашей версией. Для файла с диска нужен Modelfile с директивой FROM и путём к файлу, а затем команда ollama create. Прямого запуска произвольного пути одной командой нет.

#Что выбрать, если модель не влезает в видеопамять?

llama.cpp даст больше рычагов: ручной подбор -ngl, квантизация KV-кэша, Flash Attention, уменьшение батча. В Ollama доступна часть этих настроек, но не все, и подбирать их менее удобно.

#Вывод

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

Если вы настраиваете модель — то есть боретесь за последние сотни мегабайт видеопамяти, замеряете, пробуете свежие архитектуры или запускаете файлы не из каталога — берите llama.cpp, потому что именно этих рычагов обёртка и не отдаёт. Разумная связка для тех, кто делает и то, и другое: Ollama как постоянный сервис, llama.cpp как лаборатория.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт