ONNX Runtime Web (ORT Web) предоставляет возможность выполнять модели машинного обучения прямо в браузере с использованием JavaScript. Для интеграции ORT Web в современные фронтенд-приложения часто применяется сборщик модулей Webpack. Настройка Webpack требует внимания к особенностям работы с WebAssembly (WASM), ESM и различными типами активов.
Для начала необходимо установить саму библиотеку и, при необходимости, вспомогательные пакеты:
npm install onnxruntime-web
npm install webpack webpack-cli webpack-dev-server --save-dev
npm install babel-loader @babel/core @babel/preset-env --save-dev
onnxruntime-web предоставляет несколько бандлов:
стандартный JavaScript-бандл, WebAssembly и WebGL. Выбор конкретного
бандла определяется производительностью и совместимостью с
устройствами.
Файл конфигурации webpack.config.js должен учитывать
следующие аспекты:
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: __dirname + '/dist',
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
},
],
},
resolve: {
extensions: ['.js'],
},
};
async при импорте:import * as ort from 'onnxruntime-web';
async function loadModel() {
const session = await ort.InferenceSession.create('./model.onnx');
return session;
}
В конфигурации Webpack можно явно указать обработку WASM:
experiments: {
asyncWebAssembly: true,
},
.onnx
не являются стандартными модулями JavaScript. Для их использования можно
настроить загрузку через file-loader:module: {
rules: [
{
test: /\.onnx$/,
type: 'asset/resource',
},
],
},
После этого файлы моделей будут копироваться в dist, и к
ним можно будет обращаться через URL:
const modelUrl = new URL('./model.onnx', import.meta.url).href;
const session = await ort.InferenceSession.create(modelUrl);
const session = await ort.InferenceSession.create(modelUrl, {
executionProviders: ['webgl'],
});
Если WebGL недоступен, ORT Web автоматически переключается на WASM.
Минификация и tree shaking При сборке для
продакшена рекомендуется включать mode: 'production'. ORT
Web поддерживает ESM, что позволяет Webpack удалять неиспользуемый
код.
Динамический импорт моделей Для уменьшения размера основного бандла модели можно загружать динамически:
async function loadDynamicModel(path) {
const { default: ort } = await import('onnxruntime-web');
return ort.InferenceSession.create(path);
}
URL с import.meta.url.require не поддерживается.ORT Web хорошо сочетается с библиотеками визуализации и управления
состоянием, такими как React или Vue, при этом загрузка модели и
выполнение инференса должны выполняться в асинхронных эффектах
(например, useEffect в React) для предотвращения блокировки
основного потока.
Этот подход позволяет создавать высокопроизводительные веб-приложения для инференса моделей ONNX, эффективно используя возможности браузера и минимизируя время загрузки и вычислений.