ONNX och Azure Machine Learning: Skapa och påskynda ML-modeller
Lär dig hur du använder Open Neural Network Exchange (ONNX) för att optimera inferensen för din maskininlärningsmodell. Slutsatsdragning, eller modellbedömning, är fasen där den distribuerade modellen används för förutsägelse, oftast på produktionsdata.
Det är svårt att optimera maskininlärningsmodeller för slutsatsdragning (eller modellbedömning) eftersom du måste justera modellen och slutsatsdragningsbiblioteket för att få ut det mesta av maskinvarufunktionerna. Problemet blir extremt svårt om du vill få optimala prestanda på olika typer av plattformar (moln/edge, CPU/GPU osv.), eftersom var och en har olika funktioner och egenskaper. Komplexiteten ökar om du har modeller från en mängd olika ramverk som måste köras på olika plattformar. Det är mycket tidskrävande att optimera alla olika kombinationer av ramverk och maskinvara. En lösning för att träna en gång i önskat ramverk och köra var som helst i molnet eller gränsenhet krävs. Det är här ONNX kommer in.
Microsoft och en community med partner skapade ONNX som en öppen standard för att representera maskininlärningsmodeller. Modeller från många ramverk , inklusive TensorFlow, PyTorch, SciKit-Learn, Keras, Chainer, MXNet, MATLAB och SparkML, kan exporteras eller konverteras till standardformatet ONNX. När modellerna är i ONNX-format kan de köras på en mängd olika plattformar och enheter.
ONNX Runtime är en högpresterande slutsatsdragningsmotor för distribution av ONNX-modeller till produktion. Den är optimerad för både molnet och gränsenheter och fungerar på Linux, Windows och Mac. Den är skriven i C++, och har även API:er för C, Python, C#, Java och JavaScript (Node.js) för användning i olika miljöer. ONNX Runtime stöder både DNN och traditionella ML-modeller och integreras med acceleratorer på olika maskinvara, till exempel TensorRT på NVidia-GPU:er, OpenVINO på Intel-processorer, DirectML i Windows med mera. Genom att använda ONNX Runtime kan du dra nytta av de omfattande optimeringarna, testningen och de pågående förbättringarna i produktionsklassen.
ONNX Runtime används i storskaliga Microsoft-tjänster som Bing, Office och Azure Cognitive Services. Prestandavinster är beroende av ett antal faktorer, men dessa Microsoft-tjänster har sett en genomsnittlig prestandaökning på 2 gånger cpu. Förutom Azure Machine Learning-tjänster körs ONNX Runtime även i andra produkter som stöder Machine Learning-arbetsbelastningar, inklusive:
- Windows: Körningen är inbyggd i Windows som en del av Windows Machine Learning och körs på hundratals miljoner enheter.
- Azure SQL produktfamilj: Kör intern bedömning av data i Azure SQL Edge och Azure SQL Managed Instance.
- ML.NET: Kör ONNX-modeller i ML.NET.
Hämta ONNX-modeller
Du kan hämta ONNX-modeller på flera sätt:
- Träna en ny ONNX-modell i Azure Machine Learning (se exempel längst ned i den här artikeln) eller med hjälp av automatiserade maskininlärningsfunktioner
- Konvertera befintlig modell från ett annat format till ONNX (se självstudierna)
- Hämta en förtränad ONNX-modell från ONNX Model Zoo
- Generera en anpassad ONNX-modell från Azure Custom Vision-tjänsten
Många modeller som bildklassificering, objektidentifiering och textbearbetning kan representeras som ONNX-modeller. Om du stöter på ett problem med en modell som inte kan konverteras korrekt kan du skapa ett problem i GitHub för respektive konverterare som du använde. Du kan fortsätta att använda din befintliga formatmodell tills problemet har åtgärdats.
Distribuera ONNX-modeller i Azure
Med Azure Machine Learning kan du distribuera, hantera och övervaka dina ONNX-modeller. Med hjälp av standardarbetsflödet för distribution och ONNX Runtime kan du skapa en REST-slutpunkt i molnet. Se exempel på Jupyter Notebooks i slutet av den här artikeln för att prova själv.
Installera och använda ONNX Runtime med Python
Python-paket för ONNX Runtime finns på PyPi.org (CPU, GPU). Läs systemkraven innan du installerar.
Om du vill installera ONNX Runtime för Python använder du något av följande kommandon:
pip install onnxruntime # CPU build
pip install onnxruntime-gpu # GPU build
Om du vill anropa ONNX Runtime i Python-skriptet använder du:
import onnxruntime
session = onnxruntime.InferenceSession("path to model")
Dokumentationen som medföljer modellen visar vanligtvis indata och utdata för att använda modellen. Du kan också använda ett visualiseringsverktyg som Netron för att visa modellen. Med ONNX Runtime kan du också köra frågor mot modellens metadata, indata och utdata:
session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name
Om du vill härleda din modell använder run
du och skickar i listan med utdata som du vill returnera (lämna tomt om du vill ha alla) och en karta över indatavärdena. Resultatet är en lista över utdata.
results = session.run(["output1", "output2"], {
"input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})
Fullständig referens för Python API finns i referensdokumenten för ONNX Runtime.
Exempel
Se how-to-use-azureml/deployment/onnx, till exempel Python-notebook-filer som skapar och distribuerar ONNX-modeller.
Lär dig att köra notebook-filer genom att följa artikeln Använda Jupyter-notebooks till att utforska tjänsten.
Exempel för användning på andra språk finns i ONNX Runtime GitHub.
Mer information
Läs mer om ONNX eller bidra till projektet:
Läs mer om ONNX Runtime eller bidra till projektet: