Поделиться через


ONNX и Машинное обучение Azure

В этой статье описывается, как open Neural Network Exchange (ONNX) помогает оптимизировать вывод моделей машинного обучения. Инференс или оценка модели — процесс использования развернутой модели для генерации предсказаний на производственных данных.

Оптимизация моделей машинного обучения для вывода требует настройки модели и библиотеки выводов, чтобы сделать большую часть аппаратных возможностей. Эта задача становится сложной, если вы хотите получить оптимальную производительность на разных платформах, таких как облако, edge, ЦП или GPU, так как каждая платформа имеет различные возможности и характеристики. Сложность увеличивается, если необходимо запускать модели из различных платформ на разных платформах. Это может быть много времени для оптимизации всех различных сочетаний платформ и оборудования.

Полезное решение заключается в том, чтобы обучить модель один раз в предпочитаемой платформе, а затем экспортировать или преобразовать ее в ONNX, чтобы она может работать в любом месте в облаке или пограничном сервере. Корпорация Майкрософт и сообщество партнеров создали ONNX как открытый стандарт для представления моделей машинного обучения. Вы можете экспортировать или преобразовать модели из многих платформ в стандартный формат ONNX. Поддерживаемые платформы включают TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet и MATLAB. Модели можно запускать в формате ONNX на различных платформах и устройствах.

На этой схеме потока ONNX показаны доступные платформы и параметры развертывания.

Схема потока ONNX с обучением, преобразователями и развертыванием.

Среда выполнения ONNX

Среда выполнения ONNX — это высокопроизводительный механизм вывода для развертывания моделей ONNX в рабочей среде. Среда выполнения ONNX оптимизирована как для облака, так и для пограничных вычислений, а также работает в Linux, Windows и macOS. ONNX написан на C++, но также содержит API C, Python, C#, Java и JavaScript (Node.js), которые можно использовать в этих средах.

Среда выполнения ONNX поддерживает как глубокие нейронные сети, так и традиционные модели машинного обучения. Она интегрируется с акселераторами на другом оборудовании, например TensorRT на GPU NVIDIA, OpenVINO на процессорах Intel и DirectML в Windows. Используя среду выполнения ONNX, вы можете воспользоваться обширными оптимизациями производственного класса, тестированием и текущими улучшениями.

Высокомасштабируемые службы Майкрософт, такие как Bing, Office и Azure AI, используют среду выполнения ONNX. Хотя повышение производительности зависит от многих факторов, средние показатели производительности этих служб Майкрософт увеличиваются в 2 раза на ЦП благодаря использованию ONNX. Среда выполнения ONNX выполняется в Машинное обучение Azure и других продуктах Майкрософт, поддерживающих рабочие нагрузки машинного обучения, включая:

Способы получения моделей ONNX

Модели ONNX можно получить несколькими способами:

Можно представить множество моделей как ONNX, включая классификацию изображений, обнаружение объектов и модели обработки текста. Если модель не удается преобразовать, отправьте ошибку GitHub в репозитории используемого преобразователя.

Развертывание модели ONNX в Azure

Вы можете развертывать, управлять и отслеживать модели ONNX в Машинное обучение Azure. Используя стандартный рабочий процесс развертывания MLOps с средой выполнения ONNX, можно создать конечную точку REST, размещенную в облаке.

Пакеты Python для среды выполнения ONNX

Пакеты Python для среды выполнения ЦП и GPU ONNX доступны в PyPi.org. Перед установкой обязательно просмотрите требования к системе.

Чтобы установить среду выполнения ONNX для Python, используйте одну из следующих команд.

pip install onnxruntime       # CPU build
pip install onnxruntime-gpu   # GPU build

Чтобы вызвать среду выполнения ONNX в скрипте Python, используйте следующий код:

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

Входные и выходные данные для использования модели см. в документации к соответствующей модели. Для просмотра модели можно также использовать такое средство визуализации, как Netron.

Среда выполнения ONNX позволяет запрашивать метаданные модели, входные данные и выходные данные, как показано ниже.

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Чтобы выполнить вывод в модели, используйте run и передайте список выходных данных, которые вы хотите вернуть, и карту входных значений. Оставьте список выходных данных пустым, если требуется все выходные данные. Результатом будет список выходных данных.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Полный справочник по API среды выполнения ONNX см. в документации по API Python.