Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Project Zero: CPU-Only инференс LLM на чистом C — до 36 токенов/с на Xeon и поддержка Bonsai-27B

Project Zero — CPU-only движок инференса LLM на чистом C99 с производительностью 36.25 токен/с на Intel Xeon. Обходит bitnet.cpp в 1.8 раза, поддерживает BitNet

Коротко

Что будет в материале

  1. 01

    Что такое Project Zero и почему это важно для CPU-инференса

  2. 02

    Архитектура Project Zero: как достигается скорость без GPU

  3. 03

    Бенчмарки: Project Zero против bitnet.cpp и других решений

  4. 04

    Поддерживаемые модели и как запустить Project Zero на своём CPU

Project Zero - это движок инференса больших языковых моделей, написанный на чистом C99 и работающий исключительно на центральном процессоре. На Intel Xeon он выдаёт до 36.25 токенов в секунду, обходя bitnet.cpp в 1.8 раза. Движок поддерживает Microsoft BitNet b1.58-2B-4T с тернарными весами и Qwen Bonsai-27B через прямой парсинг GGUF. Ключевая особенность - mmap-архитектура, которая позволяет запускать модели без out-of-memory даже на системах с ограниченной оперативной памятью.

Разработчик сделал ставку на три низкоуровневые оптимизации: трёхинструкционное VBMI-ядро для INT8 VNNI-накоплений, пул потоков на C11 atomics с логикой spin-then-sleep и прямой mmap-доступ к файлам GGUF. Результат - движок, который превращает обычный серверный процессор в платформу для полноценного инференса LLM.

Что такое Project Zero и почему это важно для CPU-инференса

Project Zero решает конкретную проблему: запуск LLM без GPU. Видеокарты дороги, дефицитны и потребляют сотни ватт. Серверные CPU есть почти в любой инфраструктуре, но до недавнего времени инференс на них был медленным и неэффективным. Project Zero меняет эту картину.

Движок написан на C99 - стандарте, который гарантирует переносимость и минимальные накладные расходы. Никаких зависимостей от Python-рантаймов, никаких прослоек. Только компилятор, исходный код и модель в формате GGUF. Поддерживаются две архитектуры: BitNet b1.58-2B-4T с тернарными весами (значения -1, 0, +1) и Qwen Bonsai-27B - 27-миллиардная модель, которая в 1-битном квантовании занимает около 5 ГБ. Ранее мы разбирали, как 1-битные модели меняют экономику инференса - Project Zero делает следующий шаг, запуская их на CPU с производительностью, сравнимой с GPU-решениями двухлетней давности.

36.25 токен/с на Xeon - это не предел. Это результат на конкретном стенде, и разработчик приглашает сообщество протестировать движок на других процессорах: от старых чипов с AVX2 до современных EPYC. Для Bonsai-27B CPU-бенчмарков пока нет - только GPU-результаты. Project Zero может стать первым инструментом, который закроет этот пробел.

Архитектура Project Zero: как достигается скорость без GPU

Project Zero опирается на три архитектурных решения. Каждое из них направлено на устранение конкретного узкого места CPU-инференса: вычислительной пропускной способности, накладных расходов на синхронизацию потоков и работы с памятью.

VBMI-ядро: три инструкции, которые меняют правила игры

VBMI (Vector Byte Manipulation Instructions) - расширение системы команд Intel, появившееся в процессорах начиная с Ice Lake. Project Zero использует три инструкции из этого набора: vpermi2b, vpternlogd и vpaddb. Их комбинация позволяет за один такт выполнить операции, которые в стандартном подходе требовали нескольких инструкций и дополнительных обращений к регистрам.

vpermi2b выполняет перестановку байтов из двух исходных векторов по индексам из третьего - это критически важно для эффективной реализации матричного умножения с тернарными весами, где каждый вес кодируется двумя битами. vpternlogd - трёхоперандная логическая операция, которая за одну инструкцию вычисляет произвольную булеву функцию от трёх входов. vpaddb суммирует байты, завершая цикл накопления для INT8 VNNI (Vector Neural Network Instructions).

Обычные реализации bitnet-инференса тратят много тактов на распаковку тернарных весов и приведение типов. VBMI-ядро делает это «на лету», без дополнительных инструкций. Именно это даёт основной прирост в 1.8 раза относительно bitnet.cpp - движка, который использует более общие SIMD-инструкции без специализации под VBMI.

Пул потоков без syscalls: spin-then-sleep на C11 atomics

Системные вызовы - главный враг низколатентного инференса. Каждый вызов к ядру операционной системы для синхронизации потоков добавляет микросекунды задержки, которые на масштабе сотен тысяч итераций превращаются в секунды. Project Zero решает эту проблему через пул потоков на C11 atomics с логикой spin-then-sleep.

Принцип работы: поток сначала активно ожидает задачу в цикле (spin), проверяя атомарную переменную без системных вызовов. Если задача не появляется в течение заданного интервала, поток переходит в режим сна (sleep) через тот же атомарный флаг. C11 atomics гарантируют корректную синхронизацию без мьютексов и условных переменных, которые требуют syscalls. Такой подход особенно эффективен для моделей вроде BitNet, где вычислительная нагрузка между слоями распределена неравномерно и часть потоков простаивает.

mmap и прямой парсинг GGUF: работа с памятью без OOM

mmap - системный вызов, который отображает файл в адресное пространство процесса. Операционная система сама решает, какие страницы загружать в физическую память, а какие оставить на диске. Project Zero использует mmap для прямого доступа к GGUF-файлам моделей, без промежуточного копирования в буфер и без полной загрузки модели в RAM.

GGUF - формат хранения моделей, разработанный для llama.cpp. Он содержит все необходимые метаданные и тензоры в одном файле. Project Zero парсит его напрямую, без конвертации в промежуточные форматы. Для Bonsai-27B это означает: модель занимает около 5 ГБ на диске, через mmap в память отображаются только те части, которые реально используются в данный момент. Системы с 8 ГБ RAM могут запускать 27-миллиардные модели без out-of-memory - операционная система вытесняет неиспользуемые страницы обратно на диск.

Этот подход перекликается с техниками, которые мы видели в других проектах. Например, при запуске Nemotron Ultra 550B на устаревших GPU ключевым ограничением была именно память, и инженерам пришлось распределять модель по нескольким ускорителям. Project Zero решает проблему памяти иначе - через mmap и ленивую загрузку, что особенно ценно для систем без GPU вообще.

Бенчмарки: Project Zero против bitnet.cpp и других решений

Цифры - главный аргумент. Разработчик предоставил результаты тестирования на Intel Xeon, и они впечатляют: 36.25 токен/с для BitNet b1.58-2B-4T, что в 1.8 раза быстрее bitnet.cpp на том же оборудовании.

Методика тестирования и конфигурация стенда

Тесты проводились на серверном процессоре Intel Xeon с поддержкой AVX-512 и VBMI. Точная модель чипа не раскрывается, но известно, что это многоядерный процессор с тактовой частотой в диапазоне 2.5-3.5 ГГц. Сборка выполнялась компилятором GCC с флагами оптимизации под конкретную микроархитектуру (-march=native). Модель BitNet b1.58-2B-4T загружалась через mmap, число потоков соответствовало числу физических ядер.

Метрика - токены в секунду на стадии генерации (decode). Это стандартный показатель для оценки скорости инференса, который напрямую влияет на пользовательский опыт: при 36 токен/с текст появляется быстрее, чем читает человек.

Сравнение с bitnet.cpp: откуда берётся прирост в 1.8 раза

bitnet.cpp - эталонный движок для инференса BitNet-моделей на CPU, разрабатываемый Microsoft. Он написан на C++ и использует стандартные SIMD-инструкции без специализации под VBMI. Project Zero обходит его за счёт трёх факторов:

  • VBMI-ядро обрабатывает тернарные матричные операции эффективнее, чем обобщённые SIMD-инструкции bitnet.cpp.
  • Пул потоков на C11 atomics снижает накладные расходы на синхронизацию по сравнению с pthreads-реализацией в bitnet.cpp.
  • Прямой mmap-доступ к GGUF исключает копирование данных в пользовательские буферы.

Для Bonsai-27B сравнение с GPU-результатами пока невозможно - нет опубликованных CPU-бенчмарков. Разработчик приглашает сообщество протестировать модель на различных процессорах и заполнить этот пробел. Если у вас есть доступ к Xeon или EPYC, вы можете получить уникальные данные, которых ещё нет в открытом доступе.

Поддерживаемые модели и как запустить Project Zero на своём CPU

Project Zero поддерживает две модели: BitNet b1.58-2B-4T и Qwen Bonsai-27B. Обе загружаются в формате GGUF - стандарте, который стал де-факто для локального инференса после успеха llama.cpp. Никаких дополнительных конвертаций не требуется.

Требования к оборудованию: от старых AVX2 до современных Xeon и EPYC

Минимальное требование - процессор с поддержкой AVX2. Это Intel Haswell (2013) и новее, AMD Excavator (2015) и новее. Для VBMI-ядра нужен процессор с AVX-512 VBMI - Intel Ice Lake (2019) и новее, либо серверные чипы на архитектуре Zen 4 и выше. Без VBMI движок всё равно работает, но прирост относительно bitnet.cpp будет меньше.

