Что должен знать каждый разработчик 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 — это мощный и открытый стандарт, позволяющий предотвратить привязку к платформе и гарантировать, что разрабатываемые вами модели будут пригодны для использования в долгосрочной перспективе.