Оптимизация инференса LLM: llama.cpp, квантизация GGUF, гибрид

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Оптимизация инференса LLM: llama.cpp, квантизация GGUF, гибрид
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    949
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1183
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    921

Вы запускаете 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.

Пошаговая настройка гибрида
  1. Скомпилируйте llama.cpp с поддержкой CUDA или Metal: make LLAMA_CUDA=1.
  2. Загрузите модель в GGUF-формате (рекомендуем Q4_K_M).
  3. Запустите с параметром -ngl N, где N — число слоёв, помещающихся в VRAM.
  4. Проверьте occupancy GPU через nvidia-smi. Цель — загрузка >90% без swapping.
  5. Настройте batch size (--batch-size) и количество потоков (--threads) под CPU.
  6. Проведите нагрузочное тестирование: измерьте 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. Свяжитесь с нами, чтобы обсудить оптимизацию вашего инференса.

Edge AI и оптимизация: деплой моделей без облака

Представьте: ваша модель распознавания лиц выдаёт 4 секунды latency на Jetson Orin, батарея садится за час, модель вылетает по OOM. Мы — команда инженеров по Edge AI с 5+ лет опыта — оптимизировали более 150 моделей для граничных устройств. Без профилирования и правильного выбора квантизации или дистилляции проект обречён. Разрыв между исследовательским кодом и edge-деплоем — отдельная инженерная дисциплина, мы помогаем её освоить за 2–16 недель под ключ. Услуги Edge AI и оптимизация моделей — это не просто экспорт, а системная работа с железом.

Почему просто «экспортировать модель» не работает

PyTorch-модель с float32 и batch_size=32 не готова к edge. Типичные проблемы:

  • ResNet-50 в fp32 занимает 98 MB, inference на Cortex-A78 — 380 мс. После INT8-квантизации torch.ao.quantization — 24 MB, 95 мс. Экспорт в ONNX + TensorRT на Jetson — 28 мс.
  • YOLOv8m на Raspberry Pi 5 в fp32 — 2.8 fps. TFLite INT8 — 9.4 fps. С XNNPACK делегатом — 14 fps.
  • Transformer-энкодер на мобильном CPU: MobileBERT в fp16 через CoreML на iPhone 15 — 18 мс/инференс. distilbert-base-uncased в ONNX — 42 мс.

Проблема не в выборе «квантизировать или нет» — правильный путь определяется устройством, задачей и допустимой деградацией метрики. Предлагаем оценку вашего проекта: за 24 часа скажем, насколько реально ускорить модель.

Какой метод квантизации выбрать для вашей задачи?

PTQ (Post-Training Quantization) — быстрый путь. Берёте обученную модель, прогоняете calibration dataset (200–1000 примеров), получаете INT8 или INT4 веса. Инструменты: torch.ao.quantization, ONNX Runtime quantization tool, bitsandbytes. Деградация точности: 0.5–2% на классификации. Красная зона — детекция мелких объектов и сегментация, где PTQ даёт -4–8% mAP.

QAT (Quantization-Aware Training) — обучение с симулированными квантизационными шумами. Дороже (переобучение), но деградация 0.1–0.5%. Оправдано, когда PTQ неприемлем. В PyTorch — torch.ao.quantization.prepare_qat().

GPTQ / AWQ — для LLM. AWQ лучше сохраняет качество при 4-bit квантизации. llm-compressor от Neural Magic или autoawq — основные библиотеки.

Метод Время реализации Деградация точности Инструменты
PTQ 1–2 дня 0.5–2% (до 8% на детекции) torch.ao, ONNX RT, bitsandbytes
QAT 1–3 недели 0.1–0.5% torch.ao.prepare_qat, TF Quantization
GPTQ/AWQ 3–7 дней 1–3% (LLM) autoawq, llm-compressor

Экономия от выбора правильного метода: до 350 000 ₽ в год на облачных инстансах за счёт снижения latency и энергопотребления. Стоимость проекта рассчитывается индивидуально — диапазон от 100 000 до 500 000 ₽ в зависимости от сложности модели.

Прунинг и дистилляция

Структурный прунинг удаляет каналы или слои. torch.nn.utils.prune — базовый инструмент. Для transformer — прунинг attention heads (LTP, movement pruning). Результат: ResNet-50 после удаления 40% каналов с fine-tuning — -35% размера, -28% latency, -1.2% top-1 accuracy.

Knowledge distillation — обучаем маленькую student имитировать большую teacher. Классика через KLDivLoss на soft labels. Feature distillation на промежуточных слоях эффективнее. Hugging Face DistilBERT: 66M vs 110M параметров, -40% latency, -3% на GLUE. Согласно Wikipedia, это техника сжатия модели.

Комбинированный подход: дистилляция → прунинг → QAT. Даёт максимальный эффект на ограниченном железе. Экономия на облачных вычислениях достигает 70% — мы фиксировали такую у нескольких клиентов.

Целевые платформы и инструменты

Платформа Предпочтительный формат Инструмент Специфика
NVIDIA Jetson TensorRT engine trtexec, torch2trt INT8 calibration, DLA offload
Apple Silicon / iOS CoreML (.mlmodel) coremltools ANE (Neural Engine) автоматически
Android TFLite (.tflite) tf.lite.TFLiteConverter GPU delegate, NNAPI
x86 CPU ONNX + ORT onnxruntime AVX-512, VNNI
Arm Cortex TFLite / ONNX ort-arm, tflite XNNPACK, NEON
Qualcomm NPU QNN (.dlc) Qualcomm AI Hub Hexagon DSP

TensorRT — главный инструмент для NVIDIA edge. TRT строит граф с fusion операторов, выбирает оптимальные ядра. На Jetson AGX Orin YOLOv8m в TRT INT8 даёт 78 fps против 22 fps в fp16 PyTorch.

Практический кейс: детекция дефектов на производственной линии

Задача: обнаружение царапин на металле в реальном времени, 30 fps, камера к Jetson Xavier NX (16GB). Исходная модель YOLOv8l mAP50 0.91, inference на сервере 28 мс, на Jetson в fp16 — 110 мс (9 fps). Не подходит.

Шаги оптимизации:

  1. Переход на YOLOv8m — mAP50 0.887 (-2.3%), 68 мс
  2. Экспорт в TensorRT FP16 через yolo export format=engine half=True — 31 мс (32 fps)
  3. INT8 calibration на 500 кадрах — 22 мс (45 fps), mAP50 0.879

Итого: деградация 3.5% при 5× ускорении. Клиент получил engine и документацию. Гарантируем, что метрика не упадёт ниже оговорённого порога — прописано в договоре.

Пример профилирования модели (latency по слоям)

Срез профиля YOLOv8m на Jetson Xavier NX (fp16):

  • Convolution (layer 1–5): 12 ms
  • Bottleneck (layer 6–10): 8 ms
  • Head (detection): 11 ms

Узкое место — последние слои head'а. После квантования head'а отдельно latency head снизилась до 4 ms.

Что входит в работу

  • Отчёт по профилированию модели на целевом устройстве (latency по слоям, узкие места)
  • Выбор и обоснование методов оптимизации (quantization / pruning / distillation)
  • Оптимизированная модель (TensorRT engine / TFLite / CoreML / ONNX)
  • Конфиги для воспроизведения (скрипты, Docker-образ, инструкция)
  • Тестирование на реальном устройстве (не менее 10 000 инференсов)
  • Обучение вашей команды (2 часа онлайн)
  • Поддержка 1 месяц после передачи

Как заказать оптимизацию модели

  1. Оставьте заявку на сайте или свяжитесь с нами любым удобным способом.
  2. Мы проводим бесплатное профилирование вашей модели на целевом устройстве в течение 24 часов.
  3. Готовим план оптимизации с оценкой trade-off (скорость vs качество).
  4. Вы утверждаете план — мы приступаем к работе.
  5. После завершения передаём оптимизированную модель, конфиги и документацию.
  6. Проводим обучение вашей команды и предоставляем месячную поддержку.

Сроки: оптимизация готовой модели — 2–4 недели. Разработка с нуля под edge — 6–16 недель.

Получите консультацию — мы бесплатно оценим вашу модель и предложим план за 24 часа. Закажите бесплатное профилирование прямо сейчас.