by ggml-org / Georgi Gerganov GGUF-модели (Llama, Mistral, Qwen и др.), CPU/CUDA/Metal/Vulkan
Инференс LLM на чистом C/C++ без тяжёлых зависимостей — работает буквально везде: от смартфона и Raspberry Pi до серверных GPU-кластеров. Формат GGUF и квантование, которые сделали возможным запуск больших моделей на потребительском железе, родом именно отсюда. Фундаментальный проект, на котором построена значительная часть локальной LLM-экосистемы.
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-сервер с веб-интерфейсом
Манифест / ggml / операции / PR-запросы сопровождающих
Вывод LLM на C/C++
-hf, теперь сохраняются в стандартном каталоге кэша Hugging Face, что позволяет делиться ими с другими инструментами HF.gpt-oss с нативным форматом MXFP4 | PR | Сотрудничество с NVIDIA | Комментарийllama-server: #12898 | документацияНачать работу с llama.cpp просто. Вот несколько способов установить его на ваш компьютер:
llama.cpp с помощью brew, nix, winget или conda-forgeПосле установки вам понадобится модель для работы. Перейдите в раздел Получение и квантизация моделей, чтобы узнать больше.
Пример команды:
# 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 с минимальной настройкой и современной производительностью на широком
спектре оборудования — локально и в облаке.
Проект llama.cpp является основной площадкой для разработки новых функций для библиотеки ggml.
Модели
Как правило, также поддерживаются файнтюны указанных ниже базовых моделей.
Инструкции по добавлению поддержки новых моделей: HOWTO-add-model.md
Привязки
Пользовательские интерфейсы
(чтобы попасть в этот список, проект должен явно указывать на зависимость от llama.cpp)
Инструменты
Инфраструктура
Игры
| Бэкенд | Целевые устройства |
|---|---|
| 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:
llama.cpp в облаке (подробнее: https://github.com/ggml-org/llama.cpp/discussions/9669)Чтобы узнать больше о квантизации моделей, прочитайте эту документацию
llama-clillama.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-сервера с конфигурацией по умолчанию на порту 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Измерение перплексии для текстового файла
```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-simplellama.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 ```
llama.cpp и сливать PR в ветку master.Если ваша проблема связана с качеством генерации модели, то, пожалуйста, хотя бы просмотрите следующие ссылки и статьи, чтобы понять ограничения моделей LLaMA. Это особенно важно при выборе подходящего размера модели и понимании как значительных, так и тонких различий между моделями LLaMA и ChatGPT: - LLaMA: - Представление LLaMA: фундаментальная, 65-миллиардная большая языковая модель - LLaMA: Открытые и эффективные фундаментальные языковые модели - GPT-3 - Языковые модели — обучаемые на нескольких примерах - GPT-3.5 / InstructGPT / ChatGPT: - Настройка языковых моделей для выполнения инструкций - Обучение языковых моделей следовать инструкциям с обратной связью от человека
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 и контрольную сумму.
Автодополнение командной строки доступно для некоторых сред.
$ build/bin/llama-cli --completion-bash > ~/.llama-completion.bash
$ source ~/.llama-completion.bash
При необходимости это можно добавить в ваш .bashrc или .bash_profile для автоматической загрузки. Например:
$ echo "source ~/.llama-completion.bash" >> ~/.bashrc
llama-server - Лицензия MIT