EnglishРусский Map

llama.cpp

title
llama.cpp
type
toolbox
summary
Движок инференса на C/C++ для GGUF-моделей с открытыми весами, основа большинства инструментов локальных LLM
tags
llm, inference, local-models, cpp
language
C/C++
license
MIT
created
2026-05-13
updated
2026-05-13
lang
ru
translation_of
llama-cpp
source_updated
2026-05-13
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-high

Движок LLM-инференса на C/C++ от Георгия Герганова. Эталонная реализация для запуска LLM с открытыми весами в формате GGUF на CPU и GPU. Большинство других инструментов для локальных LLM (Ollama, LM Studio, koboldcpp, llamafile) являются обёртками над ним.

Что он делает

llama.cpp загружает квантованные веса моделей (формат GGUF), выполняет прямой проход (forward pass) и предоставляет HTTP API, совместимый с OpenAI. Реализация написана на чистом C/C++ с бэкенд-драйверами для CUDA, Metal, ROCm, Vulkan, SYCL и CPU. Форматы квантования - Q2, Q3, Q4, Q5, Q6, Q8 с различными схемами блоков - встроены прямо в формат файла; отдельный runtime для загрузки Q4_K_M или MXFP4 не требуется.

Причина, по которой проект стал эталонным: Герганов реализует архитектурную поддержку новых моделей напрямую. Поэтому при выходе новой модели (Gemma 4, Qwen 3.6, DeepSeek V4) поддержка сначала появляется в llama.cpp, а уже затем переходит во все остальные инструменты.

Зачем собирать из исходников

Готовые сборки обёрток (Ollama, LM Studio) поставляются с универсальными бинарниками, рассчитанными на широкую совместимость с железом. В них отсутствуют оптимизации под конкретные архитектуры. Вячеслав сообщает о потере пропускной способности до 30% при запуске через LM Studio или Ollama по сравнению с локально собранным llama.cpp с поддержкой тензорных ядер Blackwell. На 16 ГБ VRAM, где важен каждый токен в секунду, эта разница определяет, пригодна система к использованию или нет.

Сборка из исходников также даёт доступ к флагам, которые обёртки скрывают:

  • --n-cpu-moe N - выгрузка блоков экспертов для N слоёв в системную RAM; ключевой флаг для запуска MoE-моделей при малом объёме VRAM (см. moe-cpu-offload)
  • -fit / -fitt N - более свежий режим по умолчанию, который автоматически определяет тип модели (MoE или Dense) и выбирает схему выгрузки, оставляя свободными N МБ VRAM (см. moe-cpu-offload)
  • --cache-type-k, --cache-type-v - точность KV-кэша (q8_0, q4_0, f16); снижение точности вдвое уменьшает расход памяти на токен вдвое (см. kv-cache-sizing); форк llama-cpp-turboquant добавляет turbo4 / turbo3 для более высокого качества при том же объёме памяти (см. random-rotation-quantization)
  • --flash-attn 1 - Flash Attention; даёт ощутимое ускорение на поддерживаемом оборудовании
  • --jinja - рендеринг чат-шаблонов через Jinja для корректных форматов вызова инструментов (tool calls); необходим, чтобы агентские среды видели список инструментов
  • --reasoning off, --reasoning-budget 0 - переключение генерации в режиме рассуждений (reasoning mode; для Qwen одного этого флага недостаточно - см. thinking-mode-rule-erosion)
  • --spec-type mtp|eagle3|ngram-mod|draft - спекулятивное декодирование (PR #22673 для MTP, #18039 для EAGLE3, #19164 для ngram-mod); см. speculative-decoding

Выгрузка MoE с учётом архитектуры

Главная практическая возможность для пользователей с небольшим объёмом VRAM - флаг --n-cpu-moe. Он разделяет модель Mixture-of-Experts с учётом её архитектуры: слои внимания остаются в VRAM, а неактивные блоки экспертов сбрасываются в RAM и подгружаются по PCIe только тогда, когда их выбирает роутер. В тестах local-llm-16gb-vram-tests на Qwen 3.6 это даёт прирост пропускной способности на 50-60% по сравнению с наивной выгрузкой через --n-gpu-layers.

Базовый запуск сервера

llama-server \
  --model "gemma-4-26B-A4B-it-MXFP4_MOE.gguf" \
  --ctx-size 32768 \
  --n-gpu-layers 999 \
  --n-cpu-moe 8 \
  --flash-attn 1 \
  --cache-type-k q8_0 \
  --cache-type-v q8_0 \
  --batch-size 512 \
  --ubatch-size 512 \
  --reasoning off \
  --jinja \
  --temp 0.7 \
  --top-p 0.8 \
  --top-k 20 \
  --no-mmap

Поднимает OpenAI-совместимый API на localhost:8080. Агентские среды (OpenCode, Cline, Roo Code и т. д.) подключаются к нему как к стороннему провайдеру.

Ограничения

  • По умолчанию отсутствует потоковая передача параметров инструментов в эндпоинте стиля OpenAI - вызовы инструментов буферизуются и отдаются атомарно. Это один из пробелов в UX локальных LLM, на который жалуется Ронахер, и причина, по которой coding-агенты на llama.cpp работают с более заметными задержками, чем на хостинг-провайдерах.
  • Тюнинг параметров сугубо эмпирический. Нет "автоматической" конфигурации, которая сама подберёт --n-cpu-moe, размеры батчей или тип квантования. Модели MoE, поддерживаемые сообществом, требуют немного разных настроек.
  • Нет нативной поддержки нетекстовых модальностей - для моделей с обработкой изображений и звука требуются llava-cpp, whisper.cpp или специализированные форки.

Связанные страницы

  • mixture-of-experts - архитектура, на которую рассчитаны MoE-возможности llama.cpp
  • llm-quantization - форматы Q4_K_M, MXFP4, UD-Q4_K_XL, которые загружает llama.cpp
  • OpenCode - среда для агентов, хорошо работающая в связке с llama.cpp
  • lucumr-local-models - аргументы Ронахера в пользу специализированных альтернатив в стиле ds4.c вместо универсальных GGUF-исполнителей

Репозиторий: https://github.com/ggml-org/llama.cpp · ~96k звёзд · MIT