MAATRIX / Блог / Миф: нейросети на CPU работать не могут

Миф: нейросети на CPU работать не могут

MAATRIX

«Без видеокарты нейросеть даже не запустится» — это говорят настолько часто, что многие даже не пытаются попробовать иначе и сразу ищут GPU-сервер, переплачивая за мощность, которая им не нужна. На практике инференс — то есть использование уже обученной модели — прекрасно работает на обычном процессоре, и делает это далеко не первый год. Разберём, откуда взялся этот миф, в чём его рациональное зерно и где именно он расходится с реальностью.

Откуда взялся миф и в чём он прав

Зерно правды тут действительно есть, и немаленькое. Нейросеть — это, по сути, огромная цепочка матричных умножений: вход умножается на веса слоя, результат идёт дальше, и так десятки раз. GPU спроектирован именно под такую нагрузку — тысячи простых вычислительных ядер, работающих параллельно, плюс видеопамять с пропускной способностью, которая на порядок выше, чем у обычной оперативной памяти. Для обучения моделей с нуля или дообучения (fine-tuning) на сколько-нибудь заметных объёмах данных GPU действительно практически обязателен — без него процесс растягивается настолько, что теряет смысл.

Именно из опыта обучения моделей миф и родился: люди видели, как без видеокарты обучение занимает недели вместо часов, и экстраполировали это на любое использование нейросетей вообще. Но обучение и инференс — это принципиально разные по требовательности задачи, и здесь миф делает не совсем корректный логический скачок.

Обучение и инференс — не одно и то же

Обучение — это подбор миллиардов весов модели с нуля: прямой проход, вычисление ошибки, обратное распространение градиента, обновление весов, и всё это по кругу миллионы раз на огромных объёмах данных. Инференс — это только прямой проход: вы подаёте готовые, уже подобранные веса на вход и один раз прогоняете через сеть, чтобы получить ответ. Вычислительно это в разы, часто на порядки, легче, чем обучение того же размера модели.

Разница примерно такая же, как между печатью тиража книги на промышленном станке и чтением уже напечатанного экземпляра. Тираж без станка не напечатать — но прочитать книгу можно и без него. Миф путает эти две задачи, потому что обе называются «работа с нейросетью», хотя по нагрузке на железо это разные весовые категории.

О том, когда GPU всё же оправдан даже для инференса — при высокой параллельной нагрузке или строгих требованиях к задержке, — подробно в статье CPU или GPU для локальной LLM: что выгоднее.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Развернуть ИИ на сервере

Как CPU-инференс работает технически

Инференс на процессоре — это не какой-то экспериментальный хак, а зрелая, годами обкатываемая технология с собственной экосистемой рантаймов. Самый известный пример — llama.cpp (и его движок GGML): изначально написан именно для запуска LLM на обычном железе, без GPU вообще. Есть и другие: ONNX Runtime с CPU-провайдером, llamafile, Intel OpenVINO для оптимизации инференса на процессорах Intel. Ollama, которой пользуются многие для локального запуска моделей, под капотом как раз использует llama.cpp — то есть CPU-режим для неё не костыль, а штатный сценарий работы.

Технически ускорение на CPU достигается двумя вещами:

  • Векторные инструкции процессора (SIMD) — AVX2, а на более новых серверных чипах AVX-512 или VNNI. Это инструкции, которые позволяют выполнять одну операцию сразу над несколькими числами за такт, а не по одному — то есть частично компенсируют отсутствие тысяч GPU-ядер за счёт более широкой обработки данных на каждом ядре CPU.
  • Многопоточность — инференс на CPU хорошо распараллеливается по ядрам почти линейно, вплоть до определённого предела (обычно упирается в пропускную способность оперативной памяти раньше, чем в число ядер). Поэтому сервер с 8-16 vCPU для этой задачи предпочтительнее, чем 4 ядра на более высокой частоте.

Отдельный класс задач, где CPU справляется без всяких оговорок, — это подсчёт эмбеддингов (векторных представлений текста) для RAG и поиска по смыслу: модели для эмбеддингов обычно на порядки меньше генеративных LLM и почти не требовательны к железу. Подробнее — в статье Как считать эмбеддинги на CPU без GPU.

Квантизация — ключевая технология, которая делает CPU-инференс практичным

Обученная модель хранит веса в виде чисел с плавающей точкой — обычно 16 или 32 бита на каждое число. Квантизация — это уменьшение точности этих чисел (например, до 8, 5 или 4 бит на вес) с минимальной потерей качества ответов. Для CPU-инференса это критично по двум причинам:

  1. Модель занимает в разы меньше оперативной памяти. Модель на 7-8 миллиардов параметров в полной точности требует порядка пятнадцати с лишним гигабайт, а в квантованном виде (Q4) — обычно укладывается в 4-5 ГБ. Это открывает дорогу на обычные VPS-тарифы с умеренным объёмом RAM, а не только на дорогие конфигурации с сотнями гигабайт памяти.
  2. Сама генерация идёт быстрее. Меньше данных нужно прочитать из памяти на каждый шаг вычислений, а именно скорость чтения из оперативной памяти — а не количество ядер — чаще всего оказывается узким местом при инференсе на CPU.

Практически это выглядит так: модель распространяется в формате GGUF с разными уровнями квантизации — Q8 (почти без потерь, крупнее), Q5, Q4_K_M (популярный компромисс качество/размер), вплоть до Q2-Q3 для совсем ограниченного железа с заметной потерей точности ответов. Выбор конкретного уровня — это всегда компромисс между качеством ответов, объёмом занимаемой памяти и скоростью, и универсального правильного ответа тут нет — нужно пробовать под свою задачу.

Что действительно ограничивает CPU — не «невозможность», а скорость

Вот где миф ближе всего подбирается к правде, но всё равно формулирует её неточно. CPU не «не может» генерировать текст нейросетью — он делает это заметно медленнее GPU в токенах в секунду (токен — это примерно кусок слова или короткое слово, из которых нейросеть собирает ответ по одному за раз). Разрыв в скорости между GPU и CPU для генерации текста — реальный и ощутимый, но его точная величина сильно зависит от конкретной модели, уровня квантизации, объёма контекста и конкретного процессора, поэтому приводить здесь точные цифры токенов в секунду было бы нечестно — тестируйте на своём железе и своей модели, у вас будет другое значение.

Что можно сказать без цифр, но предметно:

  • Генерация на CPU идёт последовательно, токен за токеном, и на каждый токен процессору нужно «пройтись» по всем весам активной части модели — при недостаточной пропускной способности памяти это и есть основной тормоз.
  • Разрыв между CPU и GPU растёт вместе с размером модели: на небольших моделях (3-8B) отставание переносится легче, на моделях в десятки миллиардов параметров оно становится куда заметнее.
  • Первый токен ответа (задержка до начала генерации) на CPU обычно ощутимо дольше, чем последующие, — это стоит учитывать в интерактивных сценариях.

Из этого следует практический вывод: если вам нужен мгновенный ответ в живом чате при большом потоке параллельных пользователей — CPU здесь будет узким местом, и вы это почувствуете. Если ответ может подождать несколько секунд или обработка идёт в фоне — скорость перестаёт быть решающим фактором. Подробнее о физике разрыва между CPU и GPU — в статье Почему GPU быстрее CPU для нейросетей.

Когда CPU-инференс — рабочий выбор, а когда нет

СценарийCPU подходитКомментарий
Личный ассистент, 1-2 пользователяДаЗадержка в разумных пределах, стоимость сервера в разы ниже GPU
RAG по своим документам, эмбеддингиДаЭмбеддинг-модели легковесные, CPU справляется без оговорок
Фоновая пакетная обработка текста (суммаризация, разметка, теги)ДаСкорость не критична, важна только суммарная пропускная способность за сутки
Черновая генерация, эксперименты, разработка промптовДаЗадержка терпима, экономия бюджета важнее скорости
Живой чат с десятками параллельных пользователейНетПоследовательная генерация на CPU не тянет параллельный поток запросов
Голосовой ассистент реального времениНетТребования к задержке первого токена слишком жёсткие
Дообучение (fine-tuning) или обучение с нуляНетОбратное распространение градиента на больших объёмах данных требует GPU
Модели от 30B+ параметров без строгого лимита по времени ответаЧастичноТехнически работает, но задержка становится ощутимой — тестируйте на конкретной задаче

Практическое правило: считайте не «может ли CPU вообще», а сколько одновременных запросов в минуту вам реально нужно обслуживать и насколько критична задержка ответа. Если оба числа невелики — CPU почти всегда обходится на порядок дешевле, чем аренда GPU-сервера, а по факту решает задачу ничуть не хуже. Про выбор конкретной конфигурации VPS под такой сценарий — в статье Ollama на CPU: какой сервер выбрать без видеокарты.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Развернуть ИИ на сервере

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

На CPU вообще можно запустить большую языковую модель, например на 70 миллиардов параметров?

Технически да, в квантованном виде она поместится в оперативную память сервера с достаточным объёмом RAM. Но задержка генерации будет заметно выше, чем на моделях 7-13B, и перед использованием в продакшне стоит протестировать скорость на своей задаче — универсальных цифр здесь нет.

Нужен ли особый процессор для CPU-инференса или подойдёт любой VPS?

Нужен процессор с поддержкой векторных инструкций AVX2 (у современных серверных CPU она практически всегда есть) — желательно уточнить это у провайдера. Важнее число ядер и объём оперативной памяти с запасом сверх размера модели, а не конкретная модель CPU.

Правда ли, что квантизация сильно портит качество ответов модели?

На умеренных уровнях (Q5, Q4_K_M) потеря качества обычно малозаметна в бытовых сценариях. На агрессивных уровнях (Q2-Q3) деградация становится заметнее, особенно на сложных рассуждениях. Конкретный порог зависит от модели и задачи — тут снова нет универсального числа, нужно проверять на своих промптах.

Если я начну на CPU, а нагрузка вырастет — придётся всё переделывать под GPU?

Нет, миграция не требует переписывать приложение с нуля: и llama.cpp, и Ollama, и большинство рантаймов поддерживают запуск и на CPU, и на GPU через один и тот же интерфейс — меняется по сути только сервер, на котором крутится модель.

Как понять, что мне уже пора переходить на GPU?

Явные сигналы — очередь запросов растёт быстрее, чем успевает обрабатываться, пользователи жалуются на задержку в интерактивном сценарии, или загрузка CPU стабильно упирается в потолок при обычной нагрузке. Пока таких сигналов нет — платить за GPU смысла обычно нет.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →