ONNX Runtime Web (ORT Web) предоставляет возможность запуска моделей ONNX прямо в браузере, используя WebAssembly (WASM) или WebGPU. Для обеспечения корректной работы библиотека требует доступ к нескольким ассетам: файлам WASM, WebGPU шейдерам, а также дополнительным бинарным файлам, необходимым для выполнения конкретных моделей. При кастомной сборке ORT Web возникает необходимость точной настройки путей к этим ассетам, чтобы избежать ошибок загрузки и несовместимости.
В стандартной сборке ONNX Runtime Web ассеты располагаются в определённых каталогах:
ort-wasm.wasm — основной бинарный файл
WebAssembly.ort-wasm-threaded.wasm — версия с поддержкой
многопоточности (если используется).ort-webgpu.wasm и шейдеры WebGPU — файлы, необходимые
для запуска на GPU через WebGPU.Библиотека по умолчанию ищет эти файлы относительно пути подключения
ort.min.js или ort-core.js.
Для кастомных сборок требуется явно указывать пути к ассетам через
объект конфигурации OrtEnv или через методы инициализации
сессии. Основной способ настройки выглядит следующим образом:
import * as ort from "onnxruntime-web";
const sessionConfig = {
executionProviders: ['wasm'], // или 'webgl', 'webgpu'
graphOptimizationLevel: 'all',
// ключевой параметр: location ассетов
wasmPaths: {
'ort-wasm.wasm': '/custom_assets/wasm/ort-wasm.wasm',
'ort-wasm-threaded.wasm': '/custom_assets/wasm/ort-wasm-threaded.wasm'
},
webgpuShaderPath: '/custom_assets/webgpu/'
};
const session = await ort.InferenceSession.create('model.onnx', sessionConfig);
Ключевые моменты:
wasmPaths позволяет задать отдельные URL для каждого
файла WASM.webgpuShaderPath указывает директорию, где находятся
шейдеры для WebGPU./assets/ort/) или
относительным к корню веб-сервера.Разделение ассетов по CDN или локальному серверу
При использовании CDN или отдельного сервера необходимо убедиться, что
все ассеты доступны по указанным URL и имеют корректные MIME-типы
(application/wasm для WASM,
application/javascript для JS-файлов).
Совместимость с многопоточностью Если включена
поддержка WebAssembly Threads, путь к
ort-wasm-threaded.wasm должен быть доступен независимо от
обычного WASM-файла.
Работа с пакетными сборками (Webpack, Vite,
Rollup) Для интеграции в сборщик необходимо настроить
копирование бинарных ассетов в публичную директорию проекта и
использовать динамический импорт или настройку
publicPath.
// пример для Webpack
module.exports = {
output: {
publicPath: '/static/',
},
module: {
rules: [
{
test: /\.wasm$/,
type: 'asset/resource',
generator: {
filename: 'wasm/[name][ext]'
}
}
]
}
};
Для оптимизации загрузки можно подгружать WASM и шейдеры динамически, только при необходимости выбранного движка:
async function loadOrt(sessionOptions) {
if (sessionOptions.executionProviders.includes('wasm')) {
await ort.env.wasm.setWasmPaths(sessionOptions.wasmPaths);
}
if (sessionOptions.executionProviders.includes('webgpu')) {
await ort.env.webgpu.setShaderPath(sessionOptions.webgpuShaderPath);
}
return ort.InferenceSession.create('model.onnx', sessionOptions);
}
Такой подход позволяет управлять ресурсами и уменьшать время первоначальной загрузки страницы.
Ошибки загрузки ассетов обычно проявляются как:
Failed to fetch resource при обращении к
WASM-файлам.WebGPU shader not found при отсутствии шейдеров.ORT_RUNTIME_ERROR.Для диагностики можно использовать console.log путей и
проверку доступности файлов через fetch перед
инициализацией:
async function verifyAssets(paths) {
for (const key in paths) {
const response = await fetch(paths[key]);
if (!response.ok) {
console.error(`Asset ${key} not found at ${paths[key]}`);
}
}
}
wasm/, webgpu/,
workers/.ort-wasm-v1.14.1.wasm) для контроля кэширования.file:// и HTTP(S).Эффективная настройка путей к ассетам при кастомных сборках ONNX Runtime Web обеспечивает стабильное выполнение моделей, сокращает время загрузки и минимизирует ошибки инициализации. Правильная организация структуры и явная конфигурация путей критичны для проектов с динамической загрузкой и различными движками исполнения.