Ефективний інференс LLM: llama.cpp, квантизація GGUF, гібрид CPU+GPU
Ви запускаєте Llama 3 70B на сервері з 64 GB RAM та без GPU? Помилка out-of-memory, latency 50+ секунд на токен — знайома біль. Наша команда вирішила цю проблему для десятка проектів: використовуємо llama.cpp з GGUF-квантизацією. Результат: 5–12 token/sec на двосокетному Xeon, модель повністю on-premise, жодних хмарних витрат. Крім того, налаштування гібрида CPU+GPU дозволяє витиснути до 5 разів швидший інференс порівняно з чистим CPU (20–30 token/sec на 70B моделі за наявності навіть однієї RTX 4090).
Чому llama.cpp — найкращий вибір для CPU-інференсу?
llama.cpp — C++ реалізація інференсу LLM з агресивними оптимізаціями для CPU та змішаного CPU+GPU виведення. Головна фішка — Квантизація GGUF, яка дозволяє стискати моделі без критичної втрати якості. Q4_K_M в 4 рази ефективніший за пам'яттю, ніж F16, при збереженні 96% якості — це найкращий баланс для продакшен-навантаження.
Порівняння типів квантизації для моделі 7B:
| Тип | Розмір (GB) | Якість (%) | Швидкість (token/sec на M2 Pro) |
|---|---|---|---|
| F16 | 14 | 100 | 30 |
| Q8_0 | 8 | 99 | 40 |
| Q5_K_M | 5 | 98 | 50 |
| Q4_K_M | 4 | 96 | 60 |
| Q4_0 | 3.5 | 94 | 70 |
Q4_K_M зберігає 95–98% якості F16 при розмірі в 4 рази менше — найкращий баланс для CPU-інференсу. Для продакшену ми майже завжди обираємо його, оскільки він дає прийнятну точність при мінімальному споживанні пам'яті.
Як налаштувати гібрид CPU+GPU за 1 день?
Якщо GPU пам'яті не вистачає на всю модель, llama.cpp дозволяє вивантажувати частину шарів на GPU. Типова команда для 70B моделі з 24 GB GPU:
./server -m llama-3-70b-q4km.gguf -ngl 32 --host 0.0.0.0 --port 8080
Параметр -ngl 32 вивантажує 32 шари на GPU (зазвичай це ~60% моделі). Решта — CPU. Ми автоматично підбираємо кількість шарів під ваше залізо, щоб максимізувати throughput. Ми також застосовуємо loop unrolling та SIMD-оптимізації для збільшення throughput.
Покрокове налаштування гібрида
- Скомпілюйте llama.cpp з підтримкою CUDA або Metal:
make LLAMA_CUDA=1. - Завантажте модель у GGUF-форматі (рекомендуємо Q4_K_M).
- Запустіть з параметром
-ngl N, де N — кількість шарів, що поміщаються в VRAM. - Перевірте occupancy GPU через
nvidia-smi. Мета — завантаження >90% без swapping. - Налаштуйте batch size (--batch-size) та кількість потоків (--threads) під CPU.
- Проведіть навантажувальне тестування: виміряйте p99 latency та throughput.
Які проблеми вирішуємо?
Кейс: fintech-компанія, 70B модель для аналізу транзакцій. Клієнт хотів повний on-premise без відправки даних у хмару. Залізо: 2×Xeon Gold 6248, 128 GB RAM, одна RTX A6000 (48 GB). Налаштували Q4_K_M + вивантаження 32 шарів на GPU. Підсумок: 15 token/sec, latency p99 < 200ms, економія на хмарних GPU — до $3000 на місяць. Проект впроваджено за 2 тижні. Порівняйте: хмарний API давав би 30–40 token/sec, але коштував би $5000/міс і вимагав передачі даних третій стороні.
Що входить у роботу?
- Аналіз цільового заліза та вимог до latency
- Компіляція llama.cpp з оптимізаціями під конкретний CPU (AVX2, AVX-512)
- Підбір квантизації та тестування якості
- Налаштування llama-server (OpenAI-сумісний API, batching, ліміти)
- Навантажувальне тестування з вимірюванням p99 latency
- Документація з експлуатації
Типові помилки при налаштуванні llama.cpp
- Використання збірки без AVX на старому CPU — інференс падає в 2–3 рази
- Занадто велика контекстна довжина (8192) без необхідності — latency зростає
- Неправильний вибір квантизації (наприклад, Q4_0 для критичних до точності задач)
Як збільшити швидкість інференсу на CPU?
Використовуйте збірку llama.cpp під конкретний CPU з прапорами -mavx2 або -mavx512. Оберіть квантизацію Q4_K_M. Зменшіть контекстну довжину (наприклад, 4096 замість 8192). Вимкніть непотрібні шари уваги, якщо модель дозволяє. Збільшіть кількість потоків (--threads) до числа фізичних ядер. При двосокетній конфігурації налаштуйте NUMA-балансування. Ці кроки дають приріст у 2–4 рази на CPU.
Продуктивність на реальному залізі
| Модель | Розмір Q4_K_M | Hardware | Speed (token/sec) |
|---|---|---|---|
| Llama 3.2 3B | 2 GB | M2 Pro | 60–80 |
| Llama 3 8B | 5 GB | M2 Max | 40–60 |
| Llama 3 8B | 5 GB | RTX 4090 | 100–120 |
| Llama 3 70B | 40 GB | 2×Xeon + RTX 4090 | 20–30 |
| Llama 3 70B | 40 GB | 2×Xeon (CPU only) | 5–12 |
Терміни та вартість
Налаштування інференсу займає від 1 до 3 тижнів залежно від складності. Базова вартість налаштування — від $1500. Вартість розраховується індивідуально після аналізу вашого заліза та вимог. Ми маємо сертифікацію NVIDIA та надаємо гарантію на працездатність рішення протягом 6 місяців. Отримайте консультацію — оцінимо проект безкоштовно. Наш досвід: 5+ років у MLOps, 40+ проектів із впровадження LLM. Зв'яжіться з нами, щоб обговорити оптимізацію вашого інференсу.







