ONNX Runtime Web (ORT Web) предоставляет высокопроизводительное выполнение моделей ONNX в браузере и на Node.js, обеспечивая кроссплатформенную совместимость и гибкость. При работе с ORT Web важно понимать концепции холодного и горячего старта, которые напрямую влияют на скорость и эффективность выполнения моделей.
Холодный старт — это процесс первой загрузки модели и создания сессии в ORT Web. Этот этап включает несколько ключевых шагов:
Загрузка модели Модель ONNX загружается из локального файла, URL или ArrayBuffer. Важно учитывать размер модели, так как при больших весах загрузка может занимать заметное время.
import * as ort from 'onnxruntime-web';
const session = await ort.InferenceSession.create('model.onnx');Компиляция графа После загрузки происходит разбор графа модели, подготовка операторов и оптимизация выполнения. На этом этапе создаются внутренние структуры данных для ускорения последующих вызовов.
Выделение памяти под входные и выходные тензоры Для каждого входа и выхода модели ORT Web резервирует буферы памяти. На холодном старте это создается впервые, что влияет на задержку первого инференса.
Ключевой момент: первый вызов модели после создания сессии обычно медленнее последующих из-за необходимости выполнения всех этих операций.
Горячий старт — выполнение модели после инициализации, когда сессия уже создана и все структуры данных готовы. В этом режиме инференс проходит значительно быстрее.
Подготовка входных данных Входные тензоры создаются или переиспользуются из существующих буферов. Использование typed arrays и переиспользование памяти снижает нагрузку на сборщик мусора.
const inputTensor = new ort.Tensor('float32', inputData, [1, 3, 224, 224]);
const feeds = { input: inputTensor };Выполнение инференса Выполнение модели происходит без повторной компиляции графа. Это минимизирует задержку и позволяет использовать ORT Web для потоковой обработки данных.
const results = await session.run(feeds);
const output = results.output;Оптимизация горячего старта:
Переиспользование тензоров: Для повторных инференсов можно выделять буферы один раз и заполнять их новыми данными, избегая создания новых объектов.
Асинхронная подготовка: Параллельная подготовка данных для следующего инференса позволяет скрыть задержку и поддерживать высокую пропускную способность.
Выбор бэкенда: ORT Web поддерживает несколько движков выполнения: WebAssembly, WebGL, WebGPU. После холодного старта выбранный бэкенд обеспечивает стабильную производительность для горячего старта.
Большие модели с глубокой структурой требуют больше времени на холодный старт. При этом горячий старт менее чувствителен к размеру, так как граф уже оптимизирован и скомпилирован.
Рекомендации по работе с большими моделями:
Реальные замеры показывают, что первый инференс может быть в 3–5 раз медленнее последующих, особенно на мобильных устройствах. В веб-сценариях это особенно заметно при загрузке модели по сети.
Пример замеров:
| Тип старта | Время (мс) |
|---|---|
| Холодный старт | 1200 |
| Горячий старт | 250 |
Эти данные подчеркивают необходимость разграничения двух стадий и стратегического управления инициализацией моделей.
Эти подходы обеспечивают стабильную и предсказуемую производительность инференса в браузере, снижая задержки и повышая отзывчивость приложений.