Сравнивать 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 как лаборатория.