Ollama vs vLLM vs LM Studio vs llama.cpp — сравнение локальных LLM серверов

opensourceaillmollamavllmit
← Back to Blog

Введение

Запуск LLM локально стал массовым трендом. Но инструментов много — какой выбрать?

Сравниваем 4 основных решения для локального запуска LLM:

Инструмент Язык API Web UI GPU Сложность
Ollama Go OpenAI Нет CUDA/MPS
vLLM Python OpenAI Нет CUDA ⭐⭐⭐
LM Studio Rust/TS OpenAI Да CUDA/MPS ⭐⭐
llama.cpp C OpenAI Нет CPU/GPU ⭐⭐⭐

Ollama

Что это?

Ollama — самый простой способ запустить LLM локально. Один command — и модель работает.

Установка

# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.com/install.sh | sh

# Windows — installer с сайта

Запуск модели

# Скачать и запустить
ollama run llama3.2

# Через API
ollama serve

# Список моделей
ollama list

# Удалить модель
ollama rm llama3.2

API совместимость

# Ollama совместим с OpenAI API
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.2",
    "messages": [
      {"role": "user", "content": "Привет!"}
    ]
  }'

Преимущества

✅ Простейшая установка (brew install)
✅ Автоматическое скачивание моделей
✅ Поддержка GGUF (Q4_K_M по умолчанию)
✅ CPU + GPU (CUDA, Metal)
✅ Low-level API (embeddings, generate)
✅ Модели оптимизированы (Mistral, Llama, Phi)
✅ Модули (Modelfile)

Modelfile — настройка модели

# Modelfile для кастомной модели
FROM llama3.2

PARAMETER temperature 0.7
PARAMETER num_ctx 4096
PARAMETER num_gpu 35
SYSTEM You are a helpful assistant that speaks Russian.

# Build
ollama create my-llama -f Modelfile
ollama run my-llama

Недостатки

❌ Нет встроенного Web UI
❌ Меньше контроля над inferencing
❌ Не поддерживает pipeline parallelism
❌ Медленнее vLLM на GPU
❌ Нет PagedAttention

Когда использовать Ollama?

- Быстрый старт (dev, тесты)
- macOS (Metal оптимизация)
- Простые проекты
- Embedding + generation в одном
- Локальные агенты

vLLM

Что это?

vLLM — высокопроизводительный LLM inference engine от UC Berkeley. Создан для production нагрузки.

Ключевые технологии

1. PagedAttention:
   - Memory management как в OS (pages)
   - Убирает fragmentation
   - 2-4x больше throughput чем HuggingFace

2. Continuous batching:
   - Новые requests не ждут entire sequence
   - Batching на уровне tokens
   - Lower latency

3. Tensor parallelism:
   - Split модели на несколько GPU
   - 8x speedup с 8 GPU

4. Speculative decoding:
   - Small model proposes, large model verifies
   - 2x speedup

Установка

pip install vllm

# С конкретным CUDA
pip install vllm --index-url https://download.pytorch.org/whl/cu121

Запуск

# Запуск OpenAI-compatible API
python -m vllm.entrypoints.api_server \
  --model meta-Llama/Meta-Llama-3-70B \
  --tensor-parallel-size 4 \
  --port 8000

# Python API
from vllm import LLM, SamplingParams

llm = LLM(model="meta-Llama/Meta-Llama-3-70B")
prompts = ["Hello, my name is", "The capital of France is"]

sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=128
)

outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}")
    print(f"Generated: {generated_text!r}")

OpenAI-compatible API

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-Llama/Meta-Llama-3-70B",
    "messages": [
      {"role": "user", "content": "What is the capital of France?"}
    ]
  }'

Преимущества

✅ Максимальный throughput (2-4x vs другие)
✅ PagedAttention — эффективная память
✅ Continuous batching — низкая latency
✅ Tensor parallelism — multi-GPU
✅ Speculative decoding — 2x speedup
✅ Production-ready
✅ OpenAI-compatible API
✅ Support для 70B+ моделей

Недостатки

❌ Только Linux + CUDA (нет macOS)
❌ Сложная настройка
❌ Нет Web UI
❌ Только Python
❌ Требует много RAM для больших моделей
❌ Нет CPU inference

Конфигурация

from vllm import LLM, SamplingParams

llm = LLM(
    model="meta-Llama/Meta-Llama-3-70B",
    tensor_parallel_size=4,        # 4 GPU
    gpu_memory_utilization=0.9,    # 90% GPU memory
    max_model_len=4096,            # max context
    swap_space=16,                 # CPU swap (GB)
    cache_dtype="fp8",             # KV cache quantization
    enforce_eager=False,           # 0 for speed, True for debug
)

Когда использовать vLLM?

- Production serving (high throughput)
- Multi-GPU setup
- Linux + NVIDIA GPU
- API для нескольких клиентов
- 70B+ модели
- High-concurrency scenarios

LM Studio

Что это?

LM Studio — GUI-приложение для запуска LLM локально. Не требует командной строки.

Установка

Скачать с https://lmstudio.ai/
macOS / Windows / Linux

Использование

1. Открыть LM Studio
2. Search: "Llama 3.2 3B Q4_K_M"
3. Download
4. Chat — готово!

Преимущества

✅ Полностью GUI — никаких команд
✅ Встроенный chat interface
✅ 1000+ моделей в каталоге
✅ Auto GPU offload
✅ OpenAI-compatible API (localhost:1234)
✅ Hot-swap моделей
✅ Preview — посмотреть до 100 токенов
✅ Поддержка GGUF

API от LM Studio

# LM Studio запускает сервер на localhost:1234
curl http://localhost:1234/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "local-model",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ]
  }'

Недостатки

❌ Нет multi-GPU
❌ Нет continuous batching
❌ Один клиент за раз (без API)
❌ Меньше контроля
❌ Не для production
❌ Больше потребление памяти

Когда использовать LM Studio?

- Новички (без CLI)
- Тестирование моделей
- Быстрый chat
- Разработка с GUI
- Single-user scenarios

llama.cpp

Что это?

llama.cpp — C-реализация LLM inference. Основа для всех GGUF инструментов.

Установка

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# С CUDA
make LLAMA_CUDA=1

# С Metal (macOS)
make LLAMA_METAL=1

Запуск

# Сервер
./server -m model.gguf \
  --host 0.0.0.0 \
  --port 8080 \
  -c 4096 \
  --ngl 35

# CLI
./main -m model.gguf \
  -p "Hello, my name is" \
  -n 128 \
  -t 8

# Interactive
./main -m model.gguf -i

API

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "model",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ]
  }'

Преимущества

✅ Работает на CPU (без GPU!)
✅ Минимальные требования
✅ GGUF native
✅ llama.cpp сервер — OpenAI API
✅ Embeddings через embeddings endpoint
✅ Основа для Ollama, LM Studio, Continue
✅ WebAssembly — работает в браузере!
✅ Tiny: 7B модель на 4GB RAM

Недостатки

❌ Нет multi-GPU parallelism
❌ Нет continuous batching
❌ Сложная настройка (CLI)
❌ Меньше оптимизаций
❌ Требуется компиляция для кастомных фич

GPU Offload настройки

# Сколько слоев на GPU
--ngl 35        # 35 слоев на GPU (остальные на CPU)

# Полностью на GPU
--ngl 99

# Только CPU
--ngl 0

# Автоматический выбор
# llama.cpp сам определяет сколько влезает

Когда использовать llama.cpp?

- CPU-only machines
- Embedded devices (Raspberry Pi!)
- Browser inference (WebLLM)
- Когда нужен контроль
- Когда другие не работают
- Как база для кастомных решений

Сравнение производительности

Throughput (tok/s на A100 80GB)

Модель          | vLLM   | Ollama | llama.cpp
Llama 3 8B      | 340    | 180    | 120
Llama 3 70B     | 180    | N/A    | N/A
Mixtral 8x7B    | 220    | N/A    | N/A

vLLM в 2-3x быстрее Ollama на GPU

Latency (ttft, ms)

Модель          | vLLM   | Ollama | LM Studio
Llama 3 8B      | 30     | 80     | 150

vLLM быстрее всех за счёт continuous batching

Memory usage

Модель          | RAM    | VRAM
Llama 3 8B Q4   | 5GB    | 5GB
Llama 3 8B Q8   | 9GB    | 9GB
Llama 3 70B Q4  | 40GB   | 40GB

GGUF Q4: ~6GB для 8B, ~40GB для 70B

Сравнительная таблица

Фича              | Ollama | vLLM   | LM Studio | llama.cpp
Установка         | ⭐     | ⭐⭐⭐  | ⭐⭐      | ⭐⭐⭐
Скорость          | ⭐⭐   | ⭐⭐⭐  | ⭐⭐      | ⭐⭐
GPU support       | ✅    | ✅     | ✅        | ✅
CPU support       | ✅    | ❌     | ✅        | ✅
macOS             | ✅    | ❌     | ✅        | ✅
Multi-GPU         | ❌    | ✅     | ❌        | ❌
Web UI            | ❌    | ❌     | ✅        | ❌
API               | ✅    | ✅     | ✅        | ✅
Continuous batch  | ❌    | ✅     | ❌        | ❌
PagedAttention    | ❌    | ✅     | ❌        | ❌
Speculative dec.  | ❌    | ✅     | ❌        | ❌
Embeddings        | ✅    | ❌     | ❌        | ✅
Modelfile         | ✅    | ❌     | ❌        | ❌
Production        | ⭐⭐  | ⭐⭐⭐  | ⭐       | ⭐⭐
Dev/Testing       | ⭐⭐⭐ | ⭐⭐   | ⭐⭐⭐   | ⭐⭐

Что выбрать?

Быстрый старт (5 минут)

macOS → Ollama (brew install)
Linux → Ollama (install.sh)
Windows → LM Studio

Максимальная производительность

Linux + NVIDIA → vLLM
Multi-GPU → vLLM с tensor parallelism

Без GPU

CPU only → llama.cpp
CPU + удобство → Ollama (CPU mode)

Production API

High throughput → vLLM
Simple → Ollama + reverse proxy

Разработка

GUI → LM Studio
CLI → Ollama
Code → vLLM Python API

Комбинированный подход

Dev:
  LM Studio — тестирование моделей
  Ollama — быстрая разработка

Staging:
  vLLM — нагрузочное тестирование

Production:
  vLLM — high throughput serving
  Ollama — fallback / edge cases

Итоги

Сценарий Рекомендация
"Хочу запустить прямо сейчас" Ollama
"Мне нужен максимум скорости" vLLM
"Я не люблю терминал" LM Studio
"У меня только CPU" llama.cpp
"Мне нужно multi-GPU" vLLM
"Я на macOS" Ollama или LM Studio

Ссылки