Dela via


ONNX och Azure Machine Learning

Den här artikeln beskriver hur Open Neural Network Exchange (ONNX) kan hjälpa dig att optimera slutsatsdragningen för dina maskininlärningsmodeller. 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 plattformar, till exempel moln, gräns, PROCESSOR eller GPU, eftersom varje plattform har olika funktioner och egenskaper. Komplexiteten ökar om du behöver köra modeller från olika ramverk på olika plattformar. Det kan vara tidskrävande att optimera alla olika kombinationer av ramverk och maskinvara.

En användbar lösning är att träna din modell en gång i önskat ramverk och sedan exportera eller konvertera den till ONNX så att den kan köras var som helst i molnet eller gränsen. Microsoft och en grupp partner skapade ONNX som en öppen standard för att representera maskininlärningsmodeller. Du kan exportera eller konvertera modeller från många ramverk till standard-ONNX-format. Ramverk som stöds är TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet och MATLAB. Du kan köra modeller i ONNX-format på olika plattformar och enheter.

Det här ONNX-flödesdiagrammet visar tillgängliga ramverk och distributionsalternativ.

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

ONNX Runtime

ONNX Runtime är en högpresterande slutsatsdragningsmotor för distribution av ONNX-modeller till produktion. ONNX Runtime är optimerat för både molnet och gränsen och fungerar i Linux, Windows och macOS. ONNX är skrivet i C++, men har även API:er för C, Python, C#, Java och JavaScript (Node.js) som ska användas i dessa 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 omfattande optimeringar i produktionsklass, testning och pågående förbättringar.

Storskaliga Microsoft-tjänster som Bing, Office och Azure AI använder ONNX Runtime. Även om prestandaökningar beror på många faktorer rapporterar dessa Microsoft-tjänster en genomsnittlig prestandaökning på 2 x på CPU med hjälp av ONNX. ONNX Runtime körs i Azure Machine Learning och andra Microsoft-produkter som stöder maskininlärningsarbetsbelastningar, inklusive:

Sätt att hämta ONNX-modeller

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

Du kan representera många modeller som ONNX, inklusive bildklassificering, objektidentifiering och textbearbetningsmodeller. Om du inte kan konvertera din modell kan du skapa ett GitHub-problem på lagringsplatsen för konverteraren som du använde.

DISTRIBUTION av ONNX-modell i Azure

Du kan distribuera, hantera och övervaka dina ONNX-modeller i Azure Machine Learning. Med hjälp av ett standardarbetsflöde för MLOps-distribution med ONNX Runtime kan du skapa en REST-slutpunkt som finns i molnet.

Python-paket för ONNX Runtime

Python-paket för CPU och GPU ONNX Runtime finns på PyPi.org. 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 följande kod:

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 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 på din modell använder run du och skickar i listan över utdata som du vill returnera och en karta över indatavärdena. Lämna utdatalistan tom om du vill ha alla utdata. 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 API-referensen för ONNX Runtime finns i Python API-dokumentationen.