Erste Schritte mit ONNX Runtime in Python

Hier finden Sie eine Kurzanleitung zur Installation der Pakete für die Verwendung von ONNX zur Modellserialisierung und -inferenz mit ORT.

Inhalt

ONNX Runtime installieren

Es gibt zwei Python-Pakete für ONNX Runtime. Nur eines dieser Pakete sollte zu einem Zeitpunkt in jeder Umgebung installiert sein. Das GPU-Paket umfasst den Großteil der CPU-Funktionalität.

ONNX Runtime CPU installieren

Verwenden Sie das CPU-Paket, wenn Sie auf ARM®-basierten CPUs und/oder macOS laufen.

pip install onnxruntime

ONNX Runtime GPU (CUDA 12.x) installieren

Die Standard-CUDA-Version für ORT ist 12.x.

pip install onnxruntime-gpu

ONNX Runtime GPU (CUDA 11.8) installieren

Für Cuda 11.8 verwenden Sie bitte die folgenden Anweisungen, um aus dem ORT Azure Devops Feed zu installieren.

pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-11/pypi/simple/

ONNX für den Modell-Export installieren

## ONNX is built into PyTorch
pip install torch
## tensorflow
pip install tf2onnx
## sklearn
pip install skl2onnx

Schnellstart-Beispiele für PyTorch, TensorFlow und SciKit Learn

Trainieren Sie ein Modell mit Ihrem bevorzugten Framework, exportieren Sie es im ONNX-Format und inferenzieren Sie es in jeder unterstützten ONNX Runtime-Sprache!

PyTorch CV

In diesem Beispiel erfahren Sie, wie Sie ein PyTorch CV-Modell in das ONNX-Format exportieren und dann mit ORT inferenzieren. Der Code zur Erstellung des Modells stammt aus dem PyTorch Fundamentals Lernpfad auf Microsoft Learn.

  • Exportieren des Modells mit torch.onnx.export
torch.onnx.export(model,                                # model being run
                  torch.randn(1, 28, 28).to(device),    # model input (or a tuple for multiple inputs)
                  "fashion_mnist_model.onnx",           # where to save the model (can be a file or file-like object)
                  input_names = ['input'],              # the model's input names
                  output_names = ['output'])            # the model's output names
  • Laden des ONNX-Modells mit onnx.load
    import onnx
    onnx_model = onnx.load("fashion_mnist_model.onnx")
    onnx.checker.check_model(onnx_model)
    
  • Erstellen einer Inferenzsitzung mit ort.InferenceSession
import onnxruntime as ort
import numpy as np
x, y = test_data[0][0], test_data[0][1]
ort_sess = ort.InferenceSession('fashion_mnist_model.onnx')
outputs = ort_sess.run(None, {'input': x.numpy()})

# Print Result
predicted, actual = classes[outputs[0][0].argmax(0)], classes[y]
print(f'Predicted: "{predicted}", Actual: "{actual}"')

PyTorch NLP

In diesem Beispiel erfahren Sie, wie Sie ein PyTorch NLP-Modell in das ONNX-Format exportieren und dann mit ORT inferenzieren. Der Code zur Erstellung des AG News-Modells stammt aus diesem PyTorch-Tutorial.

  • Verarbeiten von Text und Erstellen der Beispiel-Dateneingabe und Offsets für den Export.
    import torch
    text = "Text from the news article"
    text = torch.tensor(text_pipeline(text))
    offsets = torch.tensor([0])
    
  • Modell exportieren
    # Export the model
    torch.onnx.export(model,                     # model being run
                    (text, offsets),           # model input (or a tuple for multiple inputs)
                    "ag_news_model.onnx",      # where to save the model (can be a file or file-like object)
                    export_params=True,        # store the trained parameter weights inside the model file
                    opset_version=10,          # the ONNX version to export the model to
                    do_constant_folding=True,  # whether to execute constant folding for optimization
                    input_names = ['input', 'offsets'],   # the model's input names
                    output_names = ['output'], # the model's output names
                    dynamic_axes={'input' : {0 : 'batch_size'},    # variable length axes
                                  'output' : {0 : 'batch_size'}})
    
  • Laden des Modells mit onnx.load
    import onnx
    onnx_model = onnx.load("ag_news_model.onnx")
    onnx.checker.check_model(onnx_model)
    
  • Erstellen einer Inferenzsitzung mit ort.InferenceSession
    import onnxruntime as ort
    import numpy as np
    ort_sess = ort.InferenceSession('ag_news_model.onnx')
    outputs = ort_sess.run(None, {'input': text.numpy(),
                                'offsets':  torch.tensor([0]).numpy()})
    # Print Result
    result = outputs[0].argmax(axis=1)+1
    print("This is a %s news" %ag_news_label[result[0]])
    

