Поиск по сайту:

Что должен знать каждый разработчик ML/AI о ONNX


Формат обмена открытыми нейронными сетями (ONNYX) — это новый стандарт обмена моделями глубокого обучения. Он обещает сделать модели глубокого обучения портативными, что позволит избежать привязки к поставщику. Давайте посмотрим, почему это важно для современного разработчика ML/AI.

Конечным результатом обученного алгоритма глубокого обучения является файл модели, который эффективно представляет взаимосвязь между входными данными и выходными прогнозами. Нейронная сеть — один из самых мощных способов создания таких прогнозных моделей, но ее сложно встроить в производственные системы. Чаще всего эти модели существуют в таком формате данных, как файл `.pth` или файл HD5. Часто вам нужно, чтобы эти модели были переносимыми, чтобы их можно было развертывать в средах, которые могут отличаться от тех, в которых вы изначально обучали модель.

Обзор ONNX

На высоком уровне ONNX предназначен для обеспечения совместимости инфраструктур. Существует множество отличных библиотек машинного обучения на разных языках :  PyTorch, TensorFlow, MXNet и Caffe — это лишь некоторые из них, которые стали очень популярными в последние годы, но есть и множество других.
Идея состоит в том, что вы можете обучить модель с помощью одного набора инструментов, а затем развернуть ее, используя другой, для вывода и прогнозирования. Чтобы обеспечить такую совместимость, вы должны экспортировать свою модель в формат model.onnx, который представляет собой сериализованное представление модели в файле protobuf. В настоящее время в ONNX имеется встроенная поддержка PyTorch, CNTK, MXNet и Caffe2, но есть также конвертеры для TensorFlow и CoreML.

Предварительные условия

  • Базовое понимание машинного обучения (ML) и глубокого обучения (DL): Знакомство с такими понятиями, как нейронные сети, слои, модели и процессы обучения.

  • Знание популярных платформ машинного обучения: Опыт работы хотя бы с одной основной платформой машинного обучения/DL, такой как TensorFlow, PyTorch или Scikit-learn, поскольку ONNX используется для преобразования моделей между платформами.

  • Опыт развертывания моделей: понимание основ развертывания моделей машинного обучения в производственных средах, поскольку ONNX способствует эффективному кросс-платформенному развертыванию.

  • Знакомство с оптимизацией моделей: базовое понимание методов оптимизации производительности моделей ML, поскольку ONNX часто используется для повышения эффективности моделей.

  • Программирование на Python. Поскольку ONNX имеет сильную поддержку Python, знание Python необходимо для использования его инструментов и библиотек.

ONNX на практике

Давайте представим, что вы хотите обучить модель прогнозировать, годен ли продукт в вашем холодильнике. Вы решаете просмотреть несколько фотографий продуктов питания, срок годности которых на разных стадиях истек, и передать их в сверточную нейронную сеть (CNN), которая просматривает изображения продуктов питания и обучает их предсказывать, съедобна ли еда.

После того как вы обучили свою модель, вы захотите развернуть ее в новом приложении iOS, чтобы каждый мог использовать вашу предварительно обученную модель для проверки безопасности своих продуктов питания. Первоначально вы обучили свою модель с помощью PyTorch, но iOS предполагает использовать CoreML для использования внутри приложения. ONNX — это промежуточное представление вашей модели, которое позволяет легко переходить из одной среды в другую.

Используя PyTorch, вы обычно экспортируете свою модель с помощью torch.save(the_model.state_dict(), PATH). Экспорт в формат обмена ONNX — это всего лишь еще одна строка:
torch.onnx.export(model, dummy_input, 'SplitModel.proto', verbose=True)

Используя такой инструмент, как ONNX-CoreML, теперь вы можете легко превратить предварительно обученную модель в файл, который можно импортировать в XCode и легко интегрировать с вашим приложением. В качестве рабочего примера ознакомьтесь с этой замечательной публикацией Стефано Аттарди о создании iOS-приложения на основе машинного обучения от начала до конца.

Заключение

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

Статьи по данной тематике: