ONNX Runtime Web (ORT Web) представляет собой реализацию ONNX Runtime для JavaScript, позволяющую запускать модели машинного обучения непосредственно в браузере. Библиотека поддерживает работу с WebAssembly (WASM) и WebGPU, что обеспечивает гибкость и высокую производительность в различных средах. Важными аспектами работы с ORT Web являются управление памятью, мониторинг производительности и отладка через консольный вывод.
В основе ONNX Runtime Web лежат тензоры, которые представляют собой многомерные массивы данных. Каждый тензор создаётся с указанием типа данных и формы:
const tensor = new ort.Tensor('float32', new Float32Array([1, 2, 3, 4]), [2, 2]);
Ключевым моментом является необходимость освобождения памяти после использования тензора, особенно при работе с большими моделями или потоковыми данными:
tensor.data = null; // Очистка данных тензора
ORT Web использует автоматическую сборку мусора, но явное обнуление ссылок и правильное управление сессиями снижает нагрузку на память и предотвращает утечки.
ORT Web предоставляет методы для анализа текущего потребления ресурсов. Для этого можно использовать встроенные профайлеры сессий:
const session = await ort.InferenceSession.create(modelUrl);
console.log(session.memoryInfo);
Параметр memoryInfo содержит информацию о выделенной и
освобождённой памяти, что помогает выявлять узкие места при работе с
большими моделями.
ORT Web поддерживает два основных движка выполнения:
Выбор движка напрямую влияет на производительность и потребление ресурсов. Настройка выполняется при создании сессии:
const session = await ort.InferenceSession.create(modelUrl, { executionProviders: ['webgl'] });
В параметре executionProviders можно указать
wasm, webgl или webgpu. Для
тонкой настройки WebGPU возможно включение асинхронного исполнения, что
позволяет не блокировать основной поток браузера.
ORT Web позволяет собирать детальные метрики времени выполнения:
const start = performance.now();
const output = await session.run({ input: tensor });
const end = performance.now();
console.log(`Inference time: ${end - start} ms`);
Для комплексного анализа производительности можно включить подробный профайлер сессии, который покажет время на загрузку модели, подготовку входов и вычисление выходов.
ORT Web имеет встроенный механизм логирования, позволяющий получать отладочную информацию:
ort.env.logLevel = 'verbose'; // Уровень: verbose, info, warning, error
verbose — вывод всей информации о внутреннем состоянии
движка и обработке данных.info — базовые сведения о загрузке модели и запуске
сессий.warning и error — уведомления об ошибках и
потенциальных проблемах.Использование консольного вывода облегчает отладку и позволяет выявлять узкие места в производительности или управлении памятью.
Хотите, я могу дополнительно сделать подробный пример использования ORT Web для реального ML-модуля в браузере с профилированием и визуализацией памяти? Это будет целостный код, который покажет все практические аспекты.