TensorFlow CV

In diesem Beispiel erfahren Sie, wie Sie ein TensorFlow CV-Modell in das ONNX-Format exportieren und dann mit ORT inferenzieren. Das verwendete Modell stammt aus diesem GitHub Notebook für Keras resnet50.

  • Vorab trainiertes Modell abrufen
import os
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
import onnxruntime

model = ResNet50(weights='imagenet')

preds = model.predict(x)
print('Keras Predicted:', decode_predictions(preds, top=3)[0])
model.save(os.path.join("/tmp", model.name))
  • Konvertieren des Modells nach ONNX und Exportieren
import tf2onnx
import onnxruntime as rt

spec = (tf.TensorSpec((None, 224, 224, 3), tf.float32, name="input"),)
output_path = model.name + ".onnx"

model_proto, _ = tf2onnx.convert.from_keras(model, input_signature=spec, opset=13, output_path=output_path)
output_names = [n.name for n in model_proto.graph.output]
  • Erstellen einer Inferenzsitzung mit rt.InferenceSession
providers = ['CPUExecutionProvider']
m = rt.InferenceSession(output_path, providers=providers)
onnx_pred = m.run(output_names, {"input": x})

print('ONNX Predicted:', decode_predictions(onnx_pred[0], top=3)[0])

SciKit Learn CV

In diesem Beispiel erfahren Sie, wie Sie ein SciKit Learn CV-Modell in das ONNX-Format exportieren und dann mit ORT inferenzieren. Wir verwenden den berühmten Iris-Datensatz.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y)

from sklearn.linear_model import LogisticRegression
clr = LogisticRegression()
clr.fit(X_train, y_train)
print(clr)

LogisticRegression()
  • Konvertieren oder Exportieren des Modells in das ONNX-Format

from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

initial_type = [('float_input', FloatTensorType([None, 4]))]
onx = convert_sklearn(clr, initial_types=initial_type)
with open("logreg_iris.onnx", "wb") as f:
    f.write(onx.SerializeToString())
  • Laden und Ausführen des Modells mit ONNX Runtime. Wir verwenden ONNX Runtime, um die Vorhersagen für dieses Machine-Learning-Modell zu berechnen.

import numpy
import onnxruntime as rt

sess = rt.InferenceSession("logreg_iris.onnx")
input_name = sess.get_inputs()[0].name
pred_onx = sess.run(None, {input_name: X_test.astype(numpy.float32)})[0]
print(pred_onx)

OUTPUT:
 [0 1 0 0 1 2 2 0 0 2 1 0 2 2 1 1 2 2 2 0 2 2 1 2 1 1 1 0 2 1 1 1 1 0 1 0 0
  1]
  • Vorhergesagte Klasse erhalten

Der Code kann geändert werden, um eine bestimmte Ausgabe zu erhalten, indem ihr Name in einer Liste angegeben wird.

import numpy
import onnxruntime as rt

sess = rt.InferenceSession("logreg_iris.onnx")
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
pred_onx = sess.run(
    [label_name], {input_name: X_test.astype(numpy.float32)})[0]
print(pred_onx)

Python API Referenzdokumentation

Zur ORT Python API Dokumentation

Builds

Wenn Sie pip verwenden, führen Sie pip install --upgrade pip aus, bevor Sie herunterladen.

Artefakt Beschreibung Unterstützte Plattformen
onnxruntime CPU (Release) Windows (x64), Linux (x64, ARM64), Mac (X64),
nightly CPU (Entwicklung) Wie oben
onnxruntime-gpu GPU (Release) Windows (x64), Linux (x64, ARM64)
onnxruntime-gpu für CUDA 11.* GPU (Entwicklung) Windows (x64), Linux (x64, ARM64)
onnxruntime-gpu für CUDA 12.* GPU (Entwicklung) Windows (x64), Linux (x64, ARM64)

Beispiel zur Installation von onnxruntime-gpu für CUDA 11.*

python -m pip install onnxruntime-gpu --extra-index-url=https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ort-cuda-11-nightly/pypi/simple/

Beispiel zur Installation von onnxruntime-gpu für CUDA 12.*

python -m pip install onnxruntime-gpu --pre --extra-index-url=https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/

Informationen zu Python-Compilerversionen finden Sie auf dieser Seite.

Mehr erfahren