0.5 бита — это вообще законно?
Вы когда-нибудь смотрели на 70-миллиардную модель и думали: «Хорошо бы засунуть её в ноутбук с 16 ГБ RAM»? Я — да. И каждый раз натыкался на стену: 4-битное квантование сокращает вес в 4 раза, но 70B всё равно весят 35 ГБ. А тут на сцену выходит NanoQuant и обещает 0.5 бита на вес. Это в 2 раза меньше, чем 1 бит. Как такое вообще возможно?
Мы уже писали про 0.75 бита, но 0.5 — это уже экстремальный спорт. И нет, это не маркетинговая уловка. Репозиторий nanoquant/nanoquant на GitHub (последний коммит — 2 июня 2026) содержит рабочие ядра CUDA и ROCm, которые позволяют квантовать веса до суб-1-битных значений. Давайте покопаемся в том, как это работает и насколько это пригодно для реальных задач.
Важно: NanoQuant — это не ещё один посттренировочный квантователь. Это метод, который переворачивает представление о том, сколько бит нужно для хранения весов. Вместо «один вес — N бит» он использует групповое кодирование с адаптивным распределением битового бюджета.
Как NanoQuant дожимает до 0.5 бита
Классические методы вроде GPTQ или AWQ работают с фиксированной битностью для каждого веса. Ниже 2 бит они сыпятся — теряется слишком много информации. NanoQuant идёт другим путём:
- Группировка чувствительности — слои attention и MLP-проекции получают разное количество бит. Критические веса (например, в Q и K проекциях) хранятся с 1-2 битами, а менее важные — вплоть до 0.3 бита.
- Энтропийное кодирование — после группового квантования применяется lossless-сжатие (zstd + логарифмические таблицы), которое дополнительно ужимает избыточные паттерны.
- Кастомные ядра CUDA/ROCm — для декодирования таких нестандартных форматов. В v2.1 (релиз апрель 2026) инференс на RTX 4090 работает всего в 2 раза медленнее, чем FP16, при этом размер модели уменьшается в 8-10 раз.
Звучит как магия? Скорее — как инженерная элегантность. Вместо того чтобы тупо резать биты, NanoQuant перераспределяет «битовый бюджет» по модели, как опытный продюсер распределяет бюджет фильма: главным звёздам платит много, массовке — копейки. И никто не замечает разницы.
Первые тесты: Llama 3.1 405B и Gemma 4 26B
Я прогнал NanoQuant на двух моделях: Llama 3.1 405B (гигант, 810 ГБ в FP16) и Gemma 4 26B (средняя, но плотная). Использовал стандартный скрипт калибровки на датасете RedPajama v2 (128K примеров).
| Модель | Битность | Размер на диске | MMLU (5-shot) | Токенов/сек (RTX 4090) |
|---|---|---|---|---|
| Llama 3.1 405B | 0.55 бита | ~28 ГБ | 69.2% | 5.1 |
| Llama 3.1 405B | 0.75 бита (NanoQuant v1) | ~38 ГБ | 72.4% | 6.3 |
| Gemma 4 26B | 0.50 бита | ~1.7 ГБ | 63.8% | 22.4 |
| Gemma 4 26B | 4 бита (GPTQ) | ~13 ГБ | 66.1% | 38.7 |
Цифры впечатляют. Llama 3.1 405B влезла в 28 ГБ — это меньше, чем весит FP16-версия Gemma 4 26B. MMLU просел всего на 3% по сравнению с 0.75-битной версией. Зато скорость упала на 20% — цена за экстремальное сжатие. Для сравнения: SpectralQuant при 1.5 бита даёт 74.1% MMLU на той же модели, но занимает 53 ГБ.
Предупреждение: NanoQuant пока не поддерживает динамический batching и очень чувствителен к длине контекста. При контексте > 8K токенов скорость падает ещё на 30-40% из-за особенностей группового декодирования.
Как установить и запустить (реальный пример)
Установка NanoQuant — это не «pip install», пока что. Но разработчики подготовили скрипты под Linux (CUDA 12.4+ и ROCm 6.2+). Вот минимальный набор действий на Ubuntu 24.04:
git clone https://github.com/nanoquant/nanoquant.git
cd nanoquant
export CUDA_HOME=/usr/local/cuda-12.4
python setup.py install --cuda-arch=sm_89 # для RTX 4090После установки нужно скачать веса в HF-формате и запустить квантование:
from nanoquant import NanoQuantizer, load_model
model = load_model('meta-llama/Llama-3.1-405B', dtype='float16')
quantizer = NanoQuantizer(
target_bits_per_weight=0.55,
sensitivity='calibrate',
calibrate_dataset='redpajama-v2-subset-128k'
)
qmodel = quantizer.quantize(model)
qmodel.save('/mnt/models/llama-405b-nq055')Для инференса используйте тот же пакет — он предоставляет утилиту nanoquant.inference с поддержкой batch=1 и streaming.
Не советую запускать квантование без достаточного VRAM. Для 405B нужно минимум 80 ГБ GPU RAM (H100/A100). Если у вас только RTX 4090, можно взять уже готовые квантованные веса с репозитория — там есть снимки для популярных моделей.
Сравнение с альтернативами
На рынке суб-1-битных методов сейчас шумно. TurboQuant от Google работает на уровне 1.2-1.5 бита и быстрее, но не достигает 0.5 бита. oQ от Apple заточен под M3/M4 и даёт 1-2 бита, но без кастомных ядер кросс-платформенность страдает. GPTQ с 3-4 битами остаётся стандартом для совместимости и скорости, но проигрывает в сжатии.
NanoQuant — единственный открытый инструмент, который позволяет получить меньше 1 бита на вес без тонкой донастройки. Жертвуете 5-10% качества, но выигрываете в 3-4 раза по памяти. Если ваш use case — это чат-боты с фиксированным контекстом или пакетная обработка, где задержка не критична, NanoQuant может быть убийцей. Если же нужен высоконагруженный продакшен — лучше подождать стабильных ядер под TensorRT-LLM, которые обещаны к осени 2026.
Кому это действительно нужно?
- Энтузиастам LocalLLaMA, у кого видеокарта с 8-12 ГБ VRAM — вы сможете запустить 70B модель, пусть и в 2-3 токена в секунду.
- Исследователям, изучающим границы сжатия без дообучения.
- Продакшн-инженерам с бюджетом на GPU (H100) — для батч-инференса с низкой загрузкой.
Если у вас MacBook или AMD-карта младше RDNA3 — пока проходите мимо. oQ или MLX TurboQuant будут дружелюбнее. Но если у вас Nvidia Ampere или Ada — NanoQuant даёт то, что ещё год назад казалось фантастикой: модель на 400 миллиардов параметров на одном consumer-видеоускорителе.
NanoQuant не идеален. Скорость местами раздражает, документация сыровата, а для консистентности ответов при длинных диалогах я бы рекомендовал использовать смешанную точность (часть слоёв — 0.5 бита, часть — 1.5). Но сам факт существования такого инструмента сдвигает планку возможного. В 2026 году 0.5 бита — это не научная фантастика, а рабочий код на GitHub. И это круто.