llama.cpp

by ggml-org / Georgi Gerganov · GGUF-модели (Llama, Mistral, Qwen и др.), CPU/CUDA/Metal/Vulkan

Framework Dev Tools Open Source

Инференс LLM на чистом C/C++ без тяжёлых зависимостей — работает буквально везде: от смартфона и Raspberry Pi до серверных GPU-кластеров. Формат GGUF и квантование, которые сделали возможным запуск больших моделей на потребительском железе, родом именно отсюда. Фундаментальный проект, на котором построена значительная часть локальной LLM-экосистемы.

Добавлен 27.07.2026 · Обновлён 27.07.2026 · Dev Tools
Установка
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON   # убрать флаг для CPU-only сборки
cmake --build build --config Release

./build/bin/llama-cli -m model.gguf -p "Привет"
./build/bin/llama-server -m model.gguf   # HTTP-сервер с веб-интерфейсом
переведено ИИ

llama.cpp

llama

Лицензия: MIT Релиз Сервер Docker Winget

Манифест / ggml / операции / PR-запросы сопровождающих

Вывод LLM на C/C++

Недавние изменения API

Актуальные темы


Быстрый старт

Начать работу с llama.cpp просто. Вот несколько способов установить его на ваш компьютер:

После установки вам понадобится модель для работы. Перейдите в раздел Получение и квантизация моделей, чтобы узнать больше.

Пример команды:

# Use a local model file
llama-cli -m my_model.gguf

# Or download and run a model directly from Hugging Face
llama-cli -hf ggml-org/gemma-3-1b-it-GGUF

# Launch OpenAI-compatible API server
llama-server -hf ggml-org/gemma-3-1b-it-GGUF

Основная информация

Главная цель llama.cpp — обеспечить вывод LLM с минимальной настройкой и современной производительностью на широком спектре оборудования — локально и в облаке.

  • Чистая реализация на C/C++ без каких-либо зависимостей
  • Apple silicon является первоклассным гражданином — оптимизировано через фреймворки ARM NEON, Accelerate и Metal
  • Поддержка AVX, AVX2, AVX512 и AMX для архитектур x86
  • Поддержка RVV, ZVFH, ZFH, ZICBOP и ZIHINTPAUSE для архитектур RISC-V
  • Целочисленная квантизация 1.5-бит, 2-бит, 3-бит, 4-бит, 5-бит, 6-бит и 8-бит для более быстрого вывода и уменьшения использования памяти
  • Пользовательские CUDA-ядро для запуска LLM на графических процессорах NVIDIA (поддержка графических процессоров AMD через HIP и Moore Threads через MUSA)
  • Поддержка бэкендов Vulkan и SYCL
  • Гибридный вывод CPU+GPU для частичного ускорения моделей, размер которых превышает общий объем видеопамяти

Проект llama.cpp является основной площадкой для разработки новых функций для библиотеки ggml.

Модели

Как правило, также поддерживаются файнтюны указанных ниже базовых моделей.

Инструкции по добавлению поддержки новых моделей: HOWTO-add-model.md

Только текст

Мультимодальные

Привязки

Пользовательские интерфейсы

(чтобы попасть в этот список, проект должен явно указывать на зависимость от llama.cpp)

Инструменты

  • akx/ggify – загрузка моделей PyTorch из Hugging Face Hub и их конвертация в GGML
  • akx/ollama-dl – загрузка моделей из библиотеки Ollama для использования напрямую с llama.cpp
  • crashr/gppm – запуск экземпляров llama.cpp с использованием GPU NVIDIA Tesla P40 или P100 со снижением энергопотребления в простое
  • gpustack/gguf-parser – просмотр/проверка файла GGUF и оценка использования памяти
  • Styled Lines (проприетарная лицензия, асинхронная обёртка для части вывода, используемая в разработке игр в Unity3d с предсобранными обёртками для мобильных и веб-платформ, а также с примером модели)
  • unslothai/unsloth – 🦥 экспортирует/сохраняет дообученные и обученные модели в формат GGUF (Apache-2.0)

Инфраструктура

  • Paddler - Открытая LLMOps-платформа для размещения и масштабирования ИИ в собственной инфраструктуре
  • GPUStack - Управление GPU-кластерами для запуска LLM
  • llama_cpp_canister - llama.cpp как смарт-контракт на Internet Computer, использующий WebAssembly
  • llama-swap - прозрачный прокси, добавляющий автоматическое переключение моделей к llama-server
  • Kalavai - Краудсорсинг полного цикла развёртывания LLM любого масштаба
  • llmaz - ☸️ Простая, продвинутая платформа вывода для больших языковых моделей на Kubernetes.
  • LLMKube - Kubernetes-оператор для llama.cpp с поддержкой Multi-GPU и Apple Silicon Metal

Игры

  • Lucy's Labyrinth - Простая игра-лабиринт, где агенты, управляемые моделью ИИ, пытаются вас обмануть.

Поддерживаемые бэкенды

