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

Ontdek hoe u de Open Neural Network Exchange (ONNX) kunt gebruiken om deference van uw machine learning optimaliseren. De deferentie of modelscore is de fase waarin het geïmplementeerde model wordt gebruikt voor voorspelling, meestal op productiegegevens.

Het optimaliseren machine learning modellen voor de deferentie (of het scoren van modellen) is moeilijk omdat u het model en de deferentiebibliotheek moet afstemmen om optimaal gebruik te maken van de hardwaremogelijkheden. Het probleem wordt zeer 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 uit verschillende frameworks hebt die op verschillende platforms moeten worden uitgevoerd. Het kost veel tijd om alle verschillende combinaties van frameworks en hardware te optimaliseren. U hebt een oplossing nodig om eenmaal te trainen in het framework van uw voorkeur en overal in de cloud of edge uit te voeren. Dit is waar ONNX vandaan komt.

Microsoft en een community van partners hebben ONNX gemaakt als een open standaard voor het vertegenwoordigen machine learning modellen. Modellen van 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 high-performance deference engine voor het implementeren van ONNX-modellen in productie. Het is geoptimaliseerd voor zowel de cloud als edge en werkt op Linux, Windows en Mac. De api is geschreven in C++en bevat ook API's voor C, Python, C#, Java en Javascript (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 in Windows en meer. Door ONNX Runtime te gebruiken, kunt u profiteren van de uitgebreide optimalisaties, tests en voortdurende verbeteringen op productiekwaliteit.

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 prestatieverbetering van 2x gezien op CPU. Naast de Azure Machine Learning wordt ONNX Runtime ook uitgevoerd in andere producten die ondersteuning bieden Machine Learning workloads, waaronder:

ONNX-stroomdiagram met training, converters en implementatie

ONNX-modellen krijgen

U kunt ONNX-modellen op verschillende manieren verkrijgen:

Veel modellen, waaronder afbeeldingsclassificatie, objectdetectie en tekstverwerking, kunnen worden weergegeven als ONNX-modellen. Als u een probleem hebt met een model dat niet kan worden geconverteerd, kunt u een probleem indienen in de GitHub van de respectieve converter die u hebt gebruikt. U kunt uw bestaande indelingsmodel 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 standaardimplementatiewerkstroom en ONNX Runtime kunt u een REST-eindpunt maken dat in de cloud wordt gehost. Bekijk aan het einde van dit artikel voorbeeld-Jupyter-notebooks om het zelf 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.

Gebruik een van de volgende opdrachten om ONNX Runtime voor Python te installeren:

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

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

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

In de documentatie bij het model vindt u doorgaans de invoer en uitvoer voor het gebruik van het model. U kunt ook een visualisatiehulpprogramma zoals Netron gebruiken om het model te bekijken. Met ONNX Runtime kunt u ook de metagegevens, invoer en uitvoer van het model opvragen:

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

Als u uw model wilt afleiden, gebruikt u en geeft u de lijst met uitvoer door die u wilt laten zien (laat leeg als u ze allemaal wilt) en geeft u een kaart van de run invoerwaarden door. 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 naslaginformatie voor ONNX Runtimevoor de volledige Python-API-verwijzing.

Voorbeelden

Zie how-to-use-azureml/deployment/onnx voor 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: