ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели ONNX непосредственно в браузере с использованием JavaScript. Для начала работы достаточно подключить пакет через npm или использовать CDN.
Установка через npm:
npm install onnxruntime-web
Подключение через ES6 модули:
import * as ort from 'onnxruntime-web';
Использование через CDN:
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.min.js"></script>
После подключения доступен объект ort, предоставляющий
все необходимые методы для загрузки и выполнения моделей.
ORT Web поддерживает несколько вычислительных бэкендов: WebAssembly (WASM) и WebGL. Выбор бэкенда влияет на производительность и совместимость.
const session = await ort.InferenceSession.create('model.onnx', {
executionProviders: ['wasm'], // или ['webgl']
});
Особенности бэкендов:
Для оптимизации времени загрузки можно заранее инициализировать WASM-модули:
await ort.env.wasm.init();
ONNX Runtime Web загружает модель в формате ONNX напрямую из URL или локального файла. Формат ONNX-ML поддерживает структуры данных для классических алгоритмов машинного обучения.
const session = await ort.InferenceSession.create('model.onnx');
После создания сессии можно получить информацию о входах и выходах модели:
console.log(session.inputNames); // массив имен входных тензоров
console.log(session.outputNames); // массив имен выходных тензоров
Для моделей ONNX-ML часто используются одномерные массивы чисел (векторные представления признаков), а не многомерные тензоры изображений.
Входные данные должны соответствовать типам, определённым в модели.
ONNX-ML чаще всего использует тип float32 или
int64 для признаков. ORT Web работает с объектом вида:
const input = {
input_name: new Float32Array([5.1, 3.5, 1.4, 0.2])
};
Где input_name — имя входного тензора, полученное через
session.inputNames.
Для категориальных признаков необходимо преобразовать данные в числовой формат заранее, поскольку ONNX Runtime не выполняет автоматическое кодирование категорий.
Инференс выполняется методом run(), который принимает
объект с входными данными и возвращает объект с результатами.
const output = await session.run(input);
console.log(output.output_name.data); // результат модели
Особенности работы с ONNX-ML:
output содержит все
выходные тензоры по именам.Для работы с крупными моделями рекомендуется:
session.run() с разными входными данными быстрее, чем
создание новой сессии.Float32Array или
Int32Array перед вызовом run() уменьшает
накладные расходы.Модели ONNX-ML могут иметь несколько признаков на входе и несколько выходов. В таком случае входные данные формируются как объект с несколькими ключами:
const input = {
feature1: new Float32Array([1.0]),
feature2: new Float32Array([0.0])
};
Результаты также возвращаются в виде объекта с именованными массивами:
const output = await session.run(input);
console.log(output.label.data);
console.log(output.probabilities.data);
ORT Web интегрируется с фронтенд-фреймворками (React, Vue, Angular) без необходимости установки серверной инфраструктуры. Это позволяет выполнять инференс непосредственно в браузере, защищая данные пользователей и снижая задержку.
Пример интеграции с React:
import { useEffect, useState } from 'react';
import * as ort from 'onnxruntime-web';
export default function Predict({ features }) {
const [prediction, setPrediction] = useState(null);
useEffect(() => {
async function runModel() {
const session = await ort.InferenceSession.create('/model.onnx');
const input = { input: new Float32Array(features) };
const output = await session.run(input);
setPrediction(output.output.data[0]);
}
runModel();
}, [features]);
return <div>Prediction: {prediction}</div>;
}
В этом примере модель загружается один раз, а затем повторно используется для новых данных, что повышает производительность приложения.
Для диагностики ошибок загрузки и выполнения модели ORT Web предоставляет методы логирования:
ort.env.loggingLevel = 'verbose';
Ошибки могут возникать из-за:
Эффективное использование ONNX Runtime Web требует:
Такой подход позволяет создавать высокопроизводительные веб-приложения, использующие модели ONNX-ML без серверной нагрузки.