Бэкенд Целевые устройства
Metal Apple Silicon
BLAS Все
BLIS Все
SYCL GPU Intel
OpenVINO [В разработке] CPU, GPU и NPU Intel
MUSA GPU Moore Threads
CUDA GPU Nvidia
HIP GPU AMD
ZenDNN CPU AMD
Vulkan GPU
CANN Ascend NPU
OpenCL GPU Adreno
IBM zDNN IBM Z & LinuxONE
WebGPU Все
RPC Все
Hexagon [В разработке] Snapdragon
VirtGPU VirtGPU API

Получение и квантизация моделей

На платформе Hugging Face размещено множество LLM, совместимых с llama.cpp:

Вы можете либо вручную загрузить файл GGUF, либо напрямую использовать любую модель, совместимую с llama.cpp, из Hugging Face или других сайтов размещения моделей, с помощью этого аргумента командной строки: -hf <user>/<model>[:quant]. Например:

llama-cli -hf ggml-org/gemma-3-1b-it-GGUF

По умолчанию CLI загружает модели из Hugging Face, но вы можете переключиться на другие варианты с помощью переменной среды MODEL_ENDPOINT. MODEL_ENDPOINT должна указывать на API-эндпоинт, совместимый с Hugging Face.

После загрузки модели используйте инструменты CLI для её локального запуска - см. ниже.

llama.cpp требует, чтобы модель была сохранена в формате файла GGUF. Модели в других форматах данных могут быть конвертированы в GGUF с помощью скриптов на Python convert_*.py из этого репозитория.

