ONNX Runtime Web предоставляет возможность запускать модели машинного
обучения прямо в браузере или в Node.js, используя WebAssembly (WASM)
или WebGPU. Для корректной работы требуется настройка глобального
окружения env, где указываются пути к WASM-файлам, флаги
оптимизации и другие параметры, влияющие на производительность и
совместимость.
Глобальное окружение создаётся при загрузке модуля ONNX Runtime Web и
управляется объектом ort.env. Он предоставляет методы и
свойства для настройки движка выполнения моделей до создания сессий.
Основные цели настройки:
Пример базовой инициализации:
import * as ort from 'onnxruntime-web';
await ort.env.wasm.setWasmPaths({
'ort-wasm.wasm': '/path/to/ort-wasm.wasm',
'ort-wasm-simd.wasm': '/path/to/ort-wasm-simd.wasm',
'ort-wasm-threaded.wasm': '/path/to/ort-wasm-threaded.wasm'
});
Здесь setWasmPaths позволяет указать разные версии
WASM-модуля:
ort-wasm.wasm — базовая версия без SIMD и
многопоточности.ort-wasm-simd.wasm — с SIMD-инструкциями для
ускорения.ort-wasm-threaded.wasm — с поддержкой многопоточности
через Web Workers.ONNX Runtime Web поддерживает несколько глобальных флагов, которые управляют поведением движка:
NUM_THREADS — количество потоков для многопоточного
WASM. По умолчанию используется один поток. Увеличение значения может
повысить производительность на многоядерных системах, но требует
поддержки SharedArrayBuffer.await ort.env.wasm.setEnvironmentVariable('NUM_THREADS', '4');
WASM_SIMD — включение SIMD-инструкций. Позволяет
ускорить вычисления на процессорах с поддержкой SIMD. Значение
true или false.await ort.env.wasm.setEnvironmentVariable('WASM_SIMD', 'true');
WASM_THREADING — включение многопоточности. Требует
разрешений для SharedArrayBuffer в браузере.await ort.env.wasm.setEnvironmentVariable('WASM_THREADING', 'true');
Эти флаги должны быть установлены до создания любой сессии модели, иначе их изменение не повлияет на уже загруженные модели.
ONNX Runtime Web предоставляет несколько стратегий загрузки WASM-модулей:
setWasmPaths. Используется, когда файлы уже размещены
на сервере.await ort.env.wasm.setWasmPaths({ base: '/assets/onnxruntime/' });
Динамический режим полезен для кроссбраузерной совместимости, так как позволяет автоматически выбирать подходящую версию модуля.
Для отладки моделей и анализа производительности можно включить логирование через глобальные флаги:
LOG_LEVEL — уровень логирования (verbose,
info, warning, error).ENABLE_CPU_MEM_ARENA — включение управления памятью на
CPU, что позволяет отслеживать утечки.await ort.env.wasm.setEnvironmentVariable('LOG_LEVEL', 'verbose');
await ort.env.wasm.setEnvironmentVariable('ENABLE_CPU_MEM_ARENA', 'true');
Логирование выводится в консоль браузера или Node.js, что позволяет контролировать процесс и выявлять узкие места при запуске моделей.
В Node.js глобальные настройки отличаются:
ort.env.wasm.setWasmPaths({
'ort-wasm.node.wasm': './node_modules/onnxruntime-web/wasm/ort-wasm.node.wasm'
});
Флаги NUM_THREADS и WASM_THREADING работают
аналогично браузерной версии, но нужно убедиться, что Node.js
поддерживает выбранный режим.
WASM_SIMD и WASM_THREADING для максимальной
производительности.LOG_LEVEL, чтобы
выявлять ошибки загрузки и выполнения модели.Настройка env является критически важной для оптимальной
работы ONNX Runtime Web, так как от неё зависит скорость выполнения
моделей, совместимость с устройствами и возможность масштабирования
вычислений на многопоточных системах.