Що таке 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-тарифів з достатнім обсягом оперативної пам'яті.