Вы запускаете Llama 3 70B на сервере с 64 GB RAM и без GPU? Ошибка out-of-memory, latency 50+ секунд на токен — знакомая боль. Наша команда решила эту проблему для десятка проектов: используем llama.cpp с GGUF-квантизацией. Результат: 5–12 token/sec на двухсокетном Xeon, модель полностью on-premise, никаких облачных расходов. Кроме того, настройка гибрида CPU+GPU позволяет выжать до 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.
Пошаговая настройка гибрида
- Скомпилируйте 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 недель в зависимости от сложности. Стоимость рассчитывается индивидуально после анализа вашего железа и требований. Получите консультацию — оценим проект бесплатно. Наш опыт: 5+ лет в MLOps, 40+ проектов по внедрению LLM. Свяжитесь с нами, чтобы обсудить оптимизацию вашего инференса.







