wllama: инференс языковых моделей в браузере с поддержкой WebAssembly
wllama — это привязка WebAssembly к библиотеке llama.cpp, позволяющая выполнять инференс больших языковых моделей (LLM) прямо в браузере.
Проект решает задачу локального запуска LLM без необходимости в серверной части или мощной графике, что может быть полезно для веб-разработчиков, желающих интегрировать ИИ в свои приложения. wllama поддерживает OpenAI-совместимый API, и предлагает множество возможностей, включая WebGPU, многомодальную поддержку (ввод изображений и аудио) и асинхронное выполнение через worker'ы, что разгружает основной поток приложения. Установка возможна через npm с помощью пакета @wllama/wllama.
Стоит учитывать, что существуют ограничения: максимальный размер модели – 2 ГБ из-за ограничений ArrayBuffer. Для многопоточности необходимо настроить заголовки безопасности, что может усложнить настройку для некоторых пользователей. В остальном проект выглядит многообещающе для дальнейшей работы с LLM в браузерной среде.
Проект wllama представляет собой обертку на WebAssembly для библиотеки llama.cpp. Он позволяет использовать возможности модели llama напрямую в браузере, без необходимости в стороннем сервере или GPU. Основной акцент сделан на совместимости с API OpenAI, поддержке мульти-режимов (ввод изображений и аудио), а также на обращениях к инструментам.
Особенности
- Совместимый API с OpenAI (полностью типизированный)
- Поддержка WebGPU для ускорения вычислений
- Поддержка мульти-режимов (ввод изображений и аудио)
- Наличие поддержки вызовов инструментов
- Возможность выполнять вывод в браузере без сервера, используя WebAssembly SIMD
- Нет зависимостей во время выполнения
- Возможность разбивать модель на более мелкие файлы для параллельной загрузки
- Автоматический выбор между однопоточной и многопоточной сборкой в зависимости от поддержки браузера
- Вычисления происходят в отдельном потоке, что не блокирует отрисовку интерфейса
Как установить и запустить
Чтобы использовать wllama в проекте React с TypeScript, установи библиотеку с помощью команды:
npm i @wllama/wllama
Есть возможность собрать проект из исходников, но для этого требуется установленный Docker:
Инструкция по установке из репозитория
git submodule add https://github.com/ngxson/wllama.git wllama
git submodule update --init --recursive
cd wllama
npm ci
npm run build:wasm && npm run build
После установки импортируй модуль в своем коде:
import { Wllama } from '@wllama/wllama';
let wllamaInstance = new Wllama(WLLAMA_CONFIG_PATHS, ...);
Ограничения
- Для включения многопоточности необходимо добавить заголовки
Cross-Origin-Embedder-PolicyиCross-Origin-Opener-Policy. - Максимальный размер файла составляет 2 ГБ из-за ограничений ArrayBuffer. Если модель больше 2 ГБ, следует разбить ее на части.
Документация и примеры
Для полного понимания возможностей библиотеки и примеров использования, посетите документацию. Есть несколько примеров приложений, включая базовые использования, извлечение эмбеддингов, мульти-режимное завершение и вызовы инструментов.
Компиляция бинарников
Если ты хочешь собрать бинарники самостоятельно, используй следующие команды после клонирования репозитория:
git clone --recurse-submodules https://github.com/ngxson/wllama.git
cd wllama
npm i
npm run build:wasm
npm run build
Для получения дополнительной информации о проекте, обновлениях и возможностей, можно ознакомиться с страницей релизов.
Открыть на GitHub: ngxson/wllama →
RepoRadar