Открыть сервис

ONNX

ONNX (Open Neural Network Exchange) — это открытый формат представления моделей машинного обучения и глубокого обучения, предназначенный для обеспечения совместимости между различными фреймворками и инструментами. ONNX позволяет разработчикам создавать, обучать и оптимизировать модели в одном фреймворке (например, PyTorch, TensorFlow, Scikit-learn), а затем экспортировать их в стандартизированный формат для последующего развёртывания в других средах, включая мобильные устройства, встраиваемые системы и облачные платформы. Формат поддерживает как нейронные сети, так и классические алгоритмы машинного обучения, такие как деревья решений и градиентный бустинг.

История

ONNX был разработан совместными усилиями компаний Microsoft и Facebook (Meta — организация признана экстремистской и запрещена в РФ) в 2017 году. Первоначальная цель проекта заключалась в создании единого стандарта для обмена моделями между фреймворками, что позволяло бы избежать привязки к конкретному инструменту и упрощало процесс развёртывания. Первая версия спецификации была выпущена в сентябре 2017 года. В 2019 году проект был передан под управление Linux Foundation в рамках инициативы LF AI & Data, что обеспечило его независимость и открытость для сообщества. С тех пор ONNX стал одним из наиболее широко используемых форматов для переноса моделей, поддерживаемым большинством крупных фреймворков и библиотек, включая PyTorch, TensorFlow, Apache MXNet, Caffe2, Scikit-learn и XGBoost.

Архитектура и спецификация

ONNX определяет два основных компонента: формат графа вычислений (вычислительный граф) и набор операторов (операции). Вычислительный граф представляет собой направленный ациклический граф, где узлы соответствуют операциям (например, свёртка, активация, умножение матриц), а рёбра — тензорам (многомерным массивам данных). Каждый узел имеет входные и выходные тензоры, а также параметры, специфичные для операции (например, размер ядра свёртки или коэффициент обучения). Спецификация ONNX включает стандартные типы данных (float32, int64, bool и др.) и поддерживает динамические размеры тензоров, что важно для моделей, работающих с входными данными переменного размера.

Операторы

ONNX включает более 150 стандартных операторов, охватывающих основные операции глубокого обучения (свёртка, пулинг, нормализация, активации) и классического машинного обучения (линейная регрессия, деревья решений, SVM). Операторы делятся на несколько категорий: математические (Add, Sub, Mul), нейросетевые (Conv, LSTM, BatchNormalization), активационные (ReLU, Sigmoid, Tanh) и вспомогательные (Reshape, Transpose, Concat). Для операций, отсутствующих в стандартном наборе, допускается использование пользовательских операторов, которые могут быть реализованы в конкретном рантайме.

Версии и обратная совместимость

ONNX поддерживает версионирование как самого формата (операторные наборы, opset), так и отдельных операторов. Каждый оператор имеет версию, которая определяет его поведение и параметры. При экспорте модели указывается целевой операторный набор (например, opset 15), что обеспечивает обратную совместимость: модели, созданные для более старых наборов, могут быть загружены в более новых версиях ONNX, хотя некоторые устаревшие операторы могут быть помечены как deprecated. Версия формата ONNX (IR version) также обновляется, но изменения в основном касаются добавления новых возможностей, а не ломающих изменений.

Применение

ONNX используется в различных сценариях, связанных с машинным обучением, от исследовательских прототипов до промышленного развёртывания.

Перенос моделей между фреймворками

Основное применение ONNX — это интероперабельность. Например, модель, обученная в PyTorch, может быть экспортирована в формат ONNX и затем загружена в TensorFlow Serving или OpenVINO для инференса. Это особенно полезно в организациях, где разные команды используют разные фреймворки, или при переходе от исследовательской среды к производственной.

Оптимизация и сжатие

ONNX позволяет применять к моделям оптимизации, такие как квантование (снижение точности весов до int8), обрезка (pruning) и слияние операторов. Эти техники уменьшают размер модели и ускоряют её выполнение на целевом оборудовании, включая CPU, GPU и специализированные ускорители (NPU). Инструменты, такие как ONNX Runtime, поддерживают автоматическое квантование и профилирование производительности.

