Запуск LLM на CPU без GPU: оптимизация скорости и памяти в 2026 году | AiManual
AiManual Logo Ai / Manual.
10 Фев 2026 Гайд

CPU-only инференс LLM: полное руководство по оптимизации скорости и памяти без видеокарты

Полное руководство по запуску локальных LLM на CPU без видеокарты. Оптимизация llama.cpp, настройка RAM, выбор моделей и реальные тесты производительности на 10

Зачем это вообще нужно в 2026 году?

Ещё год назад запуск Llama 3 70B на CPU казался безумием. Сегодня это норма. Почему? Потому что модели стали эффективнее, а llama.cpp научился выжимать из оперативки всё до последнего байта. GPU теперь не обязательны - они просто быстрее. Но если скорость не критична, а бюджет ограничен, CPU-only инференс спасает ситуацию.

Представьте: у вас есть старый сервер Dell T7910 с 256GB RAM или просто ноутбук с 32GB оперативки. GPU нет или они слабые. Можно ли запустить Mistral-Nemo 12B? Qwen2.5-32B? DeepSeek Coder 33B? Да. И это будет работать. Медленно? Иногда. Но работать будет.

Важно: на февраль 2026 года llama.cpp достиг версии v4.0.0 с поддержкой AVX-512 VNNI и новых инструкций Intel APX. Если у вас процессор моложе 2024 года - вы в выигрыше.

Проблема: оперативка кончилась раньше, чем началось

Самая частая ошибка - пытаться запихнуть 32B модель в 16GB RAM. Не выйдет. Даже с квантованием Q4_K_M. Почему? Потому что кроме весов модели есть контекст, кэш, временные буферы. Формула простая:

Модель Параметры Q4_K_M RAM Q2_K RAM Минимальный контекст
Qwen2.5-7B 7B ~5GB ~3GB 16GB
Mistral-Nemo 12B 12B ~8GB ~5GB 24GB
DeepSeek Coder 33B 33B ~22GB ~14GB 48GB
Llama 3.2 70B 70B ~45GB ~28GB 96GB

"Минимальный контекст" - это RAM, которую система не отдаст под своп. Если у вас 32GB RAM и вы запускаете модель на 22GB, остаётся 10GB на ОС, кэш контекста и буферы. При контексте в 4096 токенов этого хватит. При 8192 - уже нет.

Решение: не железо, а настройки

Можно купить ещё оперативки. Но если нельзя - настраиваем то, что есть. Вся магия в трёх местах: квантование модели, настройка llama.cpp и оптимизация операционной системы.

1 Выбор модели и квантования

На февраль 2026 года актуальны следующие комбинации:

  • Для 16GB RAM: Qwen2.5-7B IQ4_XS или Mistral 7B Q4_K_M. IQ4_XS - новый формат квантования в llama.cpp v4, даёт почти точность Q4_K_M при размере Q3_K_S.
  • Для 32GB RAM: Qwen2.5-32B IQ3_XS или DeepSeek Coder 33B Q4_K_M. Здесь уже придётся выбирать между качеством кода (DeepSeek) и общими задачами (Qwen).
  • Для 64GB+ RAM: Llama 3.2 70B Q4_K_M или новый Goliath 120B Q2_K. Да, 120B модель на CPU. Медленно? Очень. Но работает.
💡
IQ4_XS и IQ3_XS - это новые форматы квантования, появившиеся в конце 2025 года. Они используют смешанную точность 4 и 3 бита с оптимизацией под современные CPU. Если ваша llama.cpp старше ноября 2025 - обновите.

2 Сборка llama.cpp под ваше железо

Не берите готовые бинарники. Собирайте сами. Разница в скорости может достигать 40%.

# Клонируем репозиторий с актуальными изменениями на 10.02.2026
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# Для современных Intel (12+ поколение) с AVX-512 VNNI
make LLAMA_AVX512VNNI=1 LLAMA_CUBLAS=0 -j$(nproc)

