Delen via


ONNX en Azure Machine Learning

In dit artikel wordt beschreven hoe de Open Neural Network Exchange (ONNX) u kan helpen bij het optimaliseren van de deductie van uw machine learning-modellen. Inferentie, of model scoring, is het proces van het gebruik van een geïmplementeerd model om voorspellingen te genereren voor 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 platforms, zoals cloud, edge, CPU of GPU, omdat elk platform verschillende mogelijkheden en kenmerken heeft. De complexiteit neemt toe als u modellen wilt uitvoeren vanuit verschillende frameworks op verschillende platforms. Het kan tijdrovend zijn om alle verschillende combinaties van frameworks en hardware te optimaliseren.

Een handige oplossing is om uw model eenmalig te trainen in uw voorkeursframework en het vervolgens te exporteren of te converteren naar ONNX, zodat het overal in de cloud of rand kan worden uitgevoerd. Microsoft en een community van partners hebben ONNX gemaakt als een open standaard voor het vertegenwoordigen van machine learning-modellen. U kunt modellen van veel frameworks exporteren of converteren naar de standaard ONNX-indeling. Ondersteunde frameworks zijn Onder andere TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet en MATLAB. U kunt modellen uitvoeren in de ONNX-indeling op verschillende platforms en apparaten.

Dit ONNX-stroomdiagram toont beschikbare frameworks en implementatieopties.

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

ONNX Runtime

ONNX Runtime is een high-performance deductie-engine voor het implementeren van ONNX-modellen in productie. ONNX Runtime is geoptimaliseerd voor zowel cloud als edge en werkt op Linux, Windows en macOS. ONNX is geschreven in C++, maar heeft ook C-, Python-, C#-, Java- en JavaScript-API's (Node.js) die u in deze omgevingen kunt gebruiken.

ONNX Runtime ondersteunt zowel deep neurale netwerken (DNN) als traditionele machine learning-modellen. Het integreert met accelerators op verschillende hardware, zoals TensorRT op NVIDIA GPU's, OpenVINO op Intel-processors en DirectML in Windows. Door ONNX Runtime te gebruiken, kunt u profiteren van uitgebreide optimalisaties, tests en doorlopende verbeteringen op productieniveau.

Grootschalige Microsoft-services zoals Bing, Office en Azure AI gebruiken ONNX Runtime. Hoewel prestatieverbeteringen afhankelijk zijn van veel factoren, gemiddelden deze Microsoft-services een 2x prestatiewinst op CPU omdat ze ONNX gebruiken. ONNX Runtime wordt uitgevoerd in Azure Machine Learning en andere Microsoft-producten die machine learning-workloads ondersteunen, waaronder:

Manieren om ONNX-modellen te verkrijgen

U kunt ONNX-modellen op verschillende manieren verkrijgen:

U kunt veel modellen vertegenwoordigen als ONNX, waaronder afbeeldingsclassificatie, objectdetectie en tekstverwerkingsmodellen. Als u uw model niet kunt converteren, kunt u een GitHub-probleem indienen in de opslagplaats van het conversieprogramma dat u hebt gebruikt.

ONNX-modelimplementatie in Azure

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

Python-pakketten voor ONNX Runtime

Python-pakketten voor de CPU en GPU ONNX Runtime zijn beschikbaar op PyPi.org. Controleer 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

Gebruik de volgende code om ONNX Runtime aan te roepen in uw Python-script:

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 en een kaart met de invoerwaarden. Laat de uitvoerlijst leeg als u alle uitvoer wilt. Het resultaat is een lijst met de uitvoer.

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

Raadpleeg de Python API-documentatie voor de volledige ONNX Runtime-API.