ONNX Runtime Web (ORT Web) представляет собой высокопроизводительную
среду выполнения моделей машинного обучения в браузере, разработанную на
основе ONNX Runtime. Основная цель ORT Web — обеспечение быстрого и
эффективного инференса моделей ONNX непосредственно в клиентской части
без необходимости обращения к серверу. Достижение этой цели
обеспечивается гибкой архитектурой, включающей поддержку двух ключевых
бэкендов: WebAssembly (WASM) и
WebGL.
Основные компоненты
1. Ядро ONNX Runtime
Ядро ORT Web выполняет функции загрузки, инициализации и управления
моделью. Оно абстрагирует детали работы конкретного бэкенда и
предоставляет единый интерфейс для работы с входными и выходными
тензорами.
2. Бэкенды исполнения
- WebAssembly (WASM): основной бэкенд для большинства
задач. Использует компиляцию кода ONNX Runtime на уровень WASM, что
обеспечивает переносимость и высокую производительность на широком
спектре устройств.
- WebGL: GPU-ускоренный бэкенд, предназначенный для
параллельного вычисления тензоров с высокой размерностью. Использует
графический API браузера для выполнения операций на видеокарте, что
особенно эффективно для свёрточных нейросетей и глубокого обучения.
WebAssembly бэкенд
Архитектура и принципы работы
WebAssembly бэкенд реализует стандартные операции ONNX через
интерпретацию или компиляцию WASM-модулей. Основные особенности:
- Кроссплатформенность: поддержка всех современных
браузеров без дополнительных плагинов.
- Оптимизация памяти: управление heap-областью
позволяет избежать частых копирований данных и снижает задержки при
инференсе.
- Синхронное и асинхронное выполнение: позволяет
использовать как блокирующие, так и неблокирующие операции, что важно
для интеграции в интерактивные веб-приложения.
Принцип работы
- Загрузка WASM-модуля ORT через
fetch и инициализация с
помощью WebAssembly.instantiate.
- Создание сессии с моделью ONNX через
InferenceSession.create().
- Передача входных тензоров в сессию.
- Получение результатов инференса в виде тензоров и преобразование их
в удобные форматы (TypedArray или объекты JS).
WebGL бэкенд
Особенности и возможности
WebGL бэкенд использует графический процессор для вычислений, что
обеспечивает значительное ускорение при работе с матрицами высокой
размерности:
- Параллельные вычисления: каждая операция на
тензорах переводится в шейдерные программы, которые выполняются
параллельно на GPU.
- Поддержка больших моделей: эффективная работа с
моделями, требующими значительных вычислительных ресурсов, например,
ResNet или Transformer.
- Оптимизация графа вычислений: библиотека строит
внутренний граф операций и применяет техники слияния слоёв и буферного
переиспользования.
Принцип работы
- Инициализация WebGL контекста через
HTMLCanvasElement
или OffscreenCanvas.
- Преобразование входных данных в текстуры GPU.
- Выполнение операций через GLSL-шейдеры, каждая из которых
соответствует одной или нескольким операциям ONNX.
- Сбор результатов из текстур и преобразование их обратно в тензоры
JavaScript.
Управление сессиями и
оптимизация
Сессии ORT Web являются центральным элементом для инференса. Они
предоставляют методы:
session.run(feeds): выполнение инференса с передачей
словаря входных данных.
session.end(): освобождение ресурсов, связанных с
бэкендом.
session.getInputNames() и
session.getOutputNames(): получение метаданных модели.
Оптимизация производительности
- Использование WebAssembly SIMD позволяет ускорить
операции на CPU за счет векторизации.
- WebGL бэкенд может использовать текстурные буферы большого
размера, минимизируя количество операций передачи данных между
CPU и GPU.
- Поддержка multi-threading через Web Workers для
выполнения нескольких инференсов параллельно без блокировки основного
потока UI.
Совместное использование
бэкендов
ORT Web позволяет динамически выбирать бэкенд в зависимости от
характеристик устройства и типа модели. Например, для малых моделей
предпочтителен WASM для минимизации накладных расходов, а для сложных
свёрточных сетей — WebGL для максимального ускорения.
Выбор бэкенда производится при инициализации
сессии:
const session = await ort.InferenceSession.create(modelUrl, { executionProviders: ['webgl', 'wasm'] });
Библиотека автоматически выбирает первый доступный бэкенд из списка,
что обеспечивает гибкость и совместимость на разных платформах.
Особенности работы с
тензорами
ORT Web использует собственный тип данных Tensor,
совместимый с TypedArray JavaScript. Особенности:
- Поддержка различных типов:
float32, int32,
uint8, bool.
- Возможность прямого создания из существующих TypedArray без
копирования.
- Методы для конвертации между форматами и управления размерами
(shape) и типами данных.
Интеграция в веб-приложения
ORT Web легко интегрируется с популярными фронтенд-фреймворками,
обеспечивая:
- Асинхронную загрузку моделей и данных.
- Минимизацию блокировок UI за счет Web Workers.
- Поддержку мобильных устройств и браузеров с ограниченными
ресурсами.
Архитектура с чётким разделением ядра,
бэкендов и сессий обеспечивает
расширяемость и высокую адаптивность ORT Web для любых веб-приложений с
задачами машинного обучения.