ONNX e Azure Machine Learning
Informazioni su come l'uso di Open Neural Network Exchange (ONNX) consenta di ottimizzare l'inferenza del modello di Machine Learning. Inferenza o modello di assegnazione dei punteggi, è 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 l'ottimizzazione del modello e della 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 edge, CPU o GPU e così via, poiché ogni piattaforma presenta funzionalità e caratteristiche diverse. La complessità aumenta se si hanno modelli di vari framework che devono essere eseguiti su piattaforme diverse. Ottimizzare tutte le diverse combinazioni di framework e hardware può essere dispendioso in termini di tempo. Pertanto, una soluzione utile consiste nell'eseguire il training del modello una volta nel framework preferito e quindi eseguirlo ovunque nel cloud o nell'edge: in questa soluzione viene fornito ONNX.
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. Quando i modelli sono nel formato ONNX, possono essere eseguiti in varie 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. Nonostante ONNX sia scritto in C++, include anche API C, Python, C#, Java e JavaScript (Node.js) per l'uso in diversi ambienti. ONNX Runtime supporta modelli DNN e ML tradizionali e si integra con gli acceleratori su hardware diverso, ad esempio TensorRT in GPU NVidia, OpenVINO in processori Intel e DirectML in Windows. Usando ONNX Runtime, è possibile trarre vantaggio dalle ampie ottimizzazioni a livello di produzione, dai test e dai miglioramenti continui.
ONNX Runtime viene usato in servizi Microsoft su larga scala, ad esempio Bing, Office e Azure per intelligenza artificiale. Anche se i miglioramenti delle prestazioni dipendono da molti fattori, questi servizi Microsoft riportano un miglioramento medio di 2 volte sulle prestazioni della 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:
- Windows: il runtime è integrato in Windows come parte di Windows Machine Learning e viene eseguito su centinaia di milioni di dispositivi.
- Famiglia di prodotti Azure SQL: eseguire l'assegnazione dei punteggi nativi sui dati in SQL Edge di Azure e in Istanza gestita di SQL di Azure.
- ML.NET: eseguire modelli ONNX in ML.NET.
Come ottenere modelli ONNX
È possibile ottenere modelli ONNX in diversi modi:
- Eseguire il training di un nuovo modello ONNX in Azure Machine Learning (come descritto nella sezione esempi di questo articolo) o usando le funzionalità di Machine Learning automatizzate.
- Convertire un modello esistente da un altro formato a ONNX come riportato in queste esercitazioni.
- Ottenere un modello ONNX di cui è stato precedentemente eseguito il training dallo zoo dei modelli ONNX.
- Generare un modello personalizzato di ONNX dal servizio Visione personalizzata di Azure AI.
Molti modelli, tra cui la classificazione delle immagini, il rilevamento degli oggetti e l'elaborazione del testo, possono essere rappresentati come modelli ONNX. Se si verifica un problema relativo a un modello che non può essere convertito correttamente,inserire un problema su GitHub nel repository del convertitore usato. È possibile continuare a usare il formato di 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 propri modelli ONNX. Usando il flusso di lavoro di distribuzione MLOps standard e ONNX Runtime, è 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). Rivedere 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. Runtime ONNX consente inoltre di eseguire query su metadati del modello, input e output come segue:
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 inviare l'elenco di output da restituire (lasciare vuoto se si desiderano tutti gli elementi) 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
- Per informazioni su come eseguire i notebook, vedere l'articolo Esplorare Azure Machine Learning con notebook Jupyter.
- Per esempi che mostrano l'utilizzo di ONNX in altri linguaggi, vedere il GitHub di ONNX Runtime.
Contenuto correlato
Per altre informazioni su ONNX o per contribuire al progetto:
Per altre informazioni su ONNX Runtime o per contribuire al progetto: