ONNX Runtime Web (ORT Web) представляет собой JavaScript-библиотеку, предназначенную для выполнения моделей в формате ONNX непосредственно в браузере или в Node.js. Основное преимущество использования ORT Web заключается в возможности инференса на стороне клиента, что позволяет сократить задержки при обработке данных и повысить конфиденциальность информации, так как данные не покидают устройство пользователя.
ORT Web поддерживает работу с различными движками выполнения, включая WebAssembly (WASM) и WebGPU, что обеспечивает гибкость и производительность в зависимости от возможностей устройства.
В браузере библиотека подключается через CDN или npm-пакет:
import * as ort from 'onnxruntime-web';
Для Node.js используется:
npm install onnxruntime-web
const ort = require('onnxruntime-web');
Модели ONNX могут быть загружены из локальных файлов или через URL. Для оптимальной работы рекомендуется использовать предварительно скомпилированные модели с поддержкой WebAssembly или WebGPU.
const session = await ort.InferenceSession.create('./model.onnx', {
executionProviders: ['wasm'] // или 'webgpu'
});
ORT Web использует объекты Tensor для представления
данных, аналогично библиотекам типа NumPy в Python. Основные
параметры:
data — массив чисел, представляющий входные
данные.dims — массив размерностей тензора.type — тип данных (float32,
int32, string и др.).Пример создания тензора:
const inputTensor = new ort.Tensor('float32', new Float32Array([1.0, 2.0, 3.0, 4.0]), [2, 2]);
После создания сессии и подготовки тензоров выполняется вызов метода
run. Метод возвращает объект с результатами, где ключи
соответствуют именам выходов модели.
const feeds = { input: inputTensor };
const results = await session.run(feeds);
console.log(results.output.data);
WebGPU позволяет выполнять инференс на GPU устройства, что
существенно увеличивает скорость обработки больших моделей. Для
использования достаточно указать 'webgpu' в
executionProviders:
const session = await ort.InferenceSession.create('./model.onnx', {
executionProviders: ['webgpu']
});
Преимущество WebGPU особенно заметно при обработке изображений, видео или больших массивов чисел.
TypedArray предотвращает лишние операции.Все методы ORT Web, включая InferenceSession.create и
run, являются асинхронными, что позволяет интегрировать
инференс в клиентские приложения без блокировки интерфейса:
async function predict(inputData) {
const session = await ort.InferenceSession.create('./model.onnx');
const tensor = new ort.Tensor('float32', inputData, [inputData.length]);
const results = await session.run({ input: tensor });
return results.output.data;
}
Асинхронная архитектура особенно полезна при работе с веб-приложениями, где отзывчивость интерфейса критична.
Выполнение инференса на стороне клиента исключает необходимость передачи чувствительных данных на сервер. Это обеспечивает:
ORT Web поддерживает модели из разных областей:
Каждый тип модели требует соответствующей подготовки данных: нормализация изображений, токенизация текста, создание батчей.
Для анализа работы модели ORT Web предоставляет возможности логирования:
ort.env.logLevel = 'verbose';
Это позволяет отслеживать этапы выполнения инференса и выявлять узкие места в производительности.
ORT Web легко интегрируется с React, Vue, Angular и другими библиотеками. Тензоры могут быть подготовлены на основе данных, полученных из формы или камеры, а результаты инференса сразу отображаться в интерфейсе.
Пошаговое освоение ORT Web, правильная подготовка входных данных и использование подходящего движка выполнения позволяют создавать высокопроизводительные и безопасные клиентские приложения с машинным обучением, минимизируя риски утечки данных и повышая интерактивность интерфейсов.