ONNX Runtime Web предоставляет возможность запускать модели машинного
обучения непосредственно в браузере или Node.js, обеспечивая высокую
производительность и гибкость. Управление сессией модели осуществляется
через объект InferenceSession, который позволяет
настраивать параметры оптимизации графа и режим исполнения. Рассмотрим
ключевые опции graphOptimizationLevel и
executionMode более подробно.
Параметр graphOptimizationLevel отвечает за оптимизацию
вычислительного графа модели до её запуска. В ONNX Runtime Web доступно
несколько уровней оптимизации:
ORT_DISABLE_ALL Полностью отключает
оптимизацию. Граф модели используется без изменений. Полезно для
отладки, когда необходимо точно отслеживать исходный поток
данных.
ORT_ENABLE_BASIC Включает базовые
оптимизации, такие как удаление неиспользуемых узлов и упрощение
констант. Позволяет ускорить выполнение без значительного изменения
структуры графа.
ORT_ENABLE_EXTENDED Применяет более
сложные оптимизации, включая пересчет констант и фузинг операций.
Подходит для большинства производственных сценариев, когда требуется
баланс между скоростью и совместимостью.
ORT_ENABLE_ALL Активирует все
доступные оптимизации, включая агрессивный фузинг и перестановку
операций. Может существенно ускорить выполнение модели, но иногда
приводит к несовместимости с нестандартными операторами.
Пример использования:
import { InferenceSession, GraphOptimizationLevel } from "onnxruntime-web";
const session = await InferenceSession.create("model.onnx", {
graphOptimizationLevel: GraphOptimizationLevel.ORT_ENABLE_EXTENDED
});
Ключевой момент: выбор уровня оптимизации напрямую
влияет на производительность и совместимость модели. Для браузерных
приложений оптимизация до EXTENDED чаще всего обеспечивает
лучший баланс скорости и стабильности.
Параметр executionMode определяет стратегию исполнения
модели в сессии ONNX Runtime Web:
ORT_SEQUENTIAL Узлы графа
выполняются последовательно. Обеспечивает минимальное потребление памяти
и упрощает отладку. Рекомендуется для моделей с небольшим числом
операций или ограниченными ресурсами браузера.
ORT_PARALLEL Узлы графа выполняются
параллельно, если это возможно. Использует многопоточность JavaScript
(Web Workers в браузере или Worker Threads в Node.js), что позволяет
ускорить выполнение сложных моделей. Однако может увеличить потребление
памяти.
Пример использования:
import { InferenceSession, ExecutionMode } from "onnxruntime-web";
const session = await InferenceSession.create("model.onnx", {
executionMode: ExecutionMode.ORT_PARALLEL
});
Особенности:
SEQUENTIAL обеспечивает предсказуемость и низкое
потребление ресурсов.PARALLEL повышает производительность на многоядерных
системах, но может потребовать больше памяти и влиять на время старта
сессии.Опции graphOptimizationLevel и
executionMode работают совместно, но затрагивают разные
аспекты исполнения модели:
graphOptimizationLevel) сокращает количество операций и
упрощает их последовательность, что позволяет любому режиму исполнения
работать быстрее.executionMode)
управляет тем, как эти операции будут выполняться: последовательно или
параллельно.Пример комбинированного использования:
const session = await InferenceSession.create("model.onnx", {
graphOptimizationLevel: GraphOptimizationLevel.ORT_ENABLE_ALL,
executionMode: ExecutionMode.ORT_PARALLEL
});
Такой подход позволяет максимально ускорить выполнение модели на современных устройствах с несколькими ядрами CPU.
ORT_DISABLE_ALL и
ORT_SEQUENTIAL — так проще отслеживать значения
тензоров.ORT_ENABLE_EXTENDED + ORT_PARALLEL.SEQUENTIAL
режим, чтобы избежать пикового потребления памяти.ORT_ENABLE_ALL), особенно если используются нестандартные
или пользовательские операторы.Эти две опции сессии — основные инструменты для управления производительностью ONNX Runtime Web, позволяющие балансировать между скоростью, потреблением памяти и совместимостью модели.