ONNX en Azure Machine Learning: ML-modellen maken en versnellen

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 het scoren van modellen is de fase waarin het geïmplementeerde model wordt gebruikt voor voorspelling, meestal op productiegegevens.

Het optimaliseren van machine learning-modellen voor deductie (of modelscore) is moeilijk omdat u het model en de deductiebibliotheek moet afstemmen om optimaal gebruik te maken van de hardwaremogelijkheden. Het probleem wordt extreem moeilijk als u optimale prestaties wilt krijgen op verschillende soorten platforms (cloud/edge, CPU/GPU, enzovoort), omdat elk platform verschillende mogelijkheden en kenmerken heeft. De complexiteit neemt toe als u modellen hebt van verschillende frameworks die op verschillende platforms moeten worden uitgevoerd. Het is erg tijdrovend om alle verschillende combinaties van frameworks en hardware te optimaliseren. Er is een oplossing nodig om eenmaal in uw voorkeursframework te trainen en overal in de cloud of edge uit te voeren. Dit is waar ONNX binnenkomt.

Microsoft en een community van partners hebben ONNX gemaakt als een open standaard voor het vertegenwoordigen van machine learning-modellen. Modellen uit veel frameworks , waaronder TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB en SparkML, 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 krachtige 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. Geschreven in C++, bevat het ook C-, Python-, C#-, Java- en JavaScript-API's (Node.js) voor gebruik in verschillende omgevingen. ONNX Runtime ondersteunt zowel DNN- als traditionele ML-modellen en integreert met accelerators op verschillende hardware, zoals TensorRT op NVidia GPU's, OpenVINO op Intel-processors, DirectML op Windows en meer. 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 Cognitive Services. Prestatieverbeteringen zijn afhankelijk van een aantal factoren, maar deze Microsoft-services hebben een gemiddelde prestatiewinst van 2x op cpu gezien. Naast Azure Machine Learning services wordt ONNX Runtime ook uitgevoerd in andere producten die ondersteuning bieden voor Machine Learning workloads, waaronder:

ONNX flow diagram showing training, converters, and deployment

ONNX-modellen ophalen

U kunt ONNX-modellen op verschillende manieren verkrijgen:

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

ONNX-modellen implementeren in Azure

Met Azure Machine Learning kunt u uw ONNX-modellen implementeren, beheren en bewaken. Met behulp van de standaardwerkstroom voor implementatie en ONNX Runtime kunt u een REST-eindpunt maken dat wordt gehost in de cloud. Bekijk voorbeelden van Jupyter-notebooks aan het einde van dit artikel om het zelf uit te proberen.

ONNX Runtime installeren en gebruiken met Python

Python-pakketten voor ONNX Runtime zijn beschikbaar op PyPi.org (CPU, GPU). Lees de systeemvereisten vóór de installatie.

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 bij het model worden meestal de invoer en uitvoer voor het gebruik van het model aangegeven. U kunt ook een visualisatiehulpprogramma zoals Netron gebruiken om het model weer te geven. Met ONNX Runtime kunt u ook 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 uw model wilt deducteren, gebruikt run en geeft u de lijst met uitvoer door die u wilt retourneren (laat 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 naslagdocumenten voor ONNX Runtime voor de volledige Python-API.

Voorbeelden

Zie how-to-use-azureml/deployment/onnx, bijvoorbeeld Python-notebooks die ONNX-modellen maken en implementeren.

Informatie over het uitvoeren van notebooks vindt u in het artikel Use Jupyter notebooks to explore this service (Jupyter Notebooks gebruiken om deze service te verkennen).

Voorbeelden voor gebruik in andere talen vindt u in de ONNX Runtime-GitHub.

Meer informatie

Meer informatie over ONNX of bijdragen aan het project:

Meer informatie over ONNX Runtime of bijdragen aan het project: