llama.cpp
Инференс-движок для LLM на C++, поддерживающий квантизацию и работу на CPU и GPU.
Что такое llama.cpp
llama.cpp — проект Георгия Гергманова, написанный на чистом C/C++ без тяжёлых зависимостей. Цель — запускать современные LLM на любом железе: от MacBook до серверного GPU, включая CPU-only окружения. Поддерживает собственный формат весов GGUF, который объединяет метаданные модели и квантизованные веса в одном файле.
Для GPU llama.cpp использует CUDA (NVIDIA), Metal (Apple), ROCm (AMD) или Vulkan, автоматически распределяя слои между GPU и CPU (-ngl — число слоёв на GPU).
Ключевые возможности
- GGUF-квантизация — Q2_K, Q4_K_M, Q5_K_M, Q8_0 и другие форматы; Q4_K_M оптимален для баланса качество/скорость
- CPU + GPU гибрид — часть слоёв на GPU, остальные на RAM через
-ngl - Встроенный HTTP-сервер — OpenAI-совместимый API через
llama-server - Минимальные зависимости — cmake + компилятор, работает на Linux, macOS, Windows
- Поддержка контекста до 128K — с RoPE scaling для длинных диалогов
Когда выбирать llama.cpp
llama.cpp оптимален для тонких инстансов с ограниченной VRAM, dev-окружений и случаев, когда важна CPU-offload стратегия (модель больше VRAM). Для production-нагрузки с высоким параллелизмом предпочтительнее vLLM.
Быстрый старт
# Сборка с CUDA
cmake -B build -DGGML_CUDA=ON && cmake --build build -j $(nproc)
# Запуск сервера (все слои на GPU)
./build/bin/llama-server \
-m models/mistral-7b-instruct-q4_k_m.gguf \
-c 4096 \
-ngl 999 \
--port 8080
# Скачать готовую GGUF-модель с HuggingFace
huggingface-cli download \
bartowski/Mistral-7B-Instruct-v0.3-GGUF \
Mistral-7B-Instruct-v0.3-Q4_K_M.gguf \
--local-dir models/
Запрос к серверу:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "local", "messages": [{"role": "user", "content": "Привет!"}]}'
Выбор формата квантизации
| Формат | Размер 7B | Потеря качества | Рекомендация |
|---|---|---|---|
| Q2_K | ~2.7 ГБ | высокая | Только при крайне малой VRAM |
| Q4_K_M | ~4.1 ГБ | минимальная | Оптимальный выбор |
| Q5_K_M | ~4.8 ГБ | незначительная | Если VRAM позволяет |
| Q8_0 | ~7.7 ГБ | почти нет | Почти как FP16 |
Связанные термины
- GGUF — формат файлов, используемый llama.cpp
- квантизация — принцип снижения битности весов
- serving — запуск модели как сетевого сервиса
- Подробный гайд по llama.cpp
Готовы запустить GPU-задачу?
Запустить GPU-сервер