ONNX och Azure Machine Learning

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-tjänster som Bing, Office och Azure AI. Även om prestandaökningar beror på många faktorer rapporterar dessa Microsoft-tjänster en genomsnittlig prestandaökning på 2 gånger för CPU. Förutom Azure Machine Learning-tjänster körs ONNX Runtime även i andra produkter som stöder Machine Learning-arbetsbelastningar, inklusive:

ONNX-flödesdiagram som visar träning, konverterare och distribution.

Hämta ONNX-modeller

Du kan hämta ONNX-modeller på flera sätt:

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 Machine Learning 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äs mer om ONNX eller bidra till projektet:

Läs mer om ONNX Runtime eller bidra till projektet: