ONNX e Azure Machine Learning

Informazioni su come l'uso di Open Neural Network Exchange (ONNX) consente di ottimizzare l'inferenza del modello di Machine Learning. L'inferenza o l'assegnazione dei punteggi del modello è il processo di utilizzo di un modello distribuito per generare stime sui dati di produzione.

L'ottimizzazione dei modelli di Machine Learning per l'inferenza richiede di ottimizzare il modello e la libreria di inferenza per sfruttare al meglio le funzionalità hardware. Questa attività diventa complessa se si vogliono ottenere prestazioni ottimali su diversi tipi di piattaforme, ad esempio cloud o perimetrali, CPU o GPU e così via, poiché ogni piattaforma ha funzionalità e caratteristiche diverse. La complessità aumenta se si hanno modelli di vari framework che devono essere eseguiti su piattaforme diverse. Può richiedere molto tempo per ottimizzare tutte le diverse combinazioni di framework e hardware. Pertanto, una soluzione utile consiste nel eseguire il training del modello una volta nel framework preferito e quindi eseguirlo ovunque nel cloud o nel perimetro. Questa soluzione è la posizione in cui è disponibile ONNX.

Che cos'è ONNX?

Microsoft e una community di partner hanno creato ONNX come standard aperto per rappresentare i modelli di Machine Learning. I modelli di molti framework , tra cui TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet e MATLAB possono essere esportati o convertiti nel formato ONNX standard. Una volta che i modelli sono in formato ONNX, possono essere eseguiti su diverse piattaforme e dispositivi.

ONNX Runtime è un motore di inferenza ad alte prestazioni per la distribuzione di modelli ONNX nell'ambiente di produzione. È ottimizzato per cloud e edge e funziona in Linux, Windows e Mac. Mentre ONNX è scritto in C++, include anche API C, Python, C#, Java e JavaScript (Node.js) per l'utilizzo in molti ambienti. ONNX Runtime supporta sia reti neurali profonde (DNN) che modelli di Machine Learning tradizionali e si integra con acceleratori su hardware diverso, ad esempio TensorRT su GPU Nvidia, OpenVINO su processori Intel e DirectML in Windows. Usando ONNX Runtime, è possibile trarre vantaggio dalle ampie ottimizzazioni di livello di produzione, dai test e dai miglioramenti continui.

Il runtime ONNX viene usato in servizi Microsoft su larga scala, ad esempio Bing, Office e Azure AI. Anche se i miglioramenti delle prestazioni dipendono da molti fattori, questi servizi Microsoft segnalano un miglioramento medio delle prestazioni 2 volte sulla CPU. Oltre ai servizi di Azure Machine Learning, ONNX Runtime viene eseguito anche in altri prodotti che supportano carichi di lavoro di Machine Learning, tra cui:

Diagramma di flusso ONNX che mostra training, convertitori e distribuzione.

Come ottenere modelli ONNX

È possibile ottenere modelli ONNX in diversi modi:

Molti modelli, tra cui la classificazione delle immagini, il rilevamento degli oggetti e i modelli di elaborazione del testo possono essere rappresentati come modelli ONNX. Se si verifica un problema con un modello che non può essere convertito correttamente, segnalare un problema di GitHub nel repository del convertitore usato. È possibile continuare a usare il formato del modello esistente fino a quando il problema non viene risolto.

Distribuzione del modello ONNX in Azure

Con Azure Machine Learning è possibile distribuire, gestire e monitorare i modelli ONNX. Usando il flusso di lavoro di distribuzione MLOps standard e IL runtime ONNX, è possibile creare un endpoint REST ospitato nel cloud. Per esempi pratici, vedere questi notebook di Jupyter.

Installazione e uso di ONNX Runtime con Python

I pacchetti Python per ONNX Runtime sono disponibili in PyPi.org (CPU e GPU). Assicurarsi di esaminare i requisiti di sistema prima dell'installazione.

Per installare ONNX Runtime per Python, usare uno dei comandi seguenti:

pip install onnxruntime          # CPU build
pip install onnxruntime-gpu   # GPU build

Per chiamare ONNX Runtime nello script di Python, usare:

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

La documentazione che accompagna il modello in genere indica gli input e gli output per usare il modello. È anche possibile usare uno strumento di visualizzazione, ad esempio Netron per visualizzare il modello. ONNX Runtime consente anche di eseguire query sui metadati, gli input e gli output del modello come indicato di seguito:

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

Per eseguire l'inferenza nel modello, usare run e passare l'elenco di output che si desidera restituire (o lasciare vuoto l'elenco se si desidera tutti) e una mappa dei valori di input. Il risultato è un elenco degli output.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

Per informazioni di riferimento complete sull'API di Python, vedere la documentazione di riferimento su ONNX Runtime.

Esempi

Altre informazioni su ONNX o contribuire al progetto:

Altre informazioni su ONNX Runtime o contribuire al progetto: