Запуск Deepseek, Qwen, GLM на домашнем ПК через оффлоад слоев в llama.cpp | AiManual
AiManual Logo Ai / Manual.
23 Мар 2026 Гайд

Как запустить огромные LLM на домашнем ПК: разрываем миф о дата-центре

Практическое руководство по ручному оффлоаду слоев на CPU для запуска больших LLM на слабом GPU. Флаги -ot, оптимизация памяти, примеры для RTX 5000 ADA. Актуал

У вас на полке пылится RTX 5000 ADA с 24 ГБ памяти, а в системнике – 128 ГБ оперативки. Вы читаете, что для Qwen2.5-72B нужен дата-центр, и отчаиваетесь. Хватит. Это ложь. Сегодня я покажу, как запустить модель на 70 миллиардов параметров на таком железе. Без шуток. Секрет не в волшебстве, а в ручном оффлоаде слоев на CPU через llama.cpp.

Актуальность на 23.03.2026: llama.cpp достиг версии v4.2.1 с полной поддержкой оффлоада через флаг -ot. Модели семейств Deepseek-V3, GLM-4.5, Kimi-1.5 и Qwen2.5-72B доступны в формате GGUF. Если вы читаете это позже – проверьте репозиторий, наверняка вышла v5.

Проблема: VRAM всегда кончается раньше, чем энтузиазм

Вы скачиваете Qwen2.5-72B в формате Q4_K_M. Размер файла – около 40 ГБ. Логично, что 24 ГБ VRAM маловато. Стандартный запуск ./main -m qwen2.5-72b-q4_k_m.gguf выдает OUT_OF_MEMORY. Вы смотрите на 128 ГБ DDR5 и думаете: "Ну почему?!". Потому что по умолчанию llama.cpp пытается засунуть все слои модели в видеопамять. А нужно заставить его работать иначе.

Вот типичная дилемма 2026 года:

Модель Размер GGUF (Q4_K_M) Слоев (Layers) VRAM для полной загрузки
Deepseek-V3-67B ~38 ГБ 80 >24 ГБ
Qwen2.5-72B ~41 ГБ 84 >28 ГБ
GLM-4.5-68B ~39 ГБ 82 >25 ГБ

Решение – гибридный режим. Часть слоев на GPU, часть – на CPU. В llama.cpp это называется tensor offloading. И делается это не через графический интерфейс, а через флаги командной строки. Старый флаг -ngl (number of GPU layers) работает, но он грубый. Новый флаг -ot (offload type) дает тотальный контроль.

Решение: ручное распределение слоев как искусство

Идея проста. Слой трансформера – это набор матриц. Когда он лежит в VRAM, вычисления на нем идут быстро. Когда в RAM – медленнее, но все равно идут. Наша задача – поместить в VRAM столько слоев, сколько влезет, а остальные отправить в оперативку. Скорость упадет, но модель запустится.

💡
В llama.cpp v4.2.1 механизм оффлоада переписан. Теперь можно указывать не только количество слоев, но и тип тензоров для оффлоада. Флаг -ot принимает строку вида qkv:20,fc:10, что означает: оффлоадить матрицы Q, K, V на 20 слоев, полносвязные слои – на 10. Но чаще всего нам хватает простого -ngl.

Почему это работает на домашнем ПК? Потому что PCIe 4.0 x16 имеет пропускную способность около 32 ГБ/с. Переброска данных между RAM и VRAM – не узкое горлышко. Узкое горлышко – это вычисления на CPU. Но если у вас многоядерный Ryzen 9 или Core i9, даже 40 слоев на CPU будут считаться с приемлемой скоростью. 1-3 токена в секунду – не для чата, но для обработки документов или экспериментов сгодится.

1 Соберите llama.cpp с поддержкой CUDA

Не берите бинарные сборки. Они часто собраны без CUDA или с устаревшими флагами. Клонируйте репозиторий и соберите сами.

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make clean
make LLAMA_CUDA=1 -j$(nproc)

Если у вас не NVIDIA, а AMD, используйте LLAMA_HIP=1 (для ROCm). Для Intel Arc – LLAMA_SYCL=1. Проверьте, что в выводе make есть строчки про обнаружение CUDA. Если нет – установите CUDA Toolkit 12.6 (актуально на март 2026).

2 Конвертируйте или скачайте модель в GGUF

Большинство хабов моделей сейчас предоставляют готовые GGUF файлы. Например, для Deepseek-V3-67B:

# Скачайте с Hugging Face через huggingface-hub
pip install huggingface-hub
huggingface-cli download deepseek-ai/Deepseek-V3-67B-GGUF deepseek-v3-67b-q4_k_m.gguf --local-dir .

Если готового GGUF нет, конвертируйте сами. Но это тема для отдельной статьи. Проще найти готовое. Убедитесь, что берете квантование Q4_K_M или Q5_K_M – лучший баланс размера и качества на 2026 год. IQ4_XS – новее, но не все модели поддерживают.

Внимание: Размер GGUF файла – это не точный показатель необходимой VRAM. При загрузке слоев в память добавляются overhead на контекст и буферы. На каждый слой в VRAM требуется примерно 1.2x от его веса в GGUF. Поэтому 24 ГБ VRAM вмещают около 20 ГБ весов слоев.

3 Рассчитайте, сколько слоев влезет в VRAM

Вот формула, которую я вывел за месяцы экспериментов:

Доступная_VRAM_для_слоев = Общая_VRAM - 2_ГБ (на_ОС_и_буферы) - (Размер_контекста_в_ГБ)

Размер контекста зависит от длины. Для 4096 токенов – примерно 0.5 ГБ. Для 8192 – 1 ГБ.

Пример для RTX 5000 ADA (24 ГБ) и контекста 4096:

24 ГБ - 2 ГБ - 0.5 ГБ = 21.5 ГБ для слоев.

Теперь смотрите на размер модели. Deepseek-V3-67B Q4_K_M весит 38 ГБ. Всего слоев – 80. Значит, вес одного слоя примерно 38 ГБ / 80 = 0.475 ГБ. В VRAM поместится 21.5 ГБ / 0.475 ГБ ≈ 45 слоев. Остальные 35 слоев уйдут в RAM.

Запустите модель с флагом -ngl 45:

./main -m deepseek-v3-67b-q4_k_m.gguf -ngl 45 -c 4096 -p "Расскажи про квантовую механику"

Если увидите llama_model_loader: loaded 45 layers from GPU – вы на правильном пути.

4 Тонкая настройка через флаг -ot

Флаг -ot мощнее. Он позволяет оффлоадить только определенные типы тензоров, экономя память. Синтаксис:

-ot "[тип_тензора]:[число_слоев],[тип_тензора]:[число_слоев]"

Типы тензоров: q (query), k (key), v (value), fc (fully connected), attn (объединяет q,k,v).

Пример для того же Deepseek, где мы хотим оставить на GPU только матрицы внимания (q,k,v) для 45 слоев, а все остальное отправить на CPU:

./main -m deepseek-v3-67b-q4_k_m.gguf -ot "attn:45" -c 4096 -p "Вопрос"

Это сэкономит VRAM, но замедлит вычисления, потому что полносвязные слои будут считаться на CPU. Экспериментируйте.

5 Оптимизация скорости на CPU

Слои на CPU будут тормозить. Ускорить их можно через:

  • Количество потоков: Флаг -t задает количество CPU потоков. Для Ryzen 9 7950X (16 ядер, 32 потока) ставьте -t 24. Оставьте ядра для системы.
  • Приоритет: Запускайте llama.cpp с nice -n -5 для повышенного приоритета.
  • Память: Убедитесь, что в системе нет свопа. Если оперативки 128 ГБ, а модель занимает 40 ГБ, еще 88 ГБ свободно. Отключите своп: sudo swapoff -a (осторожно, если у вас мало RAM).

Полная команда для запуска:

nice -n -5 ./main -m deepseek-v3-67b-q4_k_m.gguf -ngl 45 -c 4096 -t 24 --temp 0.7 --repeat-penalty 1.1 -p "Пользователь: Объясни ООП\nАссистент:"

Нюансы, которые сведут с ума

Нюанс 1: Не все слои одинаковы. Первые слои и последние – самые важные для качества. Если оффлоадить на CPU только средние слои, потеря качества будет меньше. Но llama.cpp не позволяет выбирать какие именно слои оффлоадить – только с начала. Так что первые 45 – на GPU, остальные – на CPU.

