Inference

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

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер