WebLLM запускает языковые модели прямо в браузере через WebGPU

WebLLM запускает языковые модели прямо в браузере через WebGPU

WebLLM, это открытый движок для запуска языковых моделей прямо в браузере: вся работа модели происходит на стороне клиента, без обращения к серверу, а ускорение даёт WebGPU. Проект, спутник MLC LLM, инфраструктуры для универсального развёртывания языковых моделей на разном оборудовании.

WebLLM полностью совместим с API OpenAI: разработчик может использовать привычный интерфейс OpenAI для локальных моделей с открытым кодом, включая потоковую генерацию (стриминг), JSON-режим для структурированного вывода, управление на уровне логитов и сидирование (seeding). Function-calling (вызов функций) пока в разработке.

Из коробки поддерживаются модели семейств Llama 3, Phi 3, Gemma, Mistral и Qwen2 (версии на 0,5, 1,5 и 7 миллиардов параметров), а также ряд других, полный список выложен в MLC Models. Можно подключить и собственную модель, если она сконвертирована в формат MLC. В примере из документации движок запускает Llama-3.1-8B-Instruct в квантовании q4f32_1.

Подключается WebLLM как обычный npm- или yarn-пакет, либо прямо через CDN (jsdelivr), что позволяет запускать его без сборки, например, в jsfiddle или Codepen. Тяжёлые вычисления можно вынести в Web Worker, чтобы не блокировать интерфейс страницы, либо в Service Worker, чтобы модель не перезагружалась при каждом визите и работала в фоне, на этом построена, в частности, поддержка расширений Chrome.

Для хранения весов моделей на устройстве реализовано четыре варианта кэша: браузерный Cache API (по умолчанию), IndexedDB, файловая система Origin Private File System (OPFS) и экспериментальный бэкенд Cross-Origin Storage API, для которого нужно отдельное расширение браузера Chrome.

Ключевые факты

  • WebLLM запускает языковые модели целиком в браузере через WebGPU, без обращения к серверу
  • Полная совместимость с API OpenAI: стриминг, JSON-режим, управление логитами; function-calling ещё в разработке
  • Из коробки поддерживает Llama 3, Phi 3, Gemma, Mistral и Qwen2 (0,5B/1,5B/7B), плюс кастомные модели в формате MLC
  • Четыре варианта кэширования модели на устройстве: Cache API, IndexedDB, OPFS и экспериментальный Cross-Origin Storage
  • Устанавливается как npm-пакет или через CDN, поддерживает Web Worker, Service Worker и расширения Chrome

Почему это важно

Инференс без сервера снимает с разработчика инфраструктурные расходы и убирает точку сбора пользовательских данных, модель и диалог остаются на устройстве пользователя. А совместимость с API OpenAI означает, что переход на локальную открытую модель почти не требует переписывать код приложения.

Кому это важно

Веб-разработчикам, которые хотят встроить ИИ-ассистента или чат-бота в сайт или расширение браузера без бэкенда и без серверных счетов за инференс; проектам, где важна приватность данных пользователя; экосистеме MLC LLM, для которой WebLLM, браузерная часть более широкой платформы деплоя моделей.

Как это применить

Пакет ставится через npm, yarn/pnpm или подключается прямо по CDN-ссылке без сборки. Движок создаётся функцией CreateMLCEngine с указанием модели (например, Llama-3.1-8B-Instruct-q4f32_1-MLC), после чего к нему обращаются через привычный интерфейс engine.chat.completions.create, с параметрами и стримингом, как в OpenAI API. Тяжёлые вычисления можно вынести в Web Worker или Service Worker, а бэкенд кэша выбрать под задачу через AppConfig.cacheBackend.

Можно ли доверять

Источник, официальная документация проекта в его репозитории на GitHub, дающая developer-facing описание возможностей и кода; сведения о том, что WebLLM делает и как устроен API, проверены по самому README. При этом документация не приводит ни одной цифры по скорости или производительности инференса, не называет версию или дату релиза и не раскрывает, кто именно стоит за проектом, кроме связи с MLC LLM, то есть заявления о качестве и удобстве работы остаются самоописанием проекта, без независимой проверки.

Риски и подводные камни

Function-calling заявлен, но пока не реализован (WIP). Service Worker управляется браузером и может быть перезапущен в любой момент без нового события activate, документация отдельно предупреждает: обработчик нужно создавать на верхнем уровне скрипта воркера при первом выполнении, а не внутри слушателя activate или message, иначе после перезапуска воркера движок перестанет отвечать. Бэкенд кэша OPFS требует поддержки OPFS в окружении и без неё падает с ошибкой; бэкенд Cross-Origin Storage требует установки отдельного расширения Chrome, а программного удаления данных из этого кэша нет, очистка возможна только через само расширение. Данных о цене, лицензии и сравнении с другими движками инференса в источнике нет.