Что такое llama.cpp и формат GGUF
llama.cpp — реализация инференса языковых моделей на C++, которая работает без видеокарты, используя только процессор и оперативную память. Модели хранятся в формате GGUF: это один файл со всеми весами, метаданными и токенизатором, который легко скачать и запустить одной командой. Формат сменил устаревший GGML и стал стандартом для CPU-инференса.
Такой запуск подходит для VDS без GPU, для тестов на слабом железе и для случаев, когда модель нужна редко и держать дорогую видеокарту невыгодно. Если сервер уже оснащён GPU, быстрее работает vLLM, а llama.cpp остаётся резервным вариантом или основным на бюджетном тарифе.
Чем отличаются уровни квантования GGUF
Квантование уменьшает точность весов модели, чтобы сжать файл и ускорить вычисления на CPU. Чем ниже число бит, тем меньше размер и требования к памяти, но выше потеря качества ответов.
| Квантование | Бит на вес | Размер 7B-модели | Качество |
|---|---|---|---|
| Q8_0 | 8 | ~7.2 ГБ | почти как fp16 |
| Q6_K | 6 | ~5.5 ГБ | очень близко к оригиналу |
| Q5_K_M | 5 | ~4.8 ГБ | хороший баланс |
| Q4_K_M | 4 | ~4.1 ГБ | заметная, но небольшая потеря |
| Q2_K | 2 | ~2.8 ГБ | сильная деградация |
Для большинства задач оптимален Q4_K_M или Q5_K_M — они экономят память и почти не портят ответы модели.
Установка llama.cpp на сервере
Соберите проект из исходников: это даёт актуальную версию и оптимизацию под процессор конкретного сервера.
sudo apt update
sudo apt install -y build-essential cmake git
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j
После сборки бинарники появятся в каталоге build/bin. Проверьте число ядер процессора командой nproc — этот параметр указывается при запуске для полной загрузки CPU.
Как скачать модель и запустить инференс
Готовые файлы GGUF публикуют на Hugging Face — достаточно скачать один файл с нужным уровнем квантования и передать путь к нему в бинарник.
wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf
./build/bin/llama-cli -m llama-2-7b-chat.Q4_K_M.gguf -p "Опиши коротко облачный сервер" -n 200 -t 8
Параметр -t задаёт число потоков CPU, -n — максимальную длину ответа. Для постоянной работы удобнее поднять сервер с HTTP API — см. также готовый интерфейс Text Generation WebUI, который умеет работать поверх llama.cpp.
Как выбрать квантование под объём памяти сервера
Опирайтесь на объём свободной оперативной памяти, а не только на размер файла модели — во время работы нужен запас под контекст и систему.
- 8 ГБ RAM — модели 7B в Q4_K_M, без параллельных задач на сервере.
- 16 ГБ RAM — модели 7B в Q6_K или Q8_0, либо модели 13B в Q4_K_M.
- 32 ГБ RAM — модели 13B в Q6_K или модели 30B в Q4_K_M.
- Свободной памяти всегда должно оставаться на 20–30 % больше размера файла модели под контекст и кэш KV.
Точный расчёт видеопамяти для GPU-сценария смотрите в статье сколько VRAM нужно модели — принцип расчёта похож, только вместо VRAM считается RAM.
Типичные ошибки при первом запуске
Большинство проблем на старте решаются без переустановки:
- Процесс завершается сразу — не хватает оперативной памяти под выбранный уровень квантования, возьмите файл меньшего размера.
- Ответ генерируется очень медленно — проверьте параметр
-tи убедитесь, что он равен числу физических ядер сервера. - Модель отвечает бессвязно — вероятно, взят слишком агрессивный уровень квантования вроде Q2_K, поднимите его до Q4_K_M.
- Сборка падает на этапе cmake — обновите компилятор и убедитесь, что установлен пакет build-essential.
После успешного теста через CLI llama.cpp готов к встраиванию в скрипты или к работе через веб-интерфейс. Такой запуск не требует GPU и подходит для большинства VDS-тарифов с достаточным объёмом оперативной памяти.