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
- HARTOS
- ik_llama.cpp
- local-llm (jamesob)
- msgvault
- OpenCode
- Local LLMs Deep Dive — Quants, MoE Offload, REAP, ik_llama, Speculative Decoding
- Coding-Agent Tests of Local LLMs on 16 GB VRAM
- I Want Local Models to Work
- MoE CPU Offload (`--n-cpu-moe`)
- 80 tok/s + 128K Context on 12GB VRAM — Qwen3.6 + MTP
- Speculative Decoding
- Preferring Local OSS LLMs
- Unsloth