Короткий ответ: да — запускать LLM на обычном CPU можно, но с существенными ограничениями по скорости и по памяти. Ниже — что важно знать и какие варианты практики.
Что работает и что нет
- Инференс (генерация ответов) — да, для небольших и средних моделей (от нескольких сотен миллионов до ~7 млрд параметров) вполне реален на CPU. Для моделей ~13B возможен с сильной оптимизацией/квантованием и большим объёмом оперативки. Для очень больших (30B, 70B и выше) запуск на одном обычном CPU фактически непрактичен.
- Обучение / дообучение (особенно полное) — на CPU практически не реализуемо (часы/дни/недели вместо минут/часов). PEFT/LoRA на небольших моделях возможен, но медленно. Для серьёзного fine-tuning требуются GPU/кластер.
Память (порядки величины)
- Параметр × 4 байта (float32). Пример: 7B × 4 ≈ 28 GB (fp32). В fp16 — вдвое меньше.
- Квантование в int8/4bit/ggml может снизить потребление примерно в 2–8× (зависит от формата).
- Практически: 7B в fp16 ≈ 14 GB; в int8 ≈ ~7 GB; в 4-bit — ~3–4 GB (приблизительно).
Способы ускорения и снижения потребления памяти
- Квантование (int8, 4-bit, GPTQ, AWQ, GGUF/ggml-квантование) — большой выигрыш по памяти и скорости на CPU.
- Оптимизированные CPU-библиотеки: ONNX Runtime (с оптимизацией и квантованием), Intel OpenVINO, oneDNN — дают заметный прирост.
- Специализированные проекты/оптимизации на C/C++: llama.cpp (ggml) — специально для запуска LLaMA-подобных моделей на CPU с топовой скоростью и поддержкой 4-bit квантования. GPT4All, text-generation-webui с бэкендом llama.cpp.
- Offloading / модель распределения: transformers + accelerate умеют выгружать часть состояний на диск/CPU/GPU (но диск — медленно).
- Параллелизация по ядрам: на многоядерных CPU лучше, но масштабируется не так эффективно, как GPU.
Практические инструменты и проекты
- llama.cpp — одна из лучших опций для локального запуска на CPU (поддержка ggml, квантования, маленькая бинарная зависимость).
- GPT4All / local LLM web UIs — часто строятся на основе llama.cpp.
- Hugging Face Transformers — можно запускать на CPU, но нужно много RAM и часто использовать ONNX Runtime / OpenVINO для ускорения.
- ONNX Runtime (ORT) + ORT quantization — для вывода в оптимизированном CPU-режиме.
- Intel OpenVINO / oneAPI — для Intel-оптимизаций.
- Ядро/библиотеки: PyTorch CPU (медленнее), но можно ускорять via OpenMP, MKL etc.
Примеры практичности
- Модели ~100M–1B: запускаются быстро на обычном ноутбучном CPU.
- Модели ~2–7B: запускаются на настольных CPU с 16–64 GB RAM; с квантованием — комфортнее.
- Модели ~13B: возможны на мощных CPU (большой RAM, квантование), но скорость будет заметно ниже GPU.
- 30B–70B: практически невозможно без распределённого решения или GPU/тензорных ускорителей.
Советы для запуска на CPU
- Квантование — ключевое (AWQ/GPTQ/ggml). Без него многие модели просто не помещаются в RAM.
- Используйте оптимизированные библиотеки (ONNX Runtime, OpenVINO) или llama.cpp для наилучшей производительности.
- Настраивайте переменные окружения (OMP_NUM_THREADS, MKL_NUM_THREADS) для правильной загрузки CPU.
- Не полагайтесь на swap/файл подкачки — это сильно замедлит генерацию.
- Для экспериментов и локальной разработки используйте 7B или меньше; для продакшена — GPU/облачные инстансы.
Короткая рекомендация
- Если вам нужно просто поэкспериментировать локально — используйте llama.cpp с квантированной моделью (GGUF/ggml).
- Для серьёзного приложения или быстрой генерации — выбирайте GPU/облако. CPU — вариант для экономных/ограниченных задач или для небольших моделей.
Если нужно, могу:
- Посоветовать конкретные команды/пошагово установить и запустить модель с llama.cpp на вашей ОС.
- Помочь выбрать формат квантования и подготовить модель из Hugging Face в ggml/GGUF.