BitNet в браузере: WebGPU + WGSL для iPad в 2026 | AiManual
AiManual Logo Ai / Manual.
14 Фев 2026 Инструмент

BitNet в браузере: разбор PoC на WebGPU и WGSL для запуска 1-битных моделей на iPad

Технический разбор PoC BitNet b1.58 на WebGPU и WGSL для запуска 1-битных LLM на iPad M4 в 2026 году. WGSL шейдеры, оптимизации, реальные тесты.

BitNet на iPad? Да, это работает в 2026

Помните, когда все смеялись над 1-битными моделями? Говорили, что это очередной хайп, который никуда не годится. А теперь открываете браузер на iPad, включаете флаг chrome://flags/#enable-unsafe-webgpu и запускаете полноценную BitNet b1.58-3B прямо на устройстве. Без серверов, без облаков, без подписок.

Это не фантастика. Это Proof of Concept, который появился в январе 2026 и уже показывает стабильные 15-20 токенов в секунду на iPad Pro с M4. И самое интересное - вся магия происходит в WGSL шейдерах, которые компилируются прямо в браузере.

💡
WebGPU окончательно стабилизировался в начале 2025 года. К 2026 все основные браузеры поддерживают его без флагов в 95% случаев. WGSL (WebGPU Shading Language) стал стандартом де-факто для GPU вычислений в браузере.

Зачем вообще это нужно?

Потому что классические 8-битные модели на WebGPU - это как пытаться запихнуть слона в телефонную будку. Даже Phi-3.5 Mini требует 4 ГБ VRAM, а у большинства iPad только 8 ГБ общей памяти. А здесь у нас BitNet b1.58, где каждый параметр занимает... 1.58 бита. Математически.

На практике это значит, что 3-миллиардная модель помещается в 600 МБ вместо 6 ГБ. И вычисления становятся проще - вместо сложных матричных умножений с плавающей точкой мы работаем с целыми числами и битовыми операциями.

Важный нюанс 2026 года: BitNet b1.58 на самом деле использует три значения: -1, 0, 1. Поэтому 1.58 бита на параметр - это теоретический минимум Шеннона, а не округление. На практике храним 2 бита.

Как работает WGSL шейдер для BitNet

Здесь начинается самое интересное. WGSL - это не GLSL и не HLSL. У него своя специфика, свои ограничения. Например, нет атомарных операций над битами в рабочих группах (workgroup). Нет удобных битовых сдвигов для произвольных типов.

Но есть кое-что лучше - подгрупповые операции (subgroup operations), которые появились в WGSL 1.2 в конце 2025. Они позволяют синхронизировать выполнение внутри подгруппы из 32 потоков без барьеров. Идеально для нашего случая.

Вот как выглядит ядро матричного умножения для BitNet в WGSL:

@group(0) @binding(0) var input: array;
@group(0) @binding(1) var weights: array;
@group(0) @binding(2) var output: array;

@compute @workgroup_size(256)
fn main(@builtin(global_invocation_id) global_id: vec3) {
    let idx = global_id.x;
    if (idx >= arrayLength(&output)) {
        return;
    }
    
    // Каждый поток обрабатывает 32 входа за раз
    // Веса упакованы по 16 значений в u32 (2 бита на значение)
    var sum: i32 = 0;
    for (var i: u32 = 0; i < 32; i += 1) {
        let weight_packed = weights[(idx * 32 + i) / 16];
        let weight_shift = ((idx * 32 + i) % 16) * 2;
        let weight_bits = (weight_packed >> weight_shift) & 0x3;
        
        // Преобразуем 2 бита в -1, 0, 1
        let weight_value = select(-1, select(0, 1, weight_bits == 2), weight_bits == 1);
        
        sum += weight_value * i32(input[i]);
    }
    
    output[idx] = sum;
}

Это упрощенная версия, но она показывает основную идею. Настоящий PoC использует подгрупповые операции для редукции и обработки нескольких выходов за вызов.

Главная проблема: нет прямой поддержки int8

Вот что реально бесит в WGSL на 2026 год. В Metal Shading Language есть тип `packed_int8`, в CUDA - `int8_t`. А в WGSL? Только `i32`, `u32`, `f32`. И все.

Приходится делать упаковку/распаковку вручную. Каждый параметр BitNet занимает 2 бита, поэтому мы упаковываем 16 значений в одно 32-битное слово. Это добавляет накладных расходов, но все равно быстрее, чем работать с float32.

Кстати, если вы хотите глубже разобраться в архитектуре BitNet, посмотрите статью про конец эры MatMul. Там подробно объясняют, почему умножение матриц с плавающей точкой уходит в прошлое.

Производительность: цифры против ожиданий

Ожидали 100 токенов в секунду? Забудьте. Реальность на iPad Pro M4 (январь 2026):

Модель Размер Токенов/с Память
BitNet b1.58-3B 3B параметров 18-22 ~600 МБ
Phi-3.5 Mini (WebGPU) 3.8B параметров 8-12 ~4 ГБ
Llama 3.2 3B (квантованная) 3B параметров 6-9 ~2 ГБ

Почему так медленно? Потому что WebGPU все еще добавляет оверхеда. Каждый вызов шейдера проходит через несколько слоев абстракции: браузер → драйвер ОС → драйвер GPU. В нативных приложениях этот стек тоньше.

Но 20 токенов в секунду для 3B модели на iPad - это революция. Особенно если учесть, что в 2024 году такое было невозможно в принципе.

Архитектура PoC: что внутри

Проект на GitHub (не буду называть, чтобы не рекламировать) состоит из трех основных частей:

  1. Конвертер весов - берет оригинальные веса BitNet в формате PyTorch и конвертирует в упакованный формат для WGSL. Каждый параметр сжимается до 2 бит, затем 16 параметров упаковываются в одно u32.
  2. WGSL шейдеры - набор ядер для разных операций: матричное умножение, attention, layer norm. Каждое ядро оптимизировано под особенности BitNet.
  3. JavaScript раннер - управляет конвейером WebGPU, загружает веса, вызывает шейдеры, обрабатывает вывод. Использует новые API из WebGPU 2.0 (2025 релиз).

Самое сложное - это attention. В BitNet он тоже 1-битный, но требует сложных операций с масками и softmax. Пришлось реализовывать кастомный softmax на WGSL, который работает с целыми числами.

Внимание: текущая реализация не поддерживает kv-cache. Каждый токен генерируется с полным пересчетом контекста. Для 2048 токенов контекста это означает 2048² операций. На iPad Pro M4 это ограничивает контекст ~512 токенами для приемлемой скорости.

Сравнение с альтернативами

Почему не использовать bitnet.cpp через WebAssembly? Потому что WASM не имеет доступа к GPU. Все вычисления идут на CPU, а M4 хоть и быстрый, но не настолько.

Почему не Transformers.js? Потому что он не поддерживает 1-битные модели. Да и вообще, большинство фреймворков на 2026 год все еще заточены под float16/int8.

Есть экспериментальная поддержка BitNet в ONNX Runtime Web, но она требует дополнительных конвертаций и работает медленнее нативного WGSL.

Ограничения и подводные камни

Первое и главное: тепловыделение. iPad Pro M4 при полной нагрузке на GPU греется как утюг. Через 5 минут генерации срабатывает thermal throttling, и скорость падает до 8-10 токенов в секунду.

Второе: потребление памяти. Хотя модель занимает всего 600 МБ, WebGPU требует дополнительные буферы для промежуточных результатов. В итоге под нагрузкой Safari съедает 1.5-2 ГБ RAM.

Третье: стабильность. WebGPU в Safari 18 (2026) все еще сыроват. Каждые 50-100 запросов случается краш GPU процесса. Приходится перезагружать страницу.

Кому это нужно в 2026?

Разработчикам локальных AI-приложений для iOS/iPadOS. App Store до сих пор не пускает приложения с JIT-компиляцией, а WebGPU работает в браузере без ограничений.

Стартапам, которые хотят демо своей модели без серверной инфраструктуры. Открыл ссылку на iPad - и вот тебе живая демка.

Исследователям, которые тестируют новые архитектуры. Не нужно покупать дорогое железо - достаточно iPad Pro и браузера.

Если вы хотите запустить что-то более традиционное, посмотрите гайд по запуску GPT-OSS на WebGPU. Там другой подход, но принципы те же.

Что будет дальше?

К концу 2026 обещают WebGPU 2.1 с поддержкой int8/int4 напрямую. Это уберет половину накладных расходов на упаковку/распаковку.

Apple анонсировала Metal 4 для Safari, который даст прямой доступ к нейронному движку M4. Представьте: BitNet, работающий на Neural Engine через браузер. Скорость возрастет в 5-10 раз.

И главное - появятся инструменты для автоматической конвертации PyTorch моделей в WGSL. Сейчас это делается вручную, что занимает недели. Будет как ONNX, только для браузера.

А пока что этот PoC - доказательство, что 1-битные модели в браузере не только возможны, но и практичны. Медленно? Да. Сыро? Еще как. Но работает. На обычном iPad, который лежит у половины читателей этой статьи.

Попробуйте запустить BitNet на своем устройстве. Не для работы, а просто чтобы понять: будущее edge AI уже здесь. Оно не идеальное, не быстрое, но оно работает у вас в кармане. И это меняет все.