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

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

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

Что такое ONNX?

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

Среда выполнения ONNX — это высокопроизводительный механизм вывода для развертывания моделей ONNX в рабочей среде. Она оптимизирована как для облачной, так и для пограничной среды в Linux, Windows и Mac. Хотя ONNX написан на C++, он также содержит API C, Python, C#, Java и JavaScript (Node.js) для использования во многих средах. ONNX Runtime поддерживает как глубокие нейронные сети (DNN), так и традиционные модели машинного обучения, а также интегрируется с акселераторами на другом оборудовании, например TensorRT на gpu Nvidia, OpenVINO на процессорах Intel и DirectML в Windows. С помощью среды выполнения ONNX вы можете использовать преимущества обширных оптимизаций производственного уровня, тестирования и постоянных улучшений.

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

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

Получение моделей ONNX

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

  • Обучить новую модель ONNX в Машинное обучение Azure (как описано в разделе примеров этой статьи) или с помощью возможностей автоматизированного машинного обучения.
  • Преобразуйте существующую модель из другого формата в ONNX, как показано в этих руководствах.
  • Получите предварительно обученную модель ONNX из зоопарка моделей ONNX.
  • Создайте настраиваемую модель ONNX из службы azure AI Пользовательское визуальное распознавание.

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

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

С помощью Машинного обучения Azure можно развертывать модели ONNX, управлять ими и осуществлять мониторинг. С помощью стандартного рабочего процесса развертывания MLOps и среды выполнения ONNX можно создать конечную точку REST, размещенную в облаке. Примеры см. в этих записных книжках Jupyter.

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

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

Чтобы установить среду выполнения 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 Python см. в документации по среде выполнения ONNX.

Примеры

Узнайте больше об ONNX или поддержите проект.

Узнайте больше о среде выполнения ONNX или поддержите проект.