
Итак, только вычислительная часть обучения пятой версии ChatGPT обошлась в $500 миллионов. А вот уже полные затраты с исследованиями, данными и экспериментальными прогонами — от $1.25 до $2.5 млрд по разным оценкам. И речь пока именно о старте новой линейки, которая релизнулась чуть больше года назад. Далее — сервер с восемью H100 стоит от $270K до $450K, и это не считая сети, охлаждения и инфраструктуры. И это все при том, что 90% параметров большинства нейросетей — числа вроде 0.0003 или -0.0007, которые несут минимум полезной информации, но хранятся как полноценные 16-битные числа с плавающей точкой.
Содержать нейросеть — задачка весьма дорогая. Отсюда и вырос целый класс исследований — как сделать нейросеть, которая думает почти так же хорошо, но весит в 10 раз меньше и не требует GPU за $10K? Однобитные и тернарные сети — один из ответов на этот вопрос.
Привет, дорогой ХАБР! Сегодня постараемся рассказать, насколько, собственно, реальны однобитные LLM.
А откуда взялась сама идея?
Первые попытки сжать веса до единственного бита датируются аж 2015-2016 годами. Группа из Монреальского университета предложила двоичное соединение (оно же — “BinaryConnect”) — подход, при котором каждый вес принимает только два значения. -1 или +1.
Веса нейросети — это просто числа, которые определяют силу связи между нейронами. Грубо говоря, у каждого соединения есть условный коэффициент важности — т.е. насколько сильно один нейрон влияет на другой. Это и есть тот самый вес.

Во время обучения эти числа постепенно корректируются на очень маленькие величины. Микрошаги вроде +0.0003 или -0.0001. Если хранить только -1 или +1, такой шаг просто исчезнет, т.к. 1 + 0.0003 округляется обратно в 1. И именно поэтому точные значения накапливаются отдельно, а для вычислений берется уже округленная версия.
Ребята из Монреаля в своем подходе и предложили — хранить точно, а считать грубо.
Год спустя команда из Технионского института (Израиль) под руководством Hubara пошла немного дальше. Бинаризовали не только веса, но и активации — промежуточные числа, которые передаются между слоями. Параллельно Rastegari с коллегами в работе XNOR-Net заменили матричное умножение на операцию побитового совпадения (или же “XNOR”, т.е. “eXclusive NOR” — “исключающее НЕ-ИЛИ”) и простой подсчет совпавших битов. Вот, и теоретически это до 58 раз быстрее обычного умножения на специализированном железе.
Тестировали на своих стандартных академических наборах. MNIST — 70 000 изображений рукописных цифр от 0 до 9, самый простой тест для классификации. CIFAR-10 — 60 000 небольших цветных фотографий в 10 категориях. Разные там самолеты, автомобили, птицы, кошки. На этих двух наборах бинарные сети справлялись хорошо. Но с базой изображений, или же ImageNet, с более чем 1.2 миллиона изображений в 1000 категориях, полноценный боевой тест оказался ощутимо хуже. На нем бинарные сети теряли 5-20% точности по сравнению с обычными. И это, к сожалению, ставило серьезный вопрос по их эффективности.
После чего на несколько лет тема опять ушла в академические исследования.
Собственно, проблема оказалась не в самой идее бинаризации, а в двух вещах. Первая — масштаб. Маленькие сети чувствительны к точности весов, большие — меньше. А вторая — ноль. Нейрон не реагирует на все входные сигналы. Большинство для него просто нерелевантны. Какой-то один распознает горизонтальные линии, другой углы, третий кривые. И каждому важен только узкий набор признаков. Вес 0 — это самый простой способ сказать нейрону, что его такая история не касается.
В бинарной сети {-1, +1} нуля нет. Каждое соединение всегда активно. Либо усиливает, либо гасит. Чтобы нейрон фактически не влиял на результат, приходится компенсировать одни соединения другими. И емкость уходит на имитацию тишины.
Такая вот ситуация.
Когда — три лучше двух
Тернарные веса — {-1, 0, +1} — решают обе проблемы выше. Но, опять же, частично. Ноль позволяет нейрону просто не участвовать в вычислении. Это приближается к тому, как работают разреженные представления — когда большинство нейронов молчат, а активны только те, что отвечают за конкретный признак.
По теории информации три состояния кодируются в log₂(3) ≈ 1.58 бита на параметр. Отсюда и пошло название BitNet b1.58 от Майкрософт.
Математика прямого прохода при тернарных весах упрощается до очень простых сложений. Стандартная операция y = W · x, где умножение матриц на числа с плавающей точкой съедает основную часть вычислений, превращается в сумму входных значений с весом +1 минус сумма с весом -1. Умножения нет вообще. Процессор выполняет это быстрее, тратит меньше энергии и не греется так сильно.

