Флаги CMake для llama.cpp: CPU, CUDA, Vulkan оптимизация под любое железо | AiManual
AiManual Logo Ai / Manual.
01 Янв 2026 Гайд

Сборка llama.cpp не для всех: как заставить его летать на твоём железе

Полный гайд по сборке llama.cpp с MKL, CUDA архитектурой, AVX2 и Vulkan. Флаги CMake для i7, RTX, AMD. Ускорение инференса в 3-5 раз.

Зачем это читать, если в README уже всё есть?

Открою секрет: документация llama.cpp написана для тех, кто уже знает, что делает. Там перечислены флаги, но не объяснено, почему одни сочетания работают в 5 раз быстрее, а другие падают с ошибкой "illegal instruction". Если ты хочешь просто скопировать команду из интернета и получить максимальную скорость на своём i7-14700HX с RTX 4060 — читай дальше. Если нет — попробуй собрать без флагов и посмотри, сколько токенов в секунду получишь.

💡
Конкретный пример: на ноутбуке с i7-14700HX и RTX 4060 (8GB VRAM) сборка с правильными флагами даёт 45 токенов/сек на Llama 3.1 8B вместо 12. Разница в 3.75 раза — не потому, что код волшебный, а потому что CMake правильно настроен.

CMake — это не магия, а список инструкций для компилятора

Когда пишешь cmake .. без параметров, ты говоришь компилятору: "Собери как получится". Компилятор смотрит на твой процессор, видит поддержку AVX2, но собирает под самый старый совместимый набор инструкций — потому что так безопаснее. Результат? Твоя 16-ядерная ракета работает как одноядерный Pentium.

1 Сначала узнай, что у тебя под капотом

Без этого шага ты будешь тыкать флаги наугад. Вот команды, которые покажут реальные возможности твоего железа:

# Для CPU (Linux/macOS)
lscpu | grep -i "avx\|sse\|fma"
# Или проще:
cat /proc/cpuinfo | grep flags

# Для CUDA (важно знать архитектуру)
nvidia-smi --query-gpu=compute_cap --format=csv
# Или:
nvidia-smi -q | grep "CUDA Capability"

# Для Vulkan
vulkaninfo | grep "apiVersion"

Самая частая ошибка: указать не ту архитектуру CUDA. RTX 4060 — это sm_89 (Ada Lovelace). Если указать sm_86 (Ampere) или sm_75 (Turing), производительность упадёт на 15-30%. Проверь таблицу ниже.

Видеокарта Архитектура CUDA Compute Capability Флаг CMake
RTX 4090/4080/4070 Ti Ada Lovelace 8.9 sm_89
RTX 4060/4050 Ada Lovelace 8.9 sm_89
RTX 3090/3080/3070 Ampere 8.6 sm_86
RTX 2080 Ti/2080 Turing 7.5 sm_75
GTX 1080 Ti Pascal 6.1 sm_61

2 Базовая сборка — то, что сломает 90% новичков

Не делай так:

# ЭТО НЕПРАВИЛЬНО!
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake ..  # вот здесь ошибка
make -j8

Почему это плохо? Потому что:

  • Соберётся только CPU версия без оптимизаций
  • Не будет поддержки GPU (ни CUDA, ни Vulkan)
  • Используется самый медленный набор инструкций
  • Ты получишь 10-15 токенов/сек вместо возможных 45

Рецепты сборки под разные конфигурации

Выбери свой сценарий. Если не уверен — начинай с "Максимальная производительность на ноутбуке".

Сценарий 1: Intel/AMD CPU без видеокарты (или старая карта)

Для i7-14700HX (Raptor Lake) с поддержкой AVX2, AVX-VNNI, FMA:

cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_NATIVE=ON \
  -DLLAMA_AVX=ON \
  -DLLAMA_AVX2=ON \
  -DLLAMA_AVX512=OFF \  # 14700HX не имеет AVX-512
  -DLLAMA_FMA=ON \
  -DLLAMA_F16C=ON \
  -DBUILD_SHARED_LIBS=OFF
💡
-DLLAMA_NATIVE=ON — самый важный флаг для CPU. Компилятор сам определит оптимальные инструкции для твоего процессора. Но если хочешь ручного контроля — используй конкретные флаги AVX/AVX2.

Сценарий 2: NVIDIA CUDA (RTX 4060, 8GB VRAM)

Здесь важно правильно указать архитектуру и включить cuBLAS:

cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_CUDA=ON \
  -DCMAKE_CUDA_ARCHITECTURES="89" \  # sm_89 для RTX 4060
  -DLLAMA_CUBLAS=ON \
  -DLLAMA_AVX2=ON \  # CPU fallback тоже оптимизируем
  -DLLAMA_F16C=ON \
  -DLLAMA_NATIVE=ON

Что это даёт:

  • Основные вычисления идут на GPU через cuBLAS
  • Когда VRAM заканчивается (а на 8GB для 8B модели это случается), llama.cpp автоматически сбрасывает слои на CPU
  • CPU оптимизирован под AVX2, поэтому fallback не такой медленный

Сценарий 3: Vulkan (AMD или Intel ARC)

Если у тебя AMD карта (или хочешь попробовать Vulkan на NVIDIA — да, это работает), читай наш подробный гайд по Vulkan vs ROCm. Краткая версия:

cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_VULKAN=ON \
  -DLLAMA_AVX2=ON \
  -DLLAMA_NATIVE=ON \
  -DVulkan_LIBRARY=/usr/lib/x86_64-linux-gnu/libvulkan.so  # путь может отличаться!

Vulkan часто требует ручного указания пути к библиотеке. Если сборка падает с ошибкой "Could NOT find Vulkan", установи vulkan-tools и libvulkan-dev, затем найдите путь через find /usr -name "libvulkan.so*" 2>/dev/null.

Сценарий 4: Intel MKL для Xeon/серверных CPU

Если у тебя серверный процессор или хочешь максимальную производительность на CPU:

cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_BLAS=ON \
  -DLLAMA_BLAS_VENDOR=Intel10_64lp \
  -DBLAS_INCLUDE_DIR=/opt/intel/mkl/include \
  -DBLAS_LIBRARIES=/opt/intel/mkl/lib/intel64/libmkl_rt.so \
  -DLLAMA_AVX512=ON \  # для Xeon с поддержкой AVX-512
  -DLLAMA_AVX512_VBMI=ON \
  -DLLAMA_AVX512_VNNI=ON

Комбинированные сборки: когда одного бэкенда мало

Самый интересный сценарий — использовать несколько бэкендов одновременно. Например, CUDA для основных вычислений, а когда VRAM заканчивается — Vulkan или CPU. Или распределить слои между GPU и CPU.

# CUDA + CPU с максимальными оптимизациями
cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_CUDA=ON \
  -DCMAKE_CUDA_ARCHITECTURES="89" \
  -DLLAMA_CUBLAS=ON \
  -DLLAMA_VULKAN=ON \  # резервный бэкенд
  -DLLAMA_AVX2=ON \
  -DLLAMA_AVX512=OFF \
  -DLLAMA_NATIVE=ON \
  -DLLAMA_METAL=OFF  # если не macOS

Такая сборка позволяет использовать флаг --gpu-layers в llama.cpp более гибко. Можно указать --gpu-layers 20 для CUDA, а остальные слои пойдут через Vulkan или CPU.

Ошибки, которые сломают твою сборку

Я собрал топ-5 ошибок, которые видю в чатах поддержки:

Ошибка Причина Решение
illegal instruction Собрали с AVX512 на процессоре без AVX512 Убрать -DLLAMA_AVX512=ON или использовать -DLLAMA_NATIVE=ON
CUDA error: out of memory Модель не помещается в VRAM Уменьшить --gpu-layers или использовать квантованную версию (Q4_K_M)
Could NOT find Vulkan Библиотеки Vulkan не установлены sudo apt install vulkan-tools libvulkan-dev
Медленная работа Собрали без оптимизаций Всегда использовать -DCMAKE_BUILD_TYPE=Release
Падает при запуске Смешали несовместимые флаги Не включать одновременно CUDA и METAL на Linux

Проверка результатов: как понять, что сборка удалась

После make -j8 (где 8 — количество ядер) запусти тест:

# Проверяем, какие бэкенды включены
./bin/llama-cli --help | grep -i "gpu\|cuda\|vulkan\|blas"

# Быстрый тест производительности
./bin/llama-cli -m ~/models/llama-3.1-8b.Q4_K_M.gguf \
  -p "Hello" -n 128 -t 8 --gpu-layers 20

# Смотрим на строчку в выводе:
# "eval time = 1200 ms / 128 runs ( 9.38 ms per token)"

Если видишь меньше 10ms per token на 8B модели — сборка удалась. Если больше 20ms — что-то пошло не так.

Что делать, если ничего не работает

Сначала очисти всё и начни заново:

cd llama.cpp/build
rm -rf *  # Удаляем всё из build директории
# Затем снова cmake с правильными флагами

Если не помогает — собери минимальную версию только для CPU:

cmake .. -DCMAKE_BUILD_TYPE=Release -DLLAMA_NATIVE=ON
make -j8

Работает? Значит проблема в драйверах или библиотеках GPU. Не работает? Проверь, установлен ли cmake версии 3.13+ и компилятор C++ (g++ 11+ или clang 12+).

💡
Самый стабильный вариант для первого раза: собрать с -DLLAMA_NATIVE=ON и без GPU. Получишь рабочую версию, потом добавишь CUDA/Vulkan. Так меньше шансов сломать всё.

А что насчет Docker и контейнеров?

Если хочешь запускать llama.cpp в изоляции (или на сервере), посмотри наш гайд по LXC-контейнерам в Proxmox. Кратко: флаги CMake те же самые, но нужно пробросить устройства GPU в контейнер:

# Для Docker с CUDA
docker build -t llama-cpp \
  --build-arg CMAKE_ARGS="-DLLAMA_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=89" .

# Для LXC
lxc config device add llama gpu gpu

Неочевидный совет в конце

Собери llama.cpp дважды. Первый раз — с минимальными флагами для стабильности. Второй раз — с агрессивными оптимизациями для скорости. Переименуй бинарники: llama-stable и llama-fast. Используй stable для важных задач, fast — когда нужна максимальная производительность.

И последнее: производительность llama.cpp растёт с каждой версией. Тот флаг, который сегодня даёт +5%, через месяц может давать +15%. Следи за релизами и пересобирай после крупных обновлений. Особенно после изменений в CUDA или Vulkan бэкендах.

Сборка закончена. Теперь твой llama.cpp знает твоё железо лучше, чем ты сам.