Профилирование времени инференса: Performance API, ORT profiling

ONNX Runtime Web (ORT Web) предоставляет высокопроизводительную среду для запуска моделей машинного обучения в браузере с использованием JavaScript. Одним из ключевых аспектов оптимизации приложений является измерение и анализ времени инференса. ORT Web включает механизмы для точного профилирования, позволяя выявлять узкие места в вычислительных графах и оценивать эффективность выбранных устройств и бэкендов.


Performance API

Performance API является стандартной веб-технологией, интегрированной в современные браузеры, позволяющей измерять время выполнения кода с высокой точностью. В контексте ONNX Runtime Web используется для оценки времени инференса модели на конкретных данных.

Основные возможности Performance API в инференсе:

  • performance.now() — возвращает время в миллисекундах с высокой точностью (до тысячных долей миллисекунды), что позволяет измерять отдельные этапы инференса.
  • Измерение сценариев подготовки данных, передачи тензоров в сессию ORT и получения результатов.
  • Возможность составления микро-бенчмарков для отдельных узлов модели, если измерять время до и после вызова конкретных операций.

Пример замера времени инференса:

const startTime = performance.now();
const output = await session.run(feeds);
const endTime = performance.now();
console.log(`Время инференса: ${endTime - startTime} мс`);

Рекомендации по использованию:

  • Для получения статистически значимых результатов рекомендуется повторять инференс несколько раз и усреднять показатели.
  • Необходимо учитывать влияние JIT-компиляции и первой инициализации WebGL / WASM на время первого запуска модели.

ORT Profiling

ORT Web включает встроенный механизм профилирования ORT Profiling, который позволяет получать детализированную информацию о выполнении модели на уровне операций и узлов графа.

Включение профилирования:

const session = await ort.InferenceSession.create(modelUrl, {
  executionProviders: ['wasm'],
  enableProfiling: true
});

Ключевые функции ORT Profiling:

  • Детальная разбивка по узлам графа — время выполнения каждой операции модели.
  • Встроенная агрегация — суммарное время инференса, распределение по типам операций (Conv, MatMul, Relu и др.).
  • Экспорт профиля — генерация JSON с полным логом времени выполнения, пригодного для анализа и визуализации.

Пример получения профиля после инференса:

const output = await session.run(feeds);
const profile = session.endProfiling();
console.log(profile); // JSON с временными метками для каждой операции

Использование данных профиля:

  • Определение узких мест в модели, например, долгих операций свертки или матричных умножений.
  • Сравнение эффективности разных Execution Providers (WASM, WebGL, WebGPU).
  • Оптимизация модели: выбор методов квантования, замена операций, перестройка графа.

Сравнение Performance API и ORT Profiling

Возможность Performance API ORT Profiling
Гранулярность Общий блок кода, сцена инференса Отдельные узлы и операции графа
Точность Высокая, ограничена временем JS Высокая, детализированная по узлам
Формат Числовое значение в мс JSON с полными временными метками
Цель Быстрый замер времени для сценариев Глубокий анализ производительности модели

Оптимальная практика: использовать Performance API для общей оценки и ORT Profiling для детального анализа, особенно при оптимизации крупных моделей или сложных графов.


Практические советы

  • Перед профилированием необходимо убедиться, что модель загружена полностью и все необходимые данные подготовлены.
  • Профилирование на WebGPU и WebGL может показывать различное распределение времени на узлы графа, поэтому анализ следует проводить отдельно для каждого Execution Provider.
  • Многократное измерение важно для сглаживания влияния фоновых процессов браузера и варьирующихся нагрузок на GPU.
  • JSON-профили можно визуализировать с помощью сторонних инструментов, например, Chrome DevTools Performance, что облегчает анализ сложных моделей.

Использование Performance API совместно с ORT Profiling позволяет получить всестороннее понимание времени инференса, выявить узкие места и принимать обоснованные решения по оптимизации моделей ONNX для веб-приложений.