# Для AMD Zen 4/5 с AVX-512
make LLAMA_AVX512=1 LLAMA_F16C=1 -j$(nproc)

# Для старых CPU без AVX-512
make LLAMA_AVX2=1 LLAMA_FMA=1 -j$(nproc)

Ключевые флаги:

  • LLAMA_AVX512VNNI - для Intel Ice Lake и новее. Ускоряет инференс на 15-25%.
  • LLAMA_AVX512_BF16 - если ваш CPU поддерживает bfloat16 (Intel Sapphire Rapids, AMD Zen 4). Ещё +10%.
  • LLAMA_BLAS=1 - включает OpenBLAS. Бесполезно для большинства, но на серверных процессорах с большим количеством ядер даёт прирост.
  • LLAMA_CUBLAS=0 - ВЫКЛЮЧИТЬ CUDA. Важно: если вы собираете для CPU, CUDA только замедлит запуск.

3 Настройка параметров запуска

Вот команда, которую копируют все. И она почти всегда неоптимальна:

# КАК НЕ НАДО ДЕЛАТЬ
./main -m models/qwen2.5-32b-q4_k_m.gguf -p "Hello" -n 512 -t 16 -c 2048

Проблемы? -t 16 использует 16 потоков. На 8-ядерном процессоре это создаст contention. -c 2048 ограничивает контекст, но не оптимизирует память.

Правильная команда для 32B модели на 16-ядерном процессоре:

./main -m models/qwen2.5-32b-iq3_xs.gguf \
  -p "Напиши код на Python для парсинга JSON" \
  -n 1024 \
  -t 12 \
  -c 4096 \
  --mlock \
  --no-mmap \
  --repeat-penalty 1.1 \
  --top-k 40 \
  --top-p 0.95 \
  --temp 0.7 \
  -ngl 0 \
  --threads-batch 4

Что здесь важно:

  • -t 12 на 16-ядерном процессоре: оставляем 4 ядра системе, избегаем гипертрединг contention.
  • --mlock и --no-mmap: фиксируем модель в RAM, предотвращаем своппинг. Если RAM мало - не используйте, будет OOM.
  • -ngl 0: ВСЕГДА 0 для CPU-only. Даже если у вас есть слабая GPU, не смешивайте.
  • --threads-batch 4: количество потоков для обработки батча. Для больших моделей уменьшайте до 2-4.

Оптимизация операционной системы

Ubuntu 24.04 LTS или Fedora 40. Почему? Потому что ядра 6.8+ имеют оптимизации под большие непрерывные аллокации памяти. Windows? Можно. Но будет на 10-15% медленнее из-за overhead менеджера памяти.

Настройки sysctl для Linux (добавьте в /etc/sysctl.conf):

# Увеличиваем размер shm для больших моделей
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

# Уменьшаем swappiness - система реже будет уходить в своп
vm.swappiness = 1

# Увеличиваем лимиты памяти для процессов
vm.overcommit_memory = 1
vm.overcommit_ratio = 100

# Оптимизация для многоядерных систем
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

После изменений:

sudo sysctl -p

Реальные цифры: чего ожидать

Тесты на процессоре AMD Ryzen 9 7950X (16 ядер, 32 потока, 64GB DDR5-6000):

Модель Квантование Потребление RAM Скорость (токенов/с) Контекст 4096
Qwen2.5-7B IQ4_XS 4.8GB 18-22 т/с Да
Mistral-Nemo 12B Q4_K_M 8.2GB 12-15 т/с Да
DeepSeek Coder 33B Q4_K_M 22.5GB 5-7 т/с Ограниченно
Llama 3.2 70B Q4_K_M 45GB 2-3 т/с Нет

"Контекст 4096" означает, что модель может работать с полным контекстом в 4096 токенов без своппинга. Для 70B модели на 64GB RAM это уже проблема - остаётся всего 19GB на кэш.

Типичные ошибки и как их избежать

Ошибка 1: Запуск с --mlock при недостатке RAM. Результат - OOM killer убивает процесс. Решение: сначала запустите без --mlock, посмотрите потребление, потом решайте.

Ошибка 2: Слишком много потоков. Если указать -t 32 на 16-ядерном процессоре, производительность упадёт на 20-30% из-за contention. Решение: используйте nproc чтобы узнать реальное количество ядер: -t $(( $(nproc) - 2 ))

Ошибка 3: Смешивание CPU и GPU. -ngl 1 на слабой GPU (например, GTX 1650) замедлит инференс, потому что данные будут постоянно копироваться между RAM и VRAM. Решение: или только CPU, или только GPU.

Когда CPU-only имеет смысл?

1. Серверное железо с кучей RAM. У вас есть старый сервер Dell PowerEdge с 256GB DDR4? Это идеально для CPU-only инференса. Процессоры Xeon могут не быть быстрыми, но у них много каналов памяти. Как в статье про Epyc 9175F для CPU-инференса - иногда CPU выигрывает у GPU просто объёмом RAM.

2. Ноутбук без дискретной графики. Современные Intel Core Ultra и AMD Ryzen 7040/8040 имеют мощные iGPU, но для LLM они бесполезны. Зато у них быстрая DDR5 память. Запускайте 7B-13B модели без проблем.

3. Разработка и тестирование. Не нужно разворачивать GPU ферму для проверки, работает ли ваша prompt engineering. Запустили на CPU, проверили, отправили на GPU кластер.

4. Бюджетные решения. Одна хорошая GPU стоит как целый сервер с 128GB RAM. Если скорость не критична, а обрабатывать нужно много запросов параллельно - CPU дешевле.

Что дальше? Будущее CPU инференса

На 2026 год уже видны тренды:

  • Специализированные инструкции - Intel APX и AMD Zen 5 принесут новые оптимизации для 4-битных операций.
  • Квантование IQ2_XXS - обещают 2-битное квантование с минимальной потерей качества. 70B модель в 16GB RAM? Возможно.
  • Оптимизация под большие контексты - сейчас контекст в 128K токенов на CPU почти невозможен. В llama.cpp v5 обещают оптимизации sliding window для CPU.
  • HBM память на CPU - Intel Xeon Max Series с HBM уже есть. 64GB быстрой памяти рядом с ядрами изменят правила игры.

Мой прогноз: к концу 2026 года мы увидим 13B модели, работающие на CPU со скоростью 30+ токенов в секунду при потреблении менее 10GB RAM. И это будет на среднебюджетном ноутбуке.

Чеклист для запуска

  1. Проверьте свободную RAM: free -h. Нужно минимум на 30% больше, чем размер модели.
  2. Выберите модель по размеру: для 16GB RAM - до 7B, для 32GB - до 32B, для 64GB - до 70B.
  3. Скачайте квантованную версию: предпочтительно IQ4_XS или Q4_K_M.
  4. Соберите llama.cpp с оптимизациями под ваш CPU.
  5. Настройте sysctl для уменьшения swappiness.
  6. Запустите с правильным количеством потоков: -t $(( $(nproc) - 2 ))
  7. Если RAM мало - не используйте --mlock.
  8. Для длинных ответов уменьшите --threads-batch до 2-4.
  9. Мониторьте потребление: htop или glances.
  10. Если всё работает - попробуйте увеличить контекст (-c) и проверьте, не начинается ли своппинг.

И последнее: не гонитесь за размером модели. Часто 7B модель с хорошим prompting даёт результат лучше, чем 70B модель с плохим. Особенно если 70B работает на грани своппинга и выдает 1 токен в секунду.

💡
Если вы работаете со старым серверным железом, посмотрите мой гайд Запуск современных LLM на старом железе. Там подробно разобраны нюансы работы с DDR3 памятью и процессорами Xeon.