Метод run() является центральным инструментом для
выполнения инференса моделей в ONNX Runtime Web. Он обеспечивает запуск
предобученных моделей на входных данных с поддержкой как синхронного,
так и асинхронного подхода, позволяя работать с различными типами
данных: тензорами, изображениями и массивами чисел.
Базовый вызов метода имеет вид:
const results = await session.run(feeds, options);
session — объект сессии ONNX Runtime
Web (InferenceSession), который хранит загруженную
модель.feeds — объект, где ключи
соответствуют именам входных узлов модели, а значения — данные, которые
нужно подать на вход модели. Значения могут быть
TypedArray, Tensor, ImageData или
обычные массивы.options — объект с дополнительными
настройками выполнения инференса.Метод возвращает объект, где ключи — имена выходных узлов модели, а
значения — объекты типа Tensor, содержащие результат
инференса.
Объект feeds должен соответствовать структуре входных
узлов модели. Например:
const feeds = {
input1: new ort.Tensor('float32', inputData, [1, 3, 224, 224]),
input2: new Float32Array([0.1, 0.2, 0.3])
};
Tensor — тип данных
(float32, int32, bool и
т.д.).При несоответствии формы или типа данных модель выбросит ошибку, поэтому важно точно соответствовать спецификации модели.
run() поддерживает объект options с
несколькими ключевыми параметрами:
executionProviders — массив
провайдеров вычислений, которые будут использоваться для инференса.
Например:options: {
executionProviders: ['wasm', 'webgl']
}
'wasm' — WebAssembly, обеспечивает кроссплатформенный
запуск.'webgl' — использование GPU через WebGL, повышает
производительность для больших моделей.'webgpu' — экспериментальный вариант для современных
браузеров с поддержкой WebGPU.logSeverityLevel — уровень
логирования, принимает числовые значения от 0 (ошибки) до 4 (отладочная
информация).
disableMemPattern и
enableCpuMemArena — управление внутренними
оптимизациями памяти. Полезны при работе с ограниченной памятью на
устройстве.
run() является асинхронным методом. Это критически важно
для браузерного контекста, чтобы не блокировать основной поток. Для
оптимизации производительности следует учитывать:
webgl или webgpu при работе
с большими моделями.TypedArray.Tensor внутри циклов
инференса.Пример асинхронного вызова:
async function infer(session, inputData) {
const feeds = { input: new ort.Tensor('float32', inputData, [1, 3, 224, 224]) };
const results = await session.run(feeds, { executionProviders: ['webgl'] });
return results.output;
}
Модели могут иметь несколько выходных узлов. run()
возвращает объект с именами всех выходов:
const results = await session.run(feeds);
const output1 = results.output1;
const output2 = results.output2;
Каждое значение — объект Tensor, с методами
.data (доступ к массиву чисел) и .dims (форма
тензора). Это позволяет обрабатывать сложные модели с несколькими
параллельными потоками данных.
Чаще всего ошибки при вызове run() связаны с:
Рекомендуется оборачивать вызов run() в блок
try/catch:
try {
const results = await session.run(feeds);
} catch (err) {
console.error('Ошибка инференса:', err);
}
Это позволяет корректно обрабатывать исключения и не блокировать выполнение других скриптов.
run() при обработке потоков данных.Метод run() в ONNX Runtime Web обеспечивает гибкий и
высокопроизводительный запуск моделей в браузере. Глубокое понимание
параметров и структуры входных данных позволяет эффективно интегрировать
предобученные нейросети в веб-приложения и обеспечивать стабильный и
быстрый инференс.