Но есть техническая проблема с обучением. Функция sign(x), которая превращает вес в -1 или +1, не дифференцируема — производная равна нулю почти везде, обратное распространение ошибки через нее не идет. И нашли костыль. В прямом проходе используют настоящую sign(x), в обратном делают вид, что функции нет, и пропускают градиент насквозь. Проще говоря — при обучении притворяемся, что округления не было.
С теорией разобрались. А что получилось реализовать?
На момент написания данной статьи — в этой области всего несколько условных релизов.
Тот самый BitNet b1.58 от Microsoft — максимально зрелое и задокументированное решение. Официальная модель microsoft/bitnet-b1.58-2B-4T вышла в апреле 2025. Скромные, по нынешним меркам, 2.4 миллиарда параметров, обученных на 4 триллионах токенов. Доступна, кстати, на Hugging Face.
Для инференса нужен отдельный движок bitnet.cpp — стандартные трансформеры с тернарными весами, увы, работают медленно, без прироста. В мае 2025 добавили CUDA-ядра для GPU, в январе 2026 обновили CPU-ядра с приростом 1.15-2.1× к предыдущей версии.
Архитектуры без матричного умножения — более радикальное направление, чем BitNet. BitNet убирает умножения только из линейных слоев, а механизм внимания все еще считает матрично. Т.е., обычное внимание смотрит на все токены сразу — каждое слово сравнивается с каждым другим. Это, собственно, и есть дорогое матричное умножение.
И тут данный блок заменили на рекуррентный. Модель читает токены по очереди и держит состояние памяти. Все, что было прочитано до этого момента. И никаких сравнений всех со всеми. Ни одного матричного умножения нигде в сети. При обучении экономит до 61% памяти, при инференсе — более 10× против обычного трансформера.
Рабочие модели тоже есть. ridger/MMfreeLM-2.7B — яркий пример. Можно найти на HuggingFace. Но если говорить откровенно, дальние зависимости очень размываются и то, что было 500 токенов назад, теряется. Трансформер с вниманием помнит точнее, конечно же. Так что — до широкого применения не дошло.
Bonsai WebGPU — отдельное семейство тернарных моделей (1.7B, 4B, 8B), которые запускаются прямо в браузере через WebGPU. Никакого сервера и установки не нужно — открыли ссылку, модель загружается локально в вкладку и считается на GPU пользователя. 8B-модель занимает ~1.15 ГБ видеопамяти. После первой загрузки работает оффлайн. Демо доступно на HuggingFace Spaces — webml-community/bonsai-webgpu.
Квантизация готовой модели до 2-3 бит — алгоритмы сжатия QuIP#, AQLM. Без обучения с нуля. Берете уже обученную модель и сжимаете ее веса математическими методами за несколько часов на одной видеокарте.
Т.е., например, ISTA-DASLab/Meta-Llama-3-8B-Instruct-AQLM-PV-2Bit-1×16 — Llama 3 8B в 2 битах, около 4 ГБ (эмбеддинги остаются в полной точности). relaxml/Llama-2-70b-chat-E8P-2Bit — 70B модель в ~17 ГБ вместо 140 ГБ в FP16. Качество хуже INT4, но лучшее среди 2-битных методов — основной смысл в том, чтобы запустить 70B там, куда INT4 физически не влезает. И без $100K на переобучение с нуля.
Но есть одно — НО

Нельзя взять Llama 4, Mistral Large 3 или Qwen3.6 и конвертировать их в BitNet. Это просто не получится без критической потери качества. Модель должна обучаться с нуля с тернарными ограничениями с первого шага, т.е. обучение с учетом квантизации. Суть в том, что модель адаптируется под ограничения весов прямо во время обучения, а не пытается соответствовать им после.
Паритет с FP16 по качеству достигается только от ≥3B параметров. На моделях меньшего размера разрыв очень ощутим. На бенчмарках типа HellaSwag разница достигает 5-8% в пользу FP16.
Грубо говоря, пока что не более чем экспериментальный статус.
И по GPU. До мая 2025 BitNet на видеокарте работал медленнее FP16, потому что нативных CUDA-ядер не было. Веса приходилось распаковывать обратно в числа с плавающей точкой перед матричным умножением. Сейчас CUDA-ядра есть в репозитории bitnet.cpp, но ни vLLM, ни TensorRT, ни TGI их не поддерживают. Для GPU-деплоя в проде нужны разного рода кастомные решения.
Но, опять же — мы уже давно живем во времени, когда железо пока не успевает за идеями. Коммерческих чипов с нативной тернарной арифметикой нет. Ай-би-эмовский NorthPole — исследовательский прототип, в коммерческое производство не запущен. Нативно поддерживает 2/4/8-битные операции, тернарный формат технически подходит — но когда и выйдет ли в серию, информации нет. Intel актуально работает с Loihi 2 и системой Hala Point на его основе — тернарных весов в нативном виде нет. Groq, Cerebras, SambaNova нативную тернарную арифметику не поддерживают и публично не анонсировали. Все три заточены под FP8/INT8 и работают с обычными форматами квантизации.
Пока что — история с BitNet занимает нишу инструмента для экспериментов с конкретными нишевыми задачами на CPU-железе. Для большинства практических бытовых задач в 2026 году условный Q4_K_M (GGUF) через llama.cpp закрывает вопрос быстрее, дешевле и надежнее.
Вот нам кажется, что следующие 2-3 года будут показательными. Либо кто-то выпустит чип с нативным тернарным блоком и что-то такое пойдет в массы, либо про направление забудут. Хотелось бы, конечно, чтобы все получилось. Экологичнее и экономичнее это все.
ссылка на оригинал статьи https://habr.com/ru/articles/1030938/