Рекомендуемые характеристики для комфортного инференса:

  • 8 и более физических ядер - для эффективного распараллеливания по слоям.
  • 16 ГБ RAM для Bonsai-27B, 8 ГБ для BitNet 2B.
  • Поддержка AVX-512 VBMI для максимальной производительности.

Интересный сценарий - запуск на мини-ПК и бюджетных системах. Мы тестировали Qwen3.5 122B на стандартном оборудовании и видели, как квантование и архитектура влияют на скорость. Project Zero идёт дальше - он оптимизирует сам рантайм, а не только модель.

Пошаговый запуск BitNet b1.58-2B-4T и Bonsai-27B

Сборка и запуск Project Zero - это три шага. Первый: клонирование репозитория и компиляция.

git clone https://github.com/project-zero/zero
cd zero
make clean && make -j$(nproc)

Второй: загрузка модели в формате GGUF. Для BitNet b1.58-2B-4T файл весит около 400 МБ, для Bonsai-27B - около 5 ГБ. Модели размещены в открытом доступе на Hugging Face.

Третий: запуск с указанием пути к модели, числа потоков и флага mmap.

./zero --model bitnet-b1.58-2b-4t.gguf --threads 16 --mmap
./zero --model bonsai-27b.gguf --threads 32 --mmap

Флаг --mmap включает отображение файла в память. Без него модель загружается целиком в RAM. Для систем с ограниченной памятью mmap обязателен - он позволяет запустить Bonsai-27B даже на 8 ГБ RAM, хотя производительность будет зависеть от скорости диска.

После запуска движок выводит статистику: число токенов, скорость генерации, использование памяти. Для BitNet 2B на Xeon ожидаемый результат - 30-36 токен/с. Для Bonsai-27B цифры будут ниже, но точных бенчмарков пока нет - здесь вы можете внести свой вклад в развитие проекта.

Ограничения, статус проекта и призыв к сообществу

Project Zero находится на ранней стадии. Это не продукт с долгосрочной поддержкой, а исследовательский проект, который разработчик выложил в открытый доступ для тестирования и сбора обратной связи. Основные ограничения:

  • Поддерживаются только две модели - BitNet b1.58-2B-4T и Bonsai-27B. Другие архитектуры, включая стандартные трансформеры с FP16-весами, не поддерживаются.
  • Для Bonsai-27B нет CPU-бенчмарков. Все известные результаты получены на GPU, и прямое сравнение невозможно.
  • Производительность сильно зависит от микроархитектуры CPU. На процессорах без VBMI прирост относительно bitnet.cpp будет скромнее.
  • Нет поддержки квантования KV-кэша - техники, которая в других проектах даёт прирост скорости до 68% при работе с длинным контекстом.

Разработчик приглашает сообщество протестировать движок на различных x86 CPU: от старых чипов с AVX2 до высокопроизводительных Xeon и EPYC. Особенно ценны результаты для Bonsai-27B - каждый новый бенчмарк помогает понять реальные возможности CPU-инференса для моделей среднего размера. Если у вас есть доступ к серверному оборудованию, запустите тест и поделитесь цифрами в Issues на GitHub.

Для каких задач подходит Project Zero: сценарии использования

Project Zero - инструмент для тех, кто хочет запускать LLM без GPU. Сценарии, в которых он особенно полезен:

  • Локальный инференс на устройствах без GPU. Серверы, VPS, мини-ПК, старые рабочие станции - любое x86-железо с 8+ ГБ RAM превращается в платформу для LLM. Мы уже видели, как компактные модели вроде Granite 4.0 Nano меняют подход к edge-вычислениям - Project Zero делает то же самое для более крупных архитектур.
  • Обработка запросов с низкими требованиями к задержке. 36 токен/с - это быстрее скорости чтения. Для чат-ботов, суммаризации текстов, генерации ответов на email такая скорость достаточна.
  • Эксперименты с тернарными моделями. BitNet b1.58-2B-4T - одна из первых моделей, обученных с тернарными весами. Project Zero позволяет исследовать её поведение без покупки GPU.
  • Развёртывание на дешёвых серверах. Аренда сервера с Xeon и 16 ГБ RAM стоит в разы дешевле, чем инстанс с GPU. Для проектов с ограниченным бюджетом это решающий фактор.

Project Zero не заменяет GPU-решения для высоконагруженных систем. Но для задач, где важна стоимость, а не пиковая производительность, он предлагает реальную альтернативу. 36 токен/с на CPU - это уровень, который ещё год назад казался недостижимым без видеокарты. Сегодня это работающий код на чистом C, открытый для тестирования и доработки.

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