Ключевые результаты: 97.5 ток/с и 9.86x ускорение
Экспериментальный бэкенд для инференса Falcon3-10B-Instruct в 1.58-битном формате выдаёт 97.5 токенов в секунду на декоде на единственной RTX 5070. Это в 9.86 раза быстрее стокового Transformers BitLinear. Цифры получены на открытом прототипе, который автор опубликовал с полным кодом: Triton-ядра, упаковка K-контигусных тернарных весов, декодирование через packed-word DP4A, StaticCache и CUDA Graph.
Численная верификация подтверждает побитовое совпадение логитов и жадных последовательностей с эталоном - ошибок не выявлено. Это исследовательский проект, а не готовая замена BitBLAS или vLLM. Автор призывает сообщество к независимому воспроизведению на Ampere, Hopper, Ada и Blackwell.
Архитектура экспериментального бэкенда
Ядро решения - комбинация из четырёх компонентов. Triton отвечает за написание производительных GPU-ядер без погружения в CUDA C++. Упаковка тернарных весов снижает объём памяти и повышает пропускную способность. DP4A-инструкции декодируют упакованные веса за одну операцию. StaticCache и CUDA Graph убирают накладные расходы на каждом шаге генерации токенов.
Triton-ядра и упаковка тернарных весов
1.58 бита на вес - это тернарное квантование: каждое значение принимает один из трёх вариантов: -1, 0 или +1. Теоретический минимум для кодирования трёх состояний - log2(3) ≈ 1.58 бита. На практике веса упаковываются в K-контигусные блоки для эффективного доступа к памяти GPU. Тернарная матрица перестраивается так, чтобы соседние элементы в памяти соответствовали соседним позициям в вычислениях. Это снижает промахи кэша и повышает utilisation шины памяти.
Triton выбран как компромисс между производительностью и скоростью разработки. Ядра на Triton компилируются в PTX, сохраняя близкую к нативному CUDA производительность, но пишутся на Python-подобном DSL. Автор прототипа реализовал кастомные ядра для умножения тернарных матриц, которые напрямую работают с упакованным представлением весов.
Декодирование через DP4A: packed-word операции
DP4A (integer dot product with 4-element vectors and accumulate) - инструкция целочисленного умножения с накоплением, доступная начиная с архитектуры Pascal. Она выполняет скалярное произведение двух четырёхэлементных векторов int8 и прибавляет результат к аккумулятору int32. В контексте 1.58-битных весов packed-word представление упаковывает несколько тернарных значений в одно машинное слово. Одна инструкция DP4A обрабатывает сразу несколько весов, что даёт кратный выигрыш по сравнению с наивным распаковыванием и умножением.
Механика проста: тернарные веса группируются, кодируются в int8-представление и подаются на DP4A вместе с соответствующими активациями. Результат накапливается в int32. Эта схема обходит дорогие преобразования типов и минимизирует количество инструкций на один вес. Для Falcon3-10B-Instruct с её объёмом параметров экономия оказывается решающей - без DP4A скорость декодирования была бы в разы ниже.
StaticCache и CUDA Graph: минимизация overhead
StaticCache - это предвыделенный буфер для ключей и значений attention-механизма. При обычном инференсе KV-кэш динамически растёт с каждым новым токеном, вызывая переаллокации памяти и синхронизации. StaticCache фиксирует максимальный размер кэша заранее. Память выделяется один раз, и каждый новый токен записывается в уже готовый буфер. Нулевые переаллокации, нулевые сюрпризы от аллокатора.
CUDA Graph захватывает полную последовательность GPU-операций для одного шага декодирования и переиспользует её. Без графа каждый запуск ядра требует отдельного вызова из CPU, проверки ошибок и планирования на GPU. С графом CPU отправляет один сигнал, и GPU выполняет всю цепочку без участия хоста. Для модели размером 10B параметров на RTX 5070 это убирает десятки микросекунд накладных расходов с каждого токена. В сумме StaticCache и CUDA Graph обеспечивают стабильную загрузку GPU и предсказуемую задержку на каждом шаге.
Численная верификация: побитовое совпадение логитов и последовательностей
Оптимизации не должны ломать модель. Автор провёл трёхуровневую проверку. Первый уровень - побитовое сравнение логитов: выходные значения модели после всех слоёв сравниваются с эталонным инференсом без квантования и упаковки. Второй уровень - жадные последовательности: модель генерирует текст жадным декодированием, и каждый токен сверяется с эталонной последовательностью. Третий уровень - синтетические формы ядер: проверка корректности работы Triton-ядер на специально сконструированных тензорах с известным результатом.
На всех трёх уровнях ошибок не выявлено. Побитовое совпадение означает, что 1.58-битное квантование и packed-word DP4A не вносят искажений в вычисления. Это критически важно для доверия к прототипу: ускорение в 9.86 раза не достигнуто ценой деградации качества.
Ограничения и место среди профильных рантаймов
Прототип не конкурирует с BitBLAS или vLLM. Это исследовательская реализация, заточенная под демонстрацию конкретной техники - 1.58-битного инференса на одном GPU. Отсутствуют production-фичи: нет continuous batching, нет планировщика запросов, нет поддержки распределённого инференса, нет интеграции с OpenAI-совместимым API. Код написан для RTX 5070 и не тестировался на других GPU.
BitBLAS предлагает оптимизированные ядра под широкий спектр моделей и форматов квантования с фокусом на переиспользование. vLLM - это полноценный продакшн-рантайм с PagedAttention, continuous batching и экосистемой интеграций. Подробное сравнение бэкендов для инференса LLM с бенчмарками на H100 и B200, включая vLLM и TensorRT-LLM, мы разбирали в статье «Как выбрать бэкенд для инференса LLM».
Автор прототипа прямо призывает к независимому воспроизведению на других поколениях NVIDIA GPU - Ampere (A100, RTX 3090), Hopper (H100), Ada (RTX 4090) и Blackwell (RTX 5090, B100). Только кросс-архитектурные замеры покажут, насколько универсален подход. Сравнение с BitBLAS и vLLM на одинаковых моделях и форматах квантования даст объективную картину.
Как воспроизвести эксперимент: код и рекомендации
Код прототипа открыт и доступен в репозитории автора. Для запуска потребуется GPU с поддержкой DP4A - это все архитектуры начиная с Pascal (GTX 10xx), но практически интересны Ampere и новее. RTX 3090 с тернарной квантизацией уже показывает впечатляющие результаты: в нашем тестировании Qwen3.6 27B на RTX 3090 с тернарным квантованием достигнута скорость 60 токенов в секунду при потреблении около 21 ГБ VRAM и стабильной работе tool call. Детали - в статье «Тестирование Qwen3.6 27B с тернарной квантизацией на GeForce RTX 3090».
При сборке прототипа обратите внимание на версию Triton - не все версии одинаково стабильны на разных GPU. Возможны нюансы с компиляцией ядер под конкретную архитектуру. Автор рекомендует начинать с точного воспроизведения конфигурации из репозитория, а затем экспериментировать с другими моделями и GPU. Результаты бенчмарков публикуйте в открытом доступе - это поможет сообществу быстрее оценить потенциал 1.58-битного инференса.
Для тех, кто работает с CPU-инференсом, интересен Project Zero - движок на чистом C99, который на Intel Xeon выдаёт до 36.25 токенов в секунду и поддерживает Bonsai-27B. Подробный разбор архитектуры и бенчмарки - в статье «Project Zero - CPU-only инференс LLM на чистом C».