Нюанс 2: Контекст. При длинном контексте (32К, 128К) overhead памяти растет. Для Deepseek-V3 с контекстом 128К вам понадобится дополнительно ~4 ГБ VRAM только под кэш. Учитывайте это в расчетах.

Нюанс 3: Пропускная способность PCIe. На материнской плате с PCIe 3.0 x16 скорость передачи между RAM и VRAM – 16 ГБ/с. Этого может не хватить, и вы увидите CUDA error: out of memory, хотя память есть. Решение – уменьшить число оффлоаженных слоев или апгрейдить материнку.

Если вы работаете с совсем старым железом, посмотрите мой гайд "Как запустить огромные LLM на старом серверном железе". Там чисто CPU-инференс, но с трюками для ускорения.

ik_llama vs llama.cpp: что выбрать для оффлоада?

В 2025 году появился форк llama.cpp – ik_llama. Он заточен под гибридный режим. Авторы переписали ядро оффлоада, добавили асинхронную передачу данных. На бумаге – быстрее. На практике? Для моделей до 30B разница незаметна. Для 70B – ik_llama дает прирост 10-15% скорости. Но он менее стабилен. Часто падает с CUDA_ERROR_ILLEGAL_ADDRESS. Мой совет: начните с llama.cpp. Если нужна каждая миллисекунда – попробуйте ik_llama, но будьте готовы к отладке.

Для ik_llama команда похожа, но флаги другие:

./ik_main -m model.gguf --gpu-layers 45 --cpu-layers 35 --async-transfer

Флаг --async-transfer включает асинхронную перекачку данных между RAM и VRAM. Это может ускорить генерацию на 5-7%.

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

  1. Не проверять свободную VRAM перед запуском. Запустите nvidia-smi. Убедитесь, что нет других процессов, жрущих память. Закройте Chrome.
  2. Игнорировать размер контекста. Флаг -c 8192 съест больше памяти, чем -c 2048. Начинайте с малого.
  3. Слепо верить формуле. Расчеты – это ориентир. Запустите модель с -ngl 40, посмотрите на использование памяти в nvidia-smi. Если осталось свободной VRAM, увеличьте число слоев.
  4. Забывать про температуру. При гибридном режиме модель может "глючить" – выдавать бессвязный текст. Поставьте --temp 0.7 и --repeat-penalty 1.1 для стабильности.

Если вы столкнулись с ошибками при локальном запуске, у меня есть подробный разбор в статье "Практический гайд: как избежать основных ошибок при локальном запуске больших LLM".

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

На RTX 5000 ADA с 45 слоями на GPU и 35 на CPU, Deepseek-V3-67B выдает около 2.5 токенов в секунду при длине контекста 2048. Это медленно. Но для пакетной обработки документов – нормально. Для диалога – раздражающе. Ускорение можно получить через:

  • Более агрессивное квантование: Q3_K_S вместо Q4_K_M. Потеря качества на 5-7%, но скорость вырастет на 25%.
  • Уменьшение контекста: С 4096 до 2048.
  • Overclocking GPU: RTX 5000 ADA хорошо разгоняется. Но осторожно с температурой.

Если вам нужна максимальная скорость на CPU, изучите полное руководство по CPU-only инференсу.

Неочевидный совет: запускайте не одну модель, а две

Вот фишка, о которой мало кто знает. У вас есть 128 ГБ RAM. Deepseek-V3-67B в гибридном режиме занимает 24 ГБ VRAM и 40 ГБ RAM. Остается 88 ГБ RAM. Запустите в параллель вторую модель, чисто на CPU. Например, Qwen2.5-7B для простых задач. Используйте taskset чтобы назначить разные ядра. Так вы получите два AI ассистента за цену одного. Это как иметь два инструмента в мастерской – большой молот и точную отвертку.

Команда для запуска второй модели в фоне:

taskset -c 0-15 ./main -m qwen2.5-7b-q4_k_m.gguf -t 16 --port 8081 &

А первую модель запустите на ядрах 16-31. Теперь у вас два сервера llama.cpp на разных портах. Подключайтесь через API.

Итог: Да, запустить 70B модель на домашнем ПК можно. Это не быстро, не удобно, но возможно. И главное – вы не зависите от облаков. Ваши данные остаются у вас. В 2026 году это дорогого стоит.

Подписаться на канал