ONNX och Azure Mašinsko učenje
Lär dig hur användningen av Open Neural Network Exchange (ONNX) kan hjälpa dig att optimera slutsatsdragningen för din maskininlärningsmodell. Slutsatsdragning eller modellbedömning är processen att använda en distribuerad modell för att generera förutsägelser på produktionsdata.
För att optimera maskininlärningsmodeller för slutsatsdragning måste du justera modellen och slutsatsdragningsbiblioteket för att få ut mesta möjliga av maskinvarufunktionerna. Den här uppgiften blir komplex om du vill få optimala prestanda på olika typer av plattformar, till exempel molnet eller gränsen, CPU eller GPU, och så vidare, eftersom varje plattform har olika funktioner och egenskaper. Komplexiteten ökar om du har modeller från olika ramverk som måste köras på olika plattformar. Det kan vara tidskrävande att optimera alla olika kombinationer av ramverk och maskinvara. Därför är en användbar lösning att träna din modell en gång i önskat ramverk och sedan köra den var som helst i molnet eller gränsen – den här lösningen är där ONNX kommer in.
Vad är ONNX?
Microsoft och en grupp 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 och MATLAB, kan exporteras eller konverteras till standardformatet ONNX. När modellerna är i ONNX-format kan de köras på 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änsen och fungerar på Linux, Windows och Mac. Även om ONNX är skrivet i C++, har det även API:er för C, Python, C#, Java och JavaScript (Node.js) för användning i många miljöer. ONNX Runtime stöder både djup neurala nätverk (DNN) och traditionella maskininlärningsmodeller, och integreras med acceleratorer på olika maskinvara, till exempel TensorRT på Nvidia GPU:er, OpenVINO på Intel-processorer och DirectML i Windows. Genom att använda ONNX Runtime kan du dra nytta av de omfattande optimeringarna, testningen och de pågående förbättringarna i produktionsklass.
ONNX Runtime används i storskaliga Microsoft usluge som Bing, Office och Azure AI. Även om prestandaökningar beror på många faktorer rapporterar dessa Microsoft usluge en genomsnittlig prestandaökning på 2x på CPU. Förutom Azure Mašinsko učenje-tjänster körs ONNX Runtime även i andra produkter som stöder Mašinsko učenje arbetsbelastningar, inklusive:
- Windows: Körningen är inbyggd i Windows som en del av Windows Mašinsko učenje 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 Mašinsko učenje (enligt beskrivningen i exempelavsnittet i den här artikeln) eller med hjälp av automatiserade maskininlärningsfunktioner.
- Konvertera en befintlig modell från ett annat format till ONNX enligt de här självstudierna.
- Hämta en förtränad ONNX-modell från ONNX Model Zoo.
- Generera en anpassad ONNX-modell från Azure AI Custom Vision Service.
Många modeller, inklusive bildklassificering, objektidentifiering och textbearbetningsmodeller kan representeras som ONNX-modeller. Om du stöter på ett problem med en modell som inte kan konverteras kan du skapa ett GitHub-problem på lagringsplatsen för konverteraren som du använde. Du kan fortsätta använda ditt befintliga modellformat tills problemet har åtgärdats.
DISTRIBUTION av ONNX-modell i Azure
Med Azure Mašinsko učenje kan du distribuera, hantera och övervaka dina ONNX-modeller. Med hjälp av standardarbetsflödet för MLOps-distribution och ONNX Runtime kan du skapa en REST-slutpunkt som finns i molnet. Praktiska exempel finns i de här Jupyter-notebook-filerna.
Installation och användning av ONNX Runtime med Python
Python-paket för ONNX Runtime är tillgängliga på PyPi.org (CPU och GPU). Se till att granska systemkraven före installationen.
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 anger 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 även köra frågor mot modellmetadata, indata och utdata på följande sätt:
session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name
Om du vill utföra slutsatsdragning av din modell använder run
du och skickar i listan över utdata som du vill returnera (eller lämnar listan tom 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})
Den fullständiga Python API-referensen finns i referensdokumenten för ONNX Runtime.
Exempel
- Lär dig att köra notebook-filer genom att följa artikeln Använda Jupyter-notebooks till att utforska tjänsten.
- Exempel som visar ONNX-användning på andra språk finns i ONNX Runtime GitHub.
Relaterat innehåll
Läs mer om ONNX eller bidra till projektet:
Läs mer om ONNX Runtime eller bidra till projektet: