В быстро развивающейся области искусственного интеллекта (ИИ) и машинного обучения (МЛ) эффективное перемещение моделей между различными инструментами и платформами имеет решающее значение. ONNX (Open Neural Network Exchange) решает эту проблему, предоставляя формат с открытым исходным кодом, разработанный специально для моделей ИИ. Он выступает в роли универсального транслятора, позволяя разработчикам тренировать модель в одном фреймворке, например в PyTorchа затем развернуть ее с помощью другого фреймворка или механизма вывода, например TensorFlow или специализированный runtimes, например ONNX Runtime. Такая совместимость упрощает путь от исследований до производства, способствуя сотрудничеству и гибкости в экосистеме ИИ. Изначально ONNX был разработан Facebook AI Research и Microsoft Research, а сейчас является процветающим проектом сообщества.
Актуальность ONNX
Основная ценность ONNX заключается в продвижении переносимость и совместимость в жизненном цикле разработки ИИ. Вместо того чтобы замыкаться в экосистеме конкретного фреймворка, разработчики могут использовать ONNX для свободного перемещения моделей между различными инструментами и аппаратными платформами. Определив общий набор операторов (строительных блоков нейронные сети) и стандартный формат файлов (.onnx
), ONNX гарантирует, что структура модели и выученные параметры (Вес) представлены последовательно. Это особенно полезно для пользователей Ultralytics YOLO модели, поскольку Ultralytics предоставляет простые методы для экспорт моделей в формат ONNX. Эта возможность экспорта позволяет пользователям брать такие модели, как YOLOv8 или новейший YOLO11 и развертывать их на самых разных аппаратных и программных платформах, часто используя оптимизированные движки для выводов для повышения производительности и Аппаратное ускорение.
Как работает ONNX
ONNX достигает совместимости благодаря нескольким ключевым техническим особенностям:
- Общее представление моделей: ONNX определяет стандартный набор операторов вычислительных графов, таких как функции свертки или активации, и общую систему типов данных. Когда модель глубокого обучения преобразуется в ONNX, ее архитектура и параметры переводятся в это общее представление.
- Структура на основе графов: Модели в ONNX представлены в виде вычислительных графов. Узлы графа представляют операции (например, умножение матриц или применение функции ReLU), а ребра - поток данных (тензоры) между этими операциями. Такая структура графов является общей для многих ML-фреймворков, что облегчает конвертацию.
- Система версий: ONNX поддерживает версии для своих наборов операторов (opsets). Это обеспечивает обратную совместимость, позволяя моделям, созданным с помощью старых опсетов, продолжать работать на более новых средах исполнения, поддерживающих эти версии.
- Расширяемость: Хотя ONNX определяет основной набор операторов, он также позволяет использовать пользовательские операторы, позволяя фреймворкам и производителям оборудования поддерживать специализированные функции.
- Экосистема и инструменты: Богатая экосистема окружает ONNX, включая библиотеки для преобразования моделей из различных фреймворков (например, из PyTorch или TensorFlow), инструменты для визуализации и отладки графов ONNX , а также среды выполнения, такие как ONNX Runtime, оптимизированные для высокопроизводительных выводов на различных аппаратных средствах (CPUCPU, GPU, специализированные ускорители).
Применение ONNX
ONNX служит важнейшим мостом между модельными тренировочными средами и разнообразными целями развертывания. Вот два конкретных примера:
- Развертывание моделей компьютерного зрения на пограничных устройствах: Разработчик обучает модель обнаружения объектов, например модель Ultralytics YOLO , с помощью PyTorch на мощном сервере с графическими процессорами. Для развертывания на ограниченных по ресурсам граничных устройствах (например, на умной камере или дроне) они экспортируют модель в формат ONNX . Затем этот ONNX можно оптимизировать с помощью таких инструментов, как NVIDIA TensorRT или OpenVINO отIntel, и развернуть его для эффективных выводов в реальном времени прямо на устройстве. Эта гибкость подчеркивается различными вариантами развертывания моделей. Ты можешь изучить решенияUltralytics на примерах из разных отраслей.
- Кросс-фреймворк сотрудничество и развертывание: Исследовательская группа разрабатывает новую архитектуру модели, используя TensorFlow. Другая команда хочет интегрировать эту модель в существующее приложение, построенное с помощью PyTorch. Экспортировав модель TensorFlow в ONNX, вторая команда может легко загрузить и использовать ее в своей среде PyTorch или развернуть ее с помощью стандартизированного ONNX Runtime на различных конфигурациях серверов(облачных или локальных), не нуждаясь в оригинальном фреймворке TensorFlow . Это способствует более легкому обслуживанию и интеграции моделей.
ONNX по сравнению с родственными понятиями
Важно отличать ONNX от родственных терминов:
- Форматы, специфичные для фреймворка: Такие форматы, как PyTorch's
.pt
/.pth
или SavedModelTensorFlow являются родными для соответствующих фреймворков. ONNX выступает в роли посредника, позволяя конвертировать между этими форматами или развертывать их через общую среду выполнения. TorchScript это еще один формат для сериализации моделей PyTorch , который иногда используется как альтернатива или предшественник экспорта ONNX . - Движки для выводов/исполнители: Такие инструменты, как ONNX Runtime, TensorRTи OpenVINO это программные библиотеки, предназначенные для эффективного выполнения ML-моделей. Многие из этих движков могут использовать модели ONNX , часто применяя дополнительную оптимизацию (например, квантование или слияние графов) для конкретных аппаратных целей. ONNX предоставляет стандартизированный вход модели для этих движков.
В общем, ONNX - это жизненно важный стандарт, обеспечивающий гибкость и совместимость в конвейере операций машинного обучения (MLOps), позволяющий разработчикам выбирать лучшие инструменты для обучения и развертывания, не будучи скованными ограничениями фреймворка. Платформы вроде Ultralytics HUB используют такие форматы, чтобы упростить путь от разработки модели до ее применения в реальном мире.