ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели
машинного обучения в браузере на JavaScript. Библиотека поддерживает как
WebAssembly (WASM), так и WebGL для ускорения вычислений на клиентской
стороне. Основной объект для работы — ort.InferenceSession,
который позволяет загружать модель, выполнять инференс и получать
результаты.
Пример базовой загрузки модели и выполнения инференса:
const session = await ort.InferenceSession.create('model.onnx');
const feeds = {
input: new ort.Tensor('float32', inputData, [1, 3, 224, 224])
};
const results = await session.run(feeds);
const output = results.output.data;
Здесь важно понимать, что размер модели напрямую влияет на время загрузки и использование памяти в браузере. Чем больше модель, тем дольше клиент ждет загрузки, а инференс требует больше оперативной памяти.
Размер бандла в контексте ONNX Runtime Web включает модель ONNX, скрипты JavaScript, и WASM или WebGL backend. Основные подходы к измерению:
Размер файла модели ONNX Простейший способ —
посмотреть размер файла .onnx на диске. Он обычно
коррелирует с временем загрузки в браузер. Для точного измерения в
рантайме можно использовать fetch и свойство
response.headers.get('content-length'):
const response = await fetch('model.onnx');
const size = response.headers.get('content-length');
console.log(`Размер модели: ${size} байт`);Размер загружаемых скриптов ORT Web Включает
основной скрипт ort.min.js и WASM модули
(ort-wasm.wasm, ort-wasm-simd.wasm). Их размер
можно оценить через инструменты сборки (Webpack, Vite) или DevTools
браузера.
Динамическая оценка памяти Использование
performance.memory в Chrome позволяет понять, сколько
памяти занимает модель и данные инференса во время работы.
console.log(performance.memory.usedJSHeapSize);1. Оптимизация модели ONNX
onnx-simplifier.float32
в int8 или float16 снижает размер модели до
4–8 раз без существенной потери качества.2. Использование ленивой загрузки WASM ORT Web
позволяет загружать разные backend модули по мере необходимости. Если в
проекте не используется SIMD, можно отказаться от
ort-wasm-simd.wasm, оставив только базовый WASM.
3. Минификация и tree-shaking JavaScript Сборка скриптов через Webpack, Rollup или Vite с включённой опцией tree-shaking убирает неиспользуемый код ORT Web, снижая общий размер бандла.
4. Компрессия и кэширование
5. Выбор backend по ситуации
.onnx модели. Если
модель >50 МБ, стоит рассмотреть квантизацию.Эти подходы позволяют держать бандл лёгким, ускоряют загрузку и сокращают использование оперативной памяти в браузере, что критично для приложений на ONNX Runtime Web с большими моделями.