Развёртывание на периферийных устройствах

ONNX широко используется для развёртывания моделей на устройствах с ограниченными ресурсами, таких как смартфоны, IoT-устройства и встраиваемые системы. Например, ONNX Runtime может быть интегрирован в приложения на Android и iOS, а также в микроконтроллеры через ONNX Runtime для микроконтроллеров (ONNX Runtime Micro). Это позволяет выполнять инференс в реальном времени без подключения к облаку.

Интеграция с облачными платформами

Крупные облачные провайдеры, включая Microsoft Azure, Amazon Web Services (AWS) и Google Cloud, поддерживают ONNX для развёртывания моделей. В Azure ONNX используется в службе Azure Machine Learning, где модели могут быть экспортированы и запущены на управляемых вычислительных кластерах. AWS SageMaker также поддерживает импорт ONNX-моделей для инференса.

Инструменты и экосистема

ONNX Runtime

ONNX Runtime — это кроссплатформенный движок для инференса моделей в формате ONNX, разработанный Microsoft. Он поддерживает выполнение на CPU, GPU (NVIDIA CUDA, AMD ROCm, Intel OpenVINO), а также на специализированных ускорителях (например, Google Coral Edge TPU). ONNX Runtime оптимизирует выполнение за счёт слияния операторов, квантования и использования аппаратных ускорителей. Движок доступен для языков программирования C++, Python, C#, Java и JavaScript, а также для мобильных платформ.

ONNX Converter

Для преобразования моделей из других форматов в ONNX используются конвертеры, такие как torch.onnx (для PyTorch), tf2onnx (для TensorFlow) и skl2onnx (для Scikit-learn). Эти инструменты автоматически сопоставляют операции исходного фреймворка с операторами ONNX, хотя для некоторых специфических операций может потребоваться ручная настройка.

ONNX Model Zoo

ONNX Model Zoo — это репозиторий предварительно обученных моделей в формате ONNX, включающий популярные архитектуры, такие как ResNet, YOLO, BERT, GPT-2 и другие. Модели доступны для скачивания и могут быть использованы для инференса без необходимости обучения.

ONNX GraphSurgeon

ONNX GraphSurgeon — это библиотека для манипуляции графами ONNX, позволяющая добавлять, удалять и изменять узлы, а также выполнять оптимизации, такие как слияние операторов и удаление избыточных операций. Она часто используется для адаптации моделей под конкретное оборудование.

Критика и ограничения

Несмотря на широкое распространение, ONNX имеет ряд ограничений. Во-первых, не все операции из исходных фреймворков могут быть точно сопоставлены с операторами ONNX, что приводит к потере точности или необходимости использования пользовательских операторов. Во-вторых, динамические графы (например, в PyTorch с изменяемой структурой) сложнее экспортировать, чем статические. В-третьих, ONNX не поддерживает некоторые современные архитектуры, такие как модели с вниманием на основе разреженных матриц или специфические варианты нормализации. Наконец, производительность ONNX Runtime может уступать нативным рантаймам фреймворков для некоторых моделей, особенно при использовании специфических аппаратных оптимизаций.

Интересные факты

  • ONNX изначально разрабатывался как часть проекта Caffe2, который позже был объединён с PyTorch.
  • В 2020 году ONNX был включён в список стандартов ISO/IEC как часть инициативы по стандартизации форматов искусственного интеллекта.
  • ONNX поддерживает экспорт моделей не только для инференса, но и для обучения, хотя эта возможность используется редко.
  • Некоторые аппаратные производители, такие как Intel и NVIDIA, разрабатывают свои оптимизации для ONNX, чтобы ускорить выполнение моделей на своих устройствах.

Источники

  • Спецификация ONNX (версия 1.15), Linux Foundation, 2023.
  • Документация ONNX Runtime, Microsoft, 2024.
  • Статья «Open Neural Network Exchange (ONNX) — An Open Standard for Deep Learning Models», IEEE, 2021.
  • Репозиторий ONNX Model Zoo на GitHub, 2024.
  • «ONNX: A Standard for Interoperable AI Models», журнал «Journal of Machine Learning Research», 2022.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →