Ollama vs llama.cpp vs vLLM: чек-лист для разработчика
Введение: три столпа локального инференса LLM
Разработчик, решивший запустить большую языковую модель локально, сталкивается с тремя основными инструментами: Ollama, llama.cpp и vLLM. Все они работают с открытыми моделями (Llama, Mistral, Gemma, Qwen), но архитектурные решения и целевые сценарии кардинально различаются. Ошибочный выбор приводит к неэффективному использованию GPU, потерям скорости или невозможности развернуть модель на ограниченном оборудовании.
Данный материал представляет собой практический чек-лист. Вы пройдете от вопроса "Что мне нужно?" до конкретного выбора инструмента с обоснованием.
Быстрый чек-лист выбора
Ответьте на три вопроса последовательно.
Вопрос 1. У вас есть NVIDIA GPU с достаточным объемом VRAM для модели целиком?
- Да → переходите к вопросу 2.
- Нет (только CPU, Apple Silicon, старый GPU с 4-8 ГБ) → ваш выбор llama.cpp.
Вопрос 2. Вам нужен production-сервер с высокой пропускной способностью (много параллельных запросов)?
- Да, я разворачиваю API для десятков пользователей → vLLM.
- Нет, я тестирую модель, разрабатываю локально или запускаю в однопользовательском режиме → Ollama.
Вопрос 3. Вы готовы писать код на Python и настраивать параметры вручную?
- Да, мне нужен полный контроль (специфичные сэмплеры, логиты, адаптеры) → llama.cpp или vLLM (через OpenAI-совместимый сервер).
- Нет, я хочу команду в терминале и готовый API из коробки → Ollama.
Итоговая матрица:
| Сценарий | Инструмент |
|---|---|
| Ноутбук без GPU, запуск модели 7B на CPU | llama.cpp |
| MacBook с M1/M2/M3, быстрый инференс | llama.cpp (с бэкендом Metal) |
| Локальное тестирование модели разработчиком | Ollama |
| API для чат-бота внутри компании на одном GPU | vLLM |
| Изучение LLM, эксперименты с квантизацией | llama.cpp |
Подробный разбор — Ollama
Философия: "Беги модели как Docker-контейнеры". Максимальная простота.
Ключевые особенности:
- Автоматическое скачивание моделей из библиотеки (ollama.com/library).
- Встроенный REST API, совместимый с OpenAI (частично).
- Готовые Modelfiles для настройки параметров (температура, системный промпт).
- Поддержка GPU (CUDA, ROCm) и CPU без перекомпиляции.
Типичный рабочий процесс:
ollama pull llama3.2:3b
ollama run llama3.2:3b
# В другом терминале:
curl http://localhost:11434/api/generate -d '{"model": "llama3.2:3b", "prompt": "Hello"}'
Плюсы:
- Нулевой порог входа. Установка одной командой (brew install ollama или скрипт).
- Автоматически управляет квантизацией (Q4_K_M по умолчанию).
- Поддерживает контекстное окно до 128K токенов на многих моделях.
- Работает на Windows, Linux, macOS.
Минусы:
- Медленнее vLLM при параллельных запросах в 3-5 раз.
- Меньше гибкости в настройках сэмплинга.
- Нет built-in поддержки prefix caching для long context.
Когда использовать: Разработка прототипов, личное использование, обучение, быстрый тест модели.
Когда не использовать: Production с нагрузкой >10 RPS, специфические архитектуры моделей не из библиотеки Ollama.
Подробный разбор — llama.cpp
Философия: "Запустим любую модель на любом железе, даже на Raspberry Pi". Исходно — реализация трансформеров на чистом C++ без зависимостей.
Ключевые особенности:
- Поддержка более 50 архитектур (Llama, Mistral, Gemma, Phi, Qwen, DeepSeek, и даже старые GPT-2).
- Инференс на CPU с оптимизациями (AVX2, AVX512, BLAS).
- GPU бэкенды: CUDA, Metal (Apple), Vulkan, SYCL, ROCm.
- Продвинутые квантизации: Q2_K, Q3_K, Q4_K, Q5_K, Q6_K, Q8_0, а также экспериментальные IQ серии.
- LoRA адаптация на лету.
Типичный рабочий проект (формат GGUF):
# Компиляция с поддержкой Metal
make -j LLAMA_METAL=1
# Запуск сервера с моделью
./server -m models/llama-2-7b.Q4_K_M.gguf -c 4096 -ngl 35
# Или прямое взаимодействие (main)
./main -m models/mistral-7b.Q5_K_M.gguf -p "Explain quantum computing" -n 256
Плюсы:
- Самая широкая поддержка оборудования. Запустите модель 70B на Threadripper с 256 ГБ RAM.
- На Apple Silicon через Metal обгоняет Ollama на 20-30% в скорости.
- Полный контроль: семплирование, логит-биас, повторные штрафы, стоп-токены.
- Поддержка продолжения контекста (rope scaling).
Минусы:
- Требует компиляции или установки через менеджеры пакетов с флагами.
- Нет удобного API из коробки (сервер есть, но он минималистичен).
- Формат GGUF — надо конвертировать модели из Hugging Face (хотя библиотека конвертеров есть).
Когда использовать: M-серия Apple, CPU-инференс, экзотические модели, нужен максимальный перформанс на ограниченном бюджете VRAM.
Когда не использовать: Быстрый прототип на коленке, готовое production-решение без обертки.
Подробный разбор — vLLM
Философия: "Максимальная пропускная способность для production". Написана на Python + CUDA, использует PagedAttention — революционный алгоритм для управления KV-кэшем.
Ключевые особенности:
- PagedAttention: сокращает фрагментацию памяти KV-кэша на 20-60%.
- Continuous batching запросов на лету.
- Поддержка tensor parallelism (многократное ускорение на 2-8 GPU).
- OpenAI-совместимый API сервер (чат, комплишены, эмбеддинги).
- Поддержка моделей в формате Hugging Face (safetensors, pytorch_model.bin) — без конвертации.
Типичный запуск production-сервера:
pip install vllm
# Запуск с одной моделью
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--tensor-parallel-size 1 \
--max-num-seqs 256 \
--port 8000
# Или через docker
docker run --gpus all -p 8000:8000 vllm/vllm-openai:latest \
--model meta-llama/Meta-Llama-3-8B-Instruct
Плюсы:
- На 2-10 раз выше throughput по сравнению с llama.cpp на GPU.
- Поддержка quantization FP8, INT8, AWQ, GPTQ.
- Prefix caching: если много запросов имеют общий промпт (инструкция к системе), кэшируется один раз.
- Лучший выбор для API-сервера.
Минусы:
- Требует NVIDIA GPU (CUDA). AMD ROCm экспериментально. Apple Metal — нет.
- Минимальный объем VRAM: модель 7B в FP16 занимает 14 ГБ, в INT4 — 4-5 ГБ.
- Больше оперативной памяти (overhead) чем у GGUF.
- Сложнее дебажить при падении.
Когда использовать: Production-чатбот, RAG API, синтез данных, бенчмаркинг моделей при высокой нагрузке.
Когда не использовать: Нет NVIDIA GPU, один запрос в 10 секунд, запуск на ноутбуке.
Сравнительная таблица по параметрам
| Параметр | Ollama | llama.cpp | vLLM |
|---|---|---|---|
| Формат моделей | GGUF (свой) | GGUF, HF конвертация | HF (safetensors) |
| CPU инференс | Да (медленнее) | Да (оптимальный) | Нет (только GPU) |
| Apple Silicon | Да (Metal, но медленнее) | Да (Metal, самый быстрый) | Нет |
| Поддержка квантизации | Авто Q4_K_M | Все типы GGUF | FP8, INT4 (AWQ/GPTQ) |
| Parallel requests | Плохо | Средне (через сервер) | Отлично (PagedAttention) |
| OpenAI API | Частично (не все эндпоинты) | Базовый сервер | Почти полный |
| Скорость (token/s 7B на RTX 4090) | ~120 | ~130 | ~210 (при бэтче) |
| Макс. контекст | определяет модель | расширяемый (rope) | определяет модель |
| LoRA | Нет | Да (на лету) | Да (требует перезагрузки) |
| Сложность установки | 1/5 | 3/5 | 2/5 (pip install) |
Дорожная карта выбора для типовых проектов
Ситуация А. Вы пишете Telegram-бота с LLM для 100 активных пользователей.
- Сервер: Ubuntu с RTX 4090 (24 ГБ).
- Выбор: vLLM с моделью Mistral-7B-Instruct в FP8 или INT4.
- Обоснование: бот получит десятки параллельных запросов, vLLM утилизирует GPU на 90%+.
Ситуация Б. Вы купили MacBook Pro M3 Max и хотите тестировать модели в поездках.
- Выбор: llama.cpp с бэкендом Metal.
- Действие: Собрать
LLAMA_METAL=1, скачать GGUF модели (Q4_K_M или Q5_K_M). - Обоснование: Ollama на Metal медленнее на 30% из-за лишних оберток.
Ситуация В. Вы data scientist, экспериментируете с разными моделями (Qwen, DeepSeek, Phi).
- Выбор: Ollama + llama.cpp в связке. Ollama для быстрых тестов, llama.cpp для детальных бенчмарков.
- Действие: Установить ollama, параллельно собрать llama.cpp.
- Обоснование: Ollama сокращает время между "идеей" и "промптом" до 10 секунд.
Ситуация Г. У вас старый ПК с GTX 1060 (6 ГБ) и 32 ГБ RAM.
- Выбор: llama.cpp с частичной оффлоадой на GPU (
-ngl 20из 33 слоев модели 7B). - Обоснование: Только llama.cpp умеет гибко делить модель между GPU и CPU без падения скорости в 100 раз.
Итоговый вердикт
- Для production с нагрузкой на одном или нескольких GPU → vLLM.
- Для разработки, прототипирования и персонального использования → Ollama.
- Для экзотического железа, Apple Silicon и CPU → llama.cpp.
- Для обучения и понимания внутренностей → начните с llama.cpp (пример
main), затем оцените удобство Ollama, затем посчитайте выгоду vLLM.
Ни один инструмент не является универсальным. Разработчик, знакомый со всеми тремя, способен развернуть LLM на любом железе от Raspberry Pi до кластера A100.