ONNX en Azure Machine Learning

Meer informatie over het gebruik van de Open Neural Network Exchange (ONNX) kan helpen bij het optimaliseren van de deductie van uw Machine Learning-model. Deductie of modelscore is het proces van het gebruik van een geïmplementeerd model voor het genereren van voorspellingen op productiegegevens.

Voor het optimaliseren van machine learning-modellen voor deductie moet u het model en de deductiebibliotheek afstemmen om optimaal gebruik te maken van de hardwaremogelijkheden. Deze taak wordt complex als u optimale prestaties wilt krijgen op verschillende soorten platforms, zoals cloud of edge, CPU of GPU, enzovoort, omdat elk platform verschillende mogelijkheden en kenmerken heeft. De complexiteit neemt toe als u modellen van verschillende frameworks hebt die op verschillende platforms moeten worden uitgevoerd. Het kan tijdrovend zijn om alle verschillende combinaties van frameworks en hardware te optimaliseren. Daarom is een handige oplossing om uw model eenmaal te trainen in uw voorkeursframework en deze vervolgens overal in de cloud of edge uit te voeren. Deze oplossing is waar ONNX binnenkomt.

Wat is ONNX?

Microsoft en een community van partners hebben ONNX gemaakt als een open standaard voor het vertegenwoordigen van machine learning-modellen. Modellen van veel frameworks , waaronder TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet en MATLAB, kunnen worden geëxporteerd of geconverteerd naar de standaard ONNX-indeling. Zodra de modellen de ONNX-indeling hebben, kunnen ze worden uitgevoerd op verschillende platforms en apparaten.

ONNX Runtime is een high-performance deductie-engine voor het implementeren van ONNX-modellen in productie. Het is geoptimaliseerd voor zowel cloud als edge en werkt op Linux, Windows en Mac. Hoewel ONNX is geschreven in C++, heeft het ook C-, Python-, C#-, Java- en JavaScript-API's (Node.js) voor gebruik in veel omgevingen. ONNX Runtime ondersteunt zowel deep neurale netwerken (DNN) als traditionele machine learning-modellen, en kan worden geïntegreerd met accelerators op verschillende hardware, zoals TensorRT op Nvidia GPU's, OpenVINO op Intel-processors en DirectML op Windows. Door ONNX Runtime te gebruiken, kunt u profiteren van de uitgebreide optimalisaties, tests en doorlopende verbeteringen op productieniveau.

ONNX Runtime wordt gebruikt in grootschalige Microsoft-services zoals Bing, Office en Azure AI. Hoewel prestatieverbeteringen afhankelijk zijn van veel factoren, rapporteren deze Microsoft-services gemiddeld 2x prestatiewinst op CPU. Naast Azure Machine Learning-services wordt ONNX Runtime ook uitgevoerd in andere producten die ondersteuning bieden voor Machine Learning-workloads, waaronder:

ONNX-stroomdiagram met training, conversieprogramma's en implementatie.

ONNX-modellen verkrijgen

U kunt ONNX-modellen op verschillende manieren verkrijgen:

Veel modellen, waaronder afbeeldingsclassificatie, objectdetectie en tekstverwerkingsmodellen, kunnen worden weergegeven als ONNX-modellen. Als u een probleem hebt met een model dat niet kan worden geconverteerd, kunt u een GitHub-probleem indienen in de opslagplaats van het conversieprogramma dat u hebt gebruikt. U kunt de bestaande modelindeling blijven gebruiken totdat het probleem is opgelost.

ONNX-modelimplementatie in Azure

Met Azure Machine Learning kunt u uw ONNX-modellen implementeren, beheren en bewaken. Met behulp van de standaardwerkstroom voor MLOps-implementatie en ONNX Runtime kunt u een REST-eindpunt maken dat wordt gehost in de cloud. Zie deze Jupyter-notebooks voor praktische voorbeelden.

Installatie en gebruik van ONNX Runtime met Python

Python-pakketten voor ONNX Runtime zijn beschikbaar op PyPi.org (CPU en GPU). Zorg ervoor dat u de systeemvereisten controleert voordat u de installatie installeert.

Als u ONNX Runtime voor Python wilt installeren, gebruikt u een van de volgende opdrachten:

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

Als u ONNX Runtime wilt aanroepen in uw Python-script, gebruikt u:

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

In de documentatie die bij het model hoort, worden meestal de invoer en uitvoer voor het gebruik van het model aangegeven. U kunt ook een visualisatieprogramma zoals Netron gebruiken om het model weer te geven. Met ONNX Runtime kunt u als volgt query's uitvoeren op de metagegevens, invoer en uitvoer van het model:

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

Als u deductie wilt uitvoeren op uw model, gebruikt run en geeft u de lijst met uitvoer door die u wilt retourneren (of laat u de lijst leeg als u ze allemaal wilt gebruiken) en een kaart met de invoerwaarden. Het resultaat is een lijst met de uitvoer.

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

Zie de ONNX Runtime-referentiedocumenten voor de volledige Naslaginformatie over de Python-API.

Voorbeelden

Meer informatie over ONNX of bijdragen aan het project:

Meer informatie over ONNX Runtime of bijdragen aan het project: