ONNX e Azure Machine Learning
Questo articolo descrive in che modo Open Neural Network Exchange (ONNX) consente di ottimizzare l'inferenza dei modelli 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 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 nel eseguire il training del modello una volta nel framework preferito e quindi esportarlo o convertirlo in ONNX in modo che possa essere eseguito ovunque nel cloud o nel perimetro. 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 nel formato ONNX in varie piattaforme e dispositivi.
Questo diagramma di flusso ONNX mostra i framework e le opzioni di distribuzione disponibili.
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 e edge e funziona in Linux, Windows e macOS. ONNX è scritto in C++, ma include anche API C, Python, C#, Java e JavaScript (Node.js) da usare in tali 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 da ampie ottimizzazioni, test e miglioramenti continui di livello di produzione.
Le 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 segnalano un miglioramento medio delle prestazioni 2 volte sulla CPU usando ONNX. Il runtime ONNX viene eseguito in Azure Machine Learning e in altri prodotti Microsoft che supportano carichi di lavoro di Machine Learning, tra cui:
- Windows. Il runtime ONNX è 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 usare ONNX per eseguire l'assegnazione dei punteggi nativa ai 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 funzionalità di Machine Learning automatizzate.
- Convertire un modello esistente da un altro formato a ONNX. Per altre informazioni, vedere Esercitazioni ONNX.
- 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.
È possibile rappresentare molti modelli come ONNX, tra cui la classificazione delle immagini, il rilevamento degli oggetti e i modelli di elaborazione del testo. Se non è possibile convertire correttamente il modello, segnalare un problema di GitHub nel repository del convertitore usato.
Distribuzione del modello ONNX in Azure
È possibile distribuire, 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 CPU e RUNTIME ONNX 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 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 e una mappa dei valori di input. Lasciare vuoto l'elenco di output se si desidera che 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 complete sull'API di runtime ONNX, vedere la documentazione dell'API Python.