Платформа Hugging Face предоставляет разнообразные онлайн-инструменты для конвертации, квантизации и размещения моделей с llama.cpp:

  • Используйте пространство GGUF-my-repo для конвертации в формат GGUF и квантизации весов модели до меньших размеров
  • Используйте пространство GGUF-my-LoRA для конвертации адаптеров LoRA в формат GGUF (подробнее: https://github.com/ggml-org/llama.cpp/discussions/10123)
  • Используйте пространство GGUF-editor для редактирования метаданных GGUF в браузере (подробнее: https://github.com/ggml-org/llama.cpp/discussions/9268)
  • Используйте Inference Endpoints для прямого размещения llama.cpp в облаке (подробнее: https://github.com/ggml-org/llama.cpp/discussions/9669)

Чтобы узнать больше о квантизации моделей, прочитайте эту документацию

llama-cli

CLI-инструмент для доступа к большинству функций llama.cpp и экспериментов с ними.

Запуск в режиме разговора

Модели со встроенным шаблоном чата автоматически активируют режим разговора. Если этого не происходит, вы можете вручную включить его, добавив -cnv и указав подходящий шаблон чата с помощью --chat-template NAME

```bash llama-cli -m model.gguf

# > привет, кто ты? # Привет! Я ваш полезный помощник! Я чат-бот на базе ИИ, созданный для оказания помощи и предоставления информации пользователям, таким как вы. Я здесь, чтобы помочь ответить на ваши вопросы, дать рекомендации и оказать поддержку по широкому кругу тем. Я дружелюбный и знающий ИИ, и я всегда рад помочь вам с чем угодно. Что у вас на уме и чем я могу помочь вам сегодня? # # > сколько будет 1+1? # Легко! Ответ на 1+1 это... 2! ```

Запуск в режиме разговора с пользовательским шаблоном чата

```bash # используйте шаблон "chatml" (используйте -h для просмотра списка поддерживаемых шаблонов) llama-cli -m model.gguf -cnv --chat-template chatml

# используйте пользовательский шаблон llama-cli -m model.gguf -cnv --in-prefix 'User: ' --reverse-prompt 'User:' ```

Ограничение вывода с помощью пользовательской грамматики

```bash llama-cli -m model.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Request: schedule a call at 8pm; Command:'

# {"appointmentTime": "8pm", "appointmentDetails": "schedule a a call"} ```

Папка grammars/ содержит несколько примеров грамматик. Чтобы написать собственную, ознакомьтесь с Руководством по GBNF.

Для создания более сложных JSON-грамматик посетите https://grammar.intrinsiclabs.ai/

llama-server

Легковесный HTTP-сервер, совместимый с API OpenAI, для предоставления LLM.

Запуск локального HTTP-сервера с конфигурацией по умолчанию на порту 8080

```bash llama-server -m model.gguf --port 8080

# Базовый веб-интерфейс доступен через браузер: http://localhost:8080 # Эндпоинт завершения чата: http://localhost:8080/v1/chat/completions ```

Поддержка нескольких пользователей и параллельной декодировки

bash # до 4 одновременных запросов, каждый с максимальным контекстом 4096 llama-server -m model.gguf -c 16384 -np 4

Включение спекулятивного декодирования

bash # модель draft.gguf должна быть малым вариантом целевой модели model.gguf llama-server -m model.gguf -md draft.gguf

Обслуживание модели эмбеддингов

bash # используйте эндпоинт /embedding llama-server -m model.gguf --embedding --pooling cls -ub 8192

Обслуживание модели переранжирования

bash # используйте эндпоинт /reranking llama-server -m model.gguf --reranking

Ограничение всех выводов с помощью грамматики

```bash # пользовательская грамматика llama-server -m model.gguf --grammar-file grammar.gbnf

# JSON llama-server -m model.gguf --grammar-file grammars/json.gbnf ```

llama-perplexity

Инструмент для измерения перплексии ^1 (и других метрик качества) модели на заданном тексте.

Измерение перплексии для текстового файла

```bash llama-perplexity -m model.gguf -f file.txt

# [1]15.2701,[2]5.4007,[3]5.3073,[4]6.2965,[5]5.8940,[6]5.6096,[7]5.7942,[8]4.9297, ... # Итоговая оценка: PPL = 5.4007 +/- 0.67339 ```

Измерение расхождения Кульбака-Лейблера

bash # TODO

llama-bench

Тестирование производительности инференса для различных параметров.

Запуск тестирования по умолчанию

```bash llama-bench -m model.gguf

# Вывод: # | model | size | params | backend | threads | test | t/s | # | ------------------- | ---------: | ---------: | ---------- | ------: | ------------: | -------------------: | # | qwen2 1.5B Q4_0 | 885.97 MiB | 1.54 B | Metal,BLAS | 16 | pp512 | 5765.41 ± 20.55 | # | qwen2 1.5B Q4_0 | 885.97 MiB | 1.54 B | Metal,BLAS | 16 | tg128 | 197.71 ± 0.81 | # # сборка: 3e0ba0e60 (4229) ```

llama-simple

Минимальный пример для реализации приложений с использованием llama.cpp. Полезен для разработчиков.

Базовое дополнение текста

```bash llama-simple -m model.gguf

# Hello my name is Kaitlyn and I am a 16 year old girl. I am a junior in high school and I am currently taking a class called "The Art of ```

Вклад в проект

  • Участники могут создавать PR (запросы на слияние).
  • Сотрудники приглашаются на основе вклада.
  • Maintainers могут отправлять изменения в ветки репозитория llama.cpp и сливать PR в ветку master.
  • Любой вклад в управление issues, PR и проектами очень ценится!
  • Смотрите good first issues для задач, подходящих для первого вклада.
  • Прочитайте CONTRIBUTING.md для получения дополнительной информации.
  • Обязательно прочитайте это: Inference at the edge.
  • Немного предыстории для заинтересованных: Changelog podcast.

Другая документация

Документация для разработчиков

Основополагающие статьи и информация о моделях

Если ваша проблема связана с качеством генерации модели, то, пожалуйста, хотя бы просмотрите следующие ссылки и статьи, чтобы понять ограничения моделей LLaMA. Это особенно важно при выборе подходящего размера модели и понимании как значительных, так и тонких различий между моделями LLaMA и ChatGPT: - LLaMA: - Представление LLaMA: фундаментальная, 65-миллиардная большая языковая модель - LLaMA: Открытые и эффективные фундаментальные языковые модели - GPT-3 - Языковые модели — обучаемые на нескольких примерах - GPT-3.5 / InstructGPT / ChatGPT: - Настройка языковых моделей для выполнения инструкций - Обучение языковых моделей следовать инструкциям с обратной связью от человека

XCFramework

XCFramework — это предварительно скомпилированная версия библиотеки для iOS, visionOS, tvOS и macOS. Его можно использовать в Swift-проектах без необходимости компиляции библиотеки из исходного кода. Например:

// swift-tools-version: 5.10
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "MyLlamaPackage",
    targets: [
        .executableTarget(
            name: "MyLlamaPackage",
            dependencies: [
                "LlamaFramework"
            ]),
        .binaryTarget(
            name: "LlamaFramework",
            url: "https://github.com/ggml-org/llama.cpp/releases/download/b5046/llama-b5046-xcframework.zip",
            checksum: "c19be78b5f00d8d29a25da41042cb7afa094cbf6280a225abe614b03b20029ab"
        )
    ]
)

В приведенном выше примере используется промежуточная сборка b5046 библиотеки. Это можно изменить, используя другую версию, изменив URL и контрольную сумму.

Автодополнение команд

Автодополнение командной строки доступно для некоторых сред.

Автодополнение для Bash

$ build/bin/llama-cli --completion-bash > ~/.llama-completion.bash
$ source ~/.llama-completion.bash

При необходимости это можно добавить в ваш .bashrc или .bash_profile для автоматической загрузки. Например:

$ echo "source ~/.llama-completion.bash" >> ~/.bashrc

Зависимости

  • yhirose/cpp-httplib - Однофайловый HTTP-сервер, используется llama-server - Лицензия MIT
  • stb-image - Однофайловый декодер форматов изображений, используется мультимодальной подсистемой - Public domain
  • nlohmann/json - Однофайловая JSON-библиотека, используется различными инструментами/примерами - Лицензия MIT
  • miniaudio.h - Однофайловый декодер аудиоформатов, используется мультимодальной подсистемой - Public domain
  • subprocess.h - Однофайловое решение для запуска процессов в C и C++ - Public domain
Комментарии
Войдите, чтобы оставить комментарий