Open Neural Network Exchange (ONNX) возник как совместный проект компаний Microsoft и Facebook в 2017 году с целью создания открытого стандарта для представления моделей машинного обучения. Основная идея заключалась в том, чтобы обеспечить переносимость моделей между различными фреймворками, такими как PyTorch, TensorFlow, Scikit-learn и другими, без необходимости переписывать архитектуру сети или обучение заново. ONNX стремится решить проблему фрагментации экосистемы машинного обучения и ускорить процесс интеграции моделей в приложения и сервисы.
ONNX определяет формат для описания нейронных сетей и их компонентов, включая слои, веса, функции активации, операции и данные. Это позволяет разработчикам экспортировать модели из исходного фреймворка и запускать их в любом окружении, поддерживающем ONNX Runtime.
ONNX Runtime представляет собой высокопроизводительный движок для выполнения моделей ONNX. Он разработан для того, чтобы обеспечить эффективное и совместимое с платформой исполнение моделей на различных устройствах: CPU, GPU, мобильных устройствах и в веб-браузерах. Основные особенности ONNX Runtime:
ONNX Runtime Web — это отдельная версия движка, ориентированная на веб-приложения и работу в браузере. Она позволяет выполнять модели прямо в клиентском окружении, что снижает задержки и обеспечивает конфиденциальность данных, поскольку данные не передаются на сервер.
ONNX Runtime Web использует WebAssembly (WASM) и WebGL для обеспечения кроссбраузерной совместимости и аппаратного ускорения. В основе лежит модульная архитектура:
Такой подход позволяет адаптировать выполнение модели под доступные ресурсы устройства и обеспечить максимальную производительность без изменения исходной модели.
Основные шаги работы с моделью включают:
Загрузка модели Модель загружается в формате
.onnx, который может быть получен через экспорт из PyTorch
или TensorFlow. ONNX Runtime Web поддерживает загрузку как локальных
моделей, так и моделей с URL.
Создание сессии выполнения Для каждой модели
создаётся объект сессии (InferenceSession), который
управляет памятью, графом вычислений и оптимизациями.
Подготовка входных данных Данные для модели
преобразуются в тензоры (Tensor) с указанием типа данных и
формы. ONNX Runtime Web поддерживает стандартные типы:
float32, int32, bool и
др.
Выполнение инференса Вызов метода
run на сессии выполняет модель и возвращает результаты в
виде словаря с именами выходных тензоров и их значениями.
Обработка результатов Результаты могут быть преобразованы обратно в массивы JavaScript, обработаны для визуализации или переданы другим компонентам приложения.
ONNX Runtime Web позволяет использовать несколько стратегий оптимизации:
Особенности использования в вебе включают работу с асинхронными методами загрузки моделей и выполнения инференса, что предотвращает блокировку интерфейса пользователя и обеспечивает плавный опыт взаимодействия.
ONNX активно развивается и поддерживается сообществом и крупными компаниями. Экосистема включает:
Поддержка открытого формата позволяет легко обмениваться моделями, проводить сравнение производительности на разных платформах и использовать передовые методы оптимизации без привязки к конкретному фреймворку.
ONNX Runtime Web формирует основу для веб-ориентированных приложений с машинным обучением, позволяя эффективно переносить и выполнять модели нейронных сетей в браузере.