ONNX Runtime Web (ORT Web) — это высокопроизводительная библиотека для запуска моделей в формате ONNX непосредственно в браузере. Она обеспечивает совместимость с современными стандартами веб-платформ, поддерживает различные бэкенды для вычислений и оптимизирована для работы с графическим процессором и ускорением через WebAssembly или WebGPU.
ORT Web позволяет использовать модели машинного обучения без необходимости серверного окружения. Это делает возможным выполнение сложных нейросетевых вычислений на стороне клиента, снижая задержки и обеспечивая приватность данных.
ORT Web поддерживает несколько бэкендов:
WebAssembly (WASM) Универсальный бэкенд, работающий во всех современных браузерах. Поддерживает многопоточность через Web Workers и SIMD-инструкции для ускорения матричных операций. WASM-бэкенд является наиболее стабильным и совместимым, но уступает по производительности WebGPU.
WebGPU Новый стандарт для графических и вычислительных задач в браузере. Использует нативное ускорение через видеокарту, позволяя достичь производительности, близкой к нативным библиотекам. WebGPU особенно эффективен для больших свёрточных и трансформерных моделей. Использование WebGPU требует браузеров с поддержкой стандарта и наличия подходящего GPU.
WebNN (Web Neural Network API) Разрабатывается как стандарт для нативного ускорения нейросетевых операций в браузере. WebNN предоставляет прямой доступ к возможностям GPU и специализированным нейросетевым ускорителям. ORT Web использует WebNN для максимизации производительности на устройствах с поддержкой API.
Для загрузки и использования модели необходимо подключить библиотеку и создать сессию выполнения:
import * as ort from 'onnxruntime-web';
async function runModel(modelUrl, inputData) {
const session = await ort.InferenceSession.create(modelUrl, {
executionProviders: ['webnn', 'webgpu', 'wasm']
});
const feeds = {};
for (const name in inputData) {
feeds[name] = new ort.Tensor('float32', inputData[name].data, inputData[name].dims);
}
const results = await session.run(feeds);
return results;
}
Ключевые моменты:
executionProviders определяет порядок
приоритетов бэкендов. Если WebNN доступен, он будет использоваться
первым.ort.Tensor создаёт тензоры нужного типа и формы. Тип
данных должен соответствовать модели.session.run возвращает объект с выходными тензорами,
доступными по именам выходов модели.WebNN API обеспечивает низкоуровневый доступ к вычислительным ресурсам устройства. Основные преимущества:
Поддерживаемые операции включают:
WebNN позволяет выполнять операции с высокой пропускной способностью, особенно на больших моделях, таких как трансформеры для NLP или глубокие CNN для компьютерного зрения.
WebNN разрабатывается в рамках W3C как открытый стандарт. На текущий момент API поддерживается экспериментально в последних версиях Chrome и Edge. Основные этапы развития:
WebNN является ключевым компонентом для браузерного ML, позволяя интегрировать нативное ускорение без установки дополнительных библиотек.
Для максимальной производительности на WebNN необходимо учитывать следующие рекомендации:
Пример обработки изображения:
async function preprocessAndRun(imageElement, modelUrl) {
const input = preprocessImage(imageElement); // преобразование в Float32Array
const result = await runModel(modelUrl, { input });
return postprocessResult(result.output);
}
Методы preprocessImage и postprocessResult
включают нормализацию, изменение формы тензоров и декодирование
результатов.
ORT Web с WebNN обеспечивает выполнение сложных моделей в реальном времени, что открывает возможности для интерактивных приложений, компьютерного зрения и обработки речи прямо в браузере.