Суть обновления: от JS-ядер к WebAssembly
Google выпустил LiteRT.js (версия 2.5.2), который является JavaScript-биндингом для библиотеки инференса на устройстве LiteRT (ранее TensorFlow Lite). В отличие от TensorFlow.js, использующего ядра на JavaScript, LiteRT.js компилирует нативный кроссплатформенный рантайм в WebAssembly. Это позволяет веб-приложениям наследовать оптимизации, квантование и аппаратные улучшения, ранее доступные только для Android, iOS и десктопа.
Ключевые преимущества подхода: выполнение инференса локально (enhanced privacy), отсутствие серверных затрат и сверхнизкая задержка. Модель формата .tflite загружается и выполняется непосредственно в браузере.
Архитектура и три бэкенда
LiteRT.js поддерживает три пути выполнения, но с важным ограничением: частичная делегация запрещена. Граф вычислений не может быть разделен между CPU и GPU. Если модель не может быть полностью делегирована выбранному акселератору, происходит фоллбэк на выполнение через wasm (CPU).
- CPU: Использует оптимизированную библиотеку XNNPACK с поддержкой многопоточности и релаксированным SIMD.
- GPU: Работает через WebGPU с использованием решения ML Drift.
- NPU: Поддержка через экспериментальный API WebNN (доступен в Chrome и Edge). Требует включения флага
jspi: trueдля моста между синхронным планированием ядер и асинхронным опросом устройства.
Производительность: цифры и бенчмарки
Тестирование проводилось в контролируемой среде браузера на MacBook Pro 2024 с чипом Apple M4. Результаты демонстрируют значительный прирост скорости по сравнению с альтернативами:
| Сравнение | Результат | Примечание |
|---|---|---|
| LiteRT.js vs другие веб-рантаймы | До 3x быстрее | На CPU и GPU для CV и аудио моделей |
| GPU/NPU vs собственный CPU (LiteRT.js) | Ускорение в 5–60x | Для ресурсоемких задач: трекинг объектов, транскрипция |
| WebNN (NPU) | Экспериментально | Требует JSPI и поддержки браузера |
Обратите внимание: цифра «10x», циркулирующая в некоторых источниках, не подтверждена официальным анонсом Google.
Управление памятью и интеграция
Важнейшая особенность LiteRT.js — ручное управление памятью. Библиотека не использует сборщик мусора для тензоров. Каждое создание объекта Tensor требует явного вызова метода .delete(). Пропуск этого шага приводит к утечке памяти устройства (device memory leak). В коде это выглядит так:
input.delete();
for (const t of results) t.delete();
cpuTensor.delete();
Для конвертации моделей из PyTorch используется LiteRT Torch (ai-edge-torch). Модель должна быть экспортируема через torch.export.export (TorchDynamo), без динамических размеров входных данных и условных ветвлений, зависящих от значений тензоров во время выполнения.
LiteRT.js против TensorFlow.js
Google позиционирует LiteRT.js не как полную замену, а как замену для Graph Models в TensorFlow.js. TF.js остается рекомендуемым инструментом для пред- и постобработки данных. Для взаимодействия между библиотеками существует пакет @litertjs/tfjs-interop, позволяющий передавать тензоры через runWithTfjsTensors. Использование tensor.dataSync на бэкенде WebGPU не рекомендуется из-за высоких накладных расходов.
Примеры использования
При запуске Google представил четыре демо-сценария:
- Детекция объектов в реальном времени: Ultralytics YOLO26.
- Глубина с веб-камеры: Depth-Anything-V2 для создания 3D-облака точек.
- Апскейлинг изображений: Real-ESRGAN (локальная обработка без загрузки).
- Семантический поиск: EmbeddingGemma для векторного поиска прямо в странице.
Источник: MarkTechPost ↗
