Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как open Neural Network Exchange (ONNX) помогает оптимизировать вывод моделей машинного обучения. Инференс или оценка модели — процесс использования развернутой модели для генерации предсказаний на производственных данных.
Оптимизация моделей машинного обучения для инференса требует настройки модели и библиотеки инференса, чтобы максимально эффективно использовать возможности оборудования. Эта задача становится сложной, если вы хотите получить оптимальную производительность на разных платформах, таких как облако, edge, ЦП или GPU, так как каждая платформа имеет различные возможности и характеристики. Сложность увеличивается, если необходимо запускать модели из различных платформ на разных платформах. Оптимизация всех возможных сочетаний фреймворков и оборудования может занять много времени.
Практичное решение — один раз обучить модель в предпочитаемом фреймворке, а затем экспортировать или преобразовать её в ONNX, чтобы она могла работать где угодно — в облаке или на периферийных устройствах. Корпорация Майкрософт и сообщество партнеров создали ONNX как открытый стандарт для представления моделей машинного обучения. Вы можете экспортировать или преобразовать модели из многих платформ в стандартный формат ONNX. Поддерживаемые платформы включают TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet и MATLAB. Модели можно запускать в формате 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 Runtime работает в Машинное обучение Azure и других продуктах Microsoft, поддерживающих нагрузки машинного обучения, включая:
- Windows. Среда выполнения ONNX встроена в Windows в рамках Машинного обучения Windows и работает на сотнях миллионов устройств.
- Azure SQL. SQL Azure для пограничных вычислений и Управляемый экземпляр Azure SQL используют ONNX для выполнения встроенной оценки данных.
- ML.NET. Пример см. в руководстве по обнаружению объектов с помощью ONNX в ML.NET.
Способы получения моделей ONNX
Модели ONNX можно получить несколькими способами:
- Обучите новую модель ONNX в Машинное обучение Azure или используйте возможности автоматизированного машинного обучения.
- Преобразование существующей модели из другого формата в ONNX. Дополнительные сведения см. в руководствах ONNX.
- Получите предварительно обученную модель ONNX из ONNX Model Zoo.
- Создайте настраиваемую модель ONNX из службы пользовательского визуального распознавания Azure.
Можно представить множество моделей как ONNX, включая классификацию изображений, обнаружение объектов и модели обработки текста. Если вам не удаётся успешно преобразовать модель, создайте issue на 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.