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 Runtime поддерживает как глубокие нейронные сети (DNN), так и традиционные модели машинного обучения, а также интегрируется с акселераторами на другом оборудовании, например TensorRT на gpu Nvidia, OpenVINO на процессорах Intel и DirectML в Windows. Используя среду выполнения ONNX, вы можете воспользоваться обширными оптимизациями производственного класса, тестированием и текущими улучшениями.

Высокомасштабируемые службы Майкрософт, такие как Bing, Office и Azure AI, используют среду выполнения ONNX. Хотя повышение производительности зависит от многих факторов, эти службы Майкрософт сообщают о среднем 2x повышении производительности ЦП с помощью 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.