Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive in che modo Open Neural Network Exchange (ONNX) consente di ottimizzare l'inferenza dei modelli di Machine Learning. Inferenza, o valutazione del modello, è il processo tramite cui si utilizza un modello implementato per generare previsioni sui dati di produzione.
L'ottimizzazione dei modelli di apprendimento automatico 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 piattaforme diverse, ad esempio cloud, edge, CPU o GPU, perché ogni piattaforma ha funzionalità e caratteristiche diverse. La complessità aumenta se è necessario eseguire modelli da diversi framework su piattaforme diverse. Ottimizzare tutte le diverse combinazioni di framework e hardware può essere dispendioso in termini di tempo.
Una soluzione utile consiste nell'eseguire il training del modello una sola volta nel framework preferito, e quindi esportarlo o convertirlo in ONNX in modo che possa essere eseguito ovunque in cloud o edge. Microsoft e una community di partner hanno creato ONNX come standard aperto per rappresentare i modelli di Machine Learning. È possibile esportare o convertire modelli da molti framework al formato ONNX standard. I framework supportati includono TensorFlow, PyTorch, Scikit-learn, Keras, Chainer, MXNet e MATLAB. È possibile eseguire modelli in formato ONNX su diverse piattaforme e dispositivi.
Questo diagramma di flusso ONNX mostra i framework disponibili e le opzioni di distribuzione.
Runtime ONNX
ONNX Runtime è un motore di inferenza ad alte prestazioni per la distribuzione di modelli ONNX nell'ambiente di produzione. ONNX Runtime è ottimizzato per cloud ed edge e funziona in Linux, Windows e macOS. ONNX è scritto in C++, ma include anche API C, Python, C#, Java e JavaScript (Node.js) che è possibile usare in tali ambienti.
ONNX Runtime supporta sia reti neurali profonde (DNN) che modelli di Machine Learning tradizionali. 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 da ottimizzazioni, test e miglioramenti continui di livello di produzione.
I servizi Microsoft su larga scala, ad esempio Bing, Office e Azure AI usano ONNX Runtime. Anche se i miglioramenti delle prestazioni dipendono da molti fattori, questi servizi Microsoft ottengono in media un miglioramento delle prestazioni 2 volte sulla CPU perché usano ONNX. ONNX Runtime viene eseguito in Azure Machine Learning e in altri prodotti Microsoft che supportano carichi di lavoro di apprendimento automatico, tra cui:
- Windows. ONNX Runtime è integrato in Windows come parte di Windows Machine Learning ed è in esecuzione su centinaia di milioni di dispositivi.
- AZURE SQL. SQL Edge di Azure e Istanza gestita di SQL di Azure usano ONNX per eseguire il punteggio nativo sui dati.
- ML.NET. Per un esempio, vedere Esercitazione: Rilevare oggetti usando ONNX in ML.NET.
Modi per ottenere modelli ONNX
È possibile ottenere modelli ONNX in diversi modi:
- Eseguire il training di un nuovo modello ONNX in Azure Machine Learning o usare le funzionalità di Machine Learning automatizzato.
- Convertire un modello esistente da un altro formato a ONNX. Per altre informazioni, vedere Esercitazioni su ONNX.
- Ottenere un modello ONNX di cui è stato precedentemente eseguito il training dallo zoo dei modelli ONNX.
- Generare un modello ONNX personalizzato dal servizio Visione personalizzata di Intelligenza artificiale di Azure.
È possibile rappresentare molti modelli come ONNX, inclusi la classificazione immagini, il rilevamento oggetti e i modelli di elaborazione del testo. Se non è possibile convertire correttamente il modello, inserire un problema di GitHub nel repository del convertitore usato.
Distribuzione del modello ONNX in Azure
È possibile implementare, gestire e monitorare i modelli ONNX in Azure Machine Learning. Usando un flusso di lavoro di distribuzione MLOps standard con ONNX Runtime, è possibile creare un endpoint REST ospitato nel cloud.
Pacchetti Python per ONNX Runtime
I pacchetti Python per il runtime ONNX della CPU e della GPU sono disponibili in PyPi.org. 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 Python, usare il codice seguente:
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 di eseguire query su metadati, input e 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 sul modello, usare run e passare all'elenco di output da restituire e a una mappa dei valori di input. Lasciare vuoto l'elenco di output se si vogliono tutti gli output. 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 API complete per runtime ONNX, vedere la documentazione dell'API Python.