localaiforum
Войти
Руководство › Запуск и обслуживание

Сравнение инференс-движков

Движок — это программа, превращающая веса в токены: она загружает файл, прогоняет прямой проход трансформера и обычно сверху говорит по HTTP. Хорошая новость: почти каждый движок гоняет одну и ту же модель примерно с одной скоростью на одном железе — выбор движка про воркфлоу, поддержку форматов и параллелизм, а не про сырой tok/s. Плохая новость та же: шопинг по бенчмаркам между ними — в основном потраченное усилие.

Поле

Движок Что это Форматы Охват железа Создан для
llama.cpp Ядро инференса на C/C++ со встроенным сервером GGUF CPU, CUDA, ROCm, Metal, Vulkan — широчайший охват Фундамент; работает почти везде
Ollama llama.cpp в обёртке с библиотекой моделей, CLI и REST GGUF Всё, что тянет llama.cpp Десктоп без трения
LM Studio Отполированный GUI плюс OpenAI-совместимый сервер GGUF (и MLX на Mac) Windows/macOS/Linux GUI Люди, которым нужны кнопки, а не флаги
vLLM Python-движок обслуживания: paged attention, непрерывный батчинг safetensors CUDA (плюс некоторая поддержка ROCm/TPU) Обслуживание датацентр-класса с параллелизмом
SGLang Движок обслуживания с префикс-кэшированием RadixAttention safetensors CUDA Быстрый структурированный вывод; агенты с общими префиксами
exllamav2 Только-GPU загрузчик, заточенный под скорость декодирования EXL2, GPTQ только CUDA Максимум однопользовательских tok/s на одной потребительской NVIDIA GPU
MLX Фреймворк массивов Apple; mlx-lm запускает модели на нём MLX Apple silicon Быстрый практичный путь на свежих Mac
transformers (HF) Референсная реализация, с которой всё портируют safetensors CPU, CUDA Проверки корректности, эксперименты, обвязка обучения

Заметка о родословной: Ollama и LM Studio оба гоняют llama.cpp под капотом. Сравнение их с llama.cpp — сравнение упаковки, а не инференса.

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

Глубокие разрезы

vLLM родился из озарения paged attention (см. параллелизм): обращайтесь с памятью GPU так, как ОС обращается с RAM — и влезает куда больше запросов. Это ответ по умолчанию на «у меня GPU-сервер и реальный трафик».

SGLang кэширует префиксы между запросами (RadixAttention): если 40 агентов делят один и тот же двухстраничный системный промпт, он обрабатывается один раз, а не 40. Также известен быстрым ограниченным декодированием — см. структурированный вывод.

exllamav2 — острый край ровно для одной ниши: один пользователь на одной NVIDIA GPU, желающий максимум tok/s на бит квантизации. Серверная история и широта железа тонкие; ниша реальна.

MLX — ML-фреймворк Apple, построенный под единую память. На момент написания mlx-lm часто обгоняет Metal-путь llama.cpp на крупных моделях — достаточно близко, чтобы на Mac стоило попробовать оба (подробнее в Apple Silicon).

transformers — медленный, верный референс: когда квантованный движок делает что-то странное, прогон той же модели через него отвечает на вопрос «это движок или модель?». Это также труба под инструментами дообучения (см. дообучение).

Выбирайте по потребности

Вы... Начните с
Чатите за своим столом Ollama или LM Studio
Скриптуете из шелла (пайпы, cron, мелкие утилиты) REST API Ollama или llama-server
Строите бэкенд приложения с лёгким трафиком llama-server — один процесс, ноль ops
Обслуживаете много одновременных пользователей vLLM или SGLang
Гоняете флот агентов с длинными общими системными промптами SGLang или vLLM; см. агенты
Полностью Mac-хозяйство Сначала Ollama/LM Studio; MLX, если хочется скорости

Две заметки к таблице:

  • «Начните с» — не «остановитесь на»: каждый десктопный движок читает тот же GGUF, поэтому попробовать второй стоит пять минут, а не миграцию.
  • Когда всё же сравниваете, держите всё постоянным: одна модель, один квант, один промпт, модель уже прогрета.

Разделение форматов отражает разделение десктоп/сервер

GGUF против safetensors (см. форматы моделей) — не просто предпочтение контейнера: оно определяет ваш движок. GGUF — однофайловый, предквантованный, везде-работающий формат, и вся десктопная экосистема (llama.cpp, Ollama, LM Studio) построена на нём. safetensors — формат шардированных тензоров экосистемы Hugging Face; высокопроизводительные серверные движки (vLLM, SGLang, transformers) потребляют его, обычно квантуя на лету (варианты AWQ/GPTQ), а не предупакованным.

Так что настоящее дерево решений короткое: десктоп и один пользователь → GGUF-движки; сервер и параллелизм → safetensors-движки. Всё остальное — детали.

Когда что-то «не запускается», первым делом проверьте формат — половина случаев «движок X не может запустить модель Y» это несовпадение GGUF/safetensors, а не пробел в возможностях.

Накладные расходы — не история

На одинаковом железе с одинаковым квантом движки попадают примерно в 10–20% друг от друга для однопоточного декодирования — часто потому, что делят бэкенд. Что реально двигает вашу ощущаемую скорость в разы, а не на проценты:

  • Загружена ли уже модель — холодная загрузка стоит от секунд до минуты.
  • Пересылается ли весь разговор каждую реплику — стоимость контекста, см. токены.
  • Выстраиваются ли запросы друг за другом — см. параллелизм.
  • Сидят ли слои на GPU — см. параметры движка.
Та же GPU, та же 8B Q4_K_M, один поток (иллюстративно, не спеки):
llama.cpp / Ollama / LM Studio    ~130–145 tok/s   (один движок под капотом)
exllamav2 EXL2 ~4bpw              ~160–180 tok/s   (загрузчик, заточенный под декодирование)

Та же GPU, 8 одновременных чат-потоков:
llama-server serial queue         каждый поток ждёт; суммарная пропускная способность плоская
vLLM                              все потоки почти на однопоточной скорости

Выберите движок под ваш воркфлоу, затем тратьте энергию на паттерны ввода-вывода, а не на бенчмарки движков.

Один файл, много движков

GGUF, скачанный для Ollama, запускается и в llama.cpp напрямую, и в LM Studio — движки не конвертируют и не перекачивают; вы указываете им на тот же файл (Ollama умеет импортировать локальный путь однострочным Modelfile). То же серверно для safetensors между vLLM и SGLang. Практическое следствие: файловой привязки к вендору нет, а ошибка в выборе движка стоит вам минуты.

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

Когда перерасти Ollama

Дефолты Ollama превосходны, пока не перестают. Переходите к движку обслуживания, когда:

  • Вам нужен устойчивый параллелизм сверх нескольких потоков (см. параллелизм).
  • Вы хотите кэширование префиксов для многих агентов с общим системным промптом (SGLang).
  • Вам нужно обслуживать AWQ/GPTQ safetensors-кванты напрямую из экосистемы HF.
  • Вы тестируете нагрузку на фичу продукта перед релизом.
  • Вам нужен тензорный параллелизм на мульти-GPU, чтобы уложить одну большую модель на карты.

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

Связанные разделы: форматы моделей · параметры движка · развёртывание эндпоинта · выбор модели