Distribuzione dei modelli convertiti in formato ONNX
È possibile distribuire e inferire modelli di apprendimento automatico da PyTorch
o TensorFlow
che sono salvati in diversi formati e convertiti nel formato Open Neural Network Exchange
(ONNX
). ONNX
è un formato open source per la rappresentazione di modelli di deep learning. Gli sviluppatori possono utilizzare il formato ONNX
per addestrare i loro modelli in un unico framework, come PyTorch
o TensorFlow
, e poi esportarlo per eseguirlo in un altro ambiente con caratteristiche di performance diverse. Il formato " ONNX
" fornisce una soluzione potente per convertire un modello di apprendimento automatico in " ONNX
" ed eseguire inferenze utilizzando il runtime " ONNX
".
Vantaggi della conversione dei modelli in un runtime dell' ONNX
La conversione di un modello in un runtime dell ONNX
e offre diversi vantaggi, soprattutto nel contesto delle applicazioni di machine learning e deep learning. Alcuni dei vantaggi della conversione dei modelli in un runtime dell ONNX
:
Compatibilità multipiattaforma :
ONNX
fornisce un formato standard per rappresentare i modelli di apprendimento automatico, che rende più facile distribuire i modelli su diversi framework come PyTorch o Tensorflow. È possibile addestrare i modelli in un framework e distribuirli in un altro framework che supporti l'ambiente di esecuzionONNX
.Prestazioni migliorate : l'esecuzione dell'
ONNX
e ottimizza i modelli per l'inferenza applicando varie ottimizzazioni specifiche per hardware e software, come le ottimizzazioni grafiche. Inoltre, supporta l'esecuzione su hardware diversi, come CPU e GPU, garantendo un utilizzo efficiente delle risorse.Interoperabilità :
ONNX
fornisce un modo per addestrare modelli, come PyTorch, TensorFlow, e scikit-learn in un unico framework e poi esportarli per eseguirli in un altro ambiente, il che semplifica i flussi di lavoro. Abbatte le barriere tra i diversi framework di deep learning, consentendo agli sviluppatori di sfruttare i punti di forza delle diverse librerie senza rimanere bloccati in un unico ecosistema.
Quadri supportati per la conversione
È possibile convertire i modelli di apprendimento automatico che utilizzano i seguenti framework in formato ONNX
:
PyTorch
TensorFlow
CatBoost
LightGBM
XGBoost
Scikit-learn
Conversione dei modelli dell' PyTorch
, in formato dell' ONNX
Segui questa procedura per convertire il tuo modello in formato PyTorch
nel formato ONNX
:
Importare le librerie : Iniziare importando le librerie essenziali, come
onnxruntime
per l'esecuzione del modello,torch
per le funzionalità di PyTorch e altre librerie necessarie per l'applicazione.Creare o scaricare un modello di
PyTorch
: È possibile creare un modello diPyTorch
utilizzando il proprio set di dati o utilizzare modelli forniti da archivi di modelli open source esterni come Hugging Face.Convertire il modello
PyTorch
in formato ONNX : Per convertire il modelloPyTorch
in formato ONNX:a. Preparare il modello : assicurarsi che il modello dell'
PyTorch
e sia in modalità di valutazione utilizzando la funzionmodel.eval()
. Potrebbe essere necessario un tensore di ingresso fittizio per adattarlo alla forma del modello.b. Esportare il modello : Utilizzare la funzione
torch.onnx.export
per convertire il modello in formato ONNX.Verificare la conversione : Dopo aver convertito il modello, verificare che il modello funzioni come previsto utilizzando la libreria
onnx
.
Conversione dei modelli dell' TensorFlow
, in formato dell' ONNX
Segui questa procedura per convertire il tuo modello TensorFlow
nel formato ONNX:
Importare librerie : iniziare importando le librerie essenziali, come
tf2onnx
per facilitare la conversione dei modelliTensorFlow
in ONNX, e altre librerie necessarie per l'applicazione.Scaricare il modello di
TensorFlow
: È necessario scaricare il modello diTensorFlow
creato esternamente e i dati utilizzati per addestrare il modello.TensorFlow
Convertire un modello in formato ONNX : utilizzare il comandotf2onnx.convert
per convertire un modelloTensorFlow
creato in formatoSavedModel
in formatoONNX
. Se si desidera convertire un modello diTensorFlow Lite
, utilizzare il flag--tflite
invece del flag--saved-model
.
Keras
i modelli e le funzioni di tf
possono essere convertiti direttamente in Python utilizzando le funzioni tf2onnx.convert.from_keras
o tf2onnx.convert.from_function
.
- Verificare la conversione : Dopo aver convertito il modello, verificare che il modello funzioni come previsto utilizzando la libreria
onnx
.
Conversione dei modelli di CatBoost
e in formato ONNX
Segui questa procedura per convertire il tuo modello addestrato in ONNX ( CatBoost
):
Importazione delle librerie : iniziare importando le librerie essenziali, come
onnxruntime
per l'esecuzione del modello,catboost
per le funzionalità diCatBoost
, e altre librerie necessarie per l'applicazione.Creare o scaricare un modello di
CatBoost
: È possibile creare un modello diCatBoost
utilizzando il proprio set di dati o utilizzare modelli forniti da archivi di modelli open source esterni come Hugging Face.Convertire il modello
CatBoost
in formatoONNX
: Per convertire il modelloCatBoost
in formatoONNX
:a. Caricare il modello
CatBoost
: È possibile caricare il modelloCatBoost
utilizzando librerie comepickle
:catboost_model = pickle.load(file)
b. Esportare il modello : utilizzare la funzione "
catboost_model.save_model
" con il parametro di formato impostato su "onnx
" per convertire il modello nel formato "ONNX
".catboost_model.save_model( onnx_model_name, format="onnx", export_parameters={ 'onnx_domain': 'ai.catboost', 'onnx_model_version': 1, 'onnx_doc_string': 'test model for Regressor', 'onnx_graph_name': 'CatBoostModel_for_Regression' } )
Verificare la conversione : Dopo aver convertito il modello, verificare che il modello funzioni come previsto utilizzando la libreria
onnx
.
Conversione dei modelli di LightGBM
e in formato ONNX
Segui questa procedura per convertire il tuo modello in formato LightGBM
nel formato ONNX
:
Importare le librerie : iniziare importando le librerie essenziali, come
onnxruntime
per l'esecuzione del modello,lightgbm
per le funzionalità diLightGBM
, eonnxmltools
per la conversione e altre librerie necessarie per l'applicazione.Creare o scaricare un modello di
LightGBM
: È possibile creare un modello diLightGBM
utilizzando il proprio set di dati o utilizzare modelli forniti da archivi di modelli open source esterni come Hugging Face.Convertire il modello
LightGBM
in formatoONNX
: Per convertire il modelloLightGBM
in formatoONNX
:a. Caricare il modello
LightGBM
: È possibile caricare il modelloLightGBM
utilizzando librerie comepickle
:lgbm_model = pickle.load(file)
b. Esportare il modello : utilizzare la funzione "
convert_lightgbm
" per convertire il modello in formato "ONNX
".from onnxmltools import convert_lightgbm from skl2onnx.common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types) onnx_model_filename = "lgbm_model.onnx" save_model(onnx_model, onnx_model_filename)
Suggerimento:Per la risoluzione dei problemi di conversione dei modelli di
LightGBM
in formatoONNX
, vedere Risoluzione dei problemi di Runtime di watsonx.ai.Verificare la conversione : Dopo aver convertito il modello, verificare che il modello funzioni come previsto utilizzando la libreria
onnx
.
Conversione dei modelli dell' XGBoost
, in formato dell' ONNX
Segui questa procedura per convertire il tuo modello in formato XGBoost
nel formato ONNX
:
Importazione delle librerie : iniziare importando le librerie essenziali, come
onnxruntime
per l'esecuzione del modello,xgboost
per le funzionalità diXGBoost
, e altre librerie necessarie per l'applicazione.Creare o scaricare un modello di
XGBoost
: È possibile creare un modello diXGBoost
utilizzando il proprio set di dati o utilizzare modelli forniti da archivi di modelli open source esterni come Hugging Face.Convertire il modello
XGBoost
in formato ONNX : Per convertire il modelloXGBoost
in formato ONNX:a. Caricare il modello
XGboost
: È possibile caricare il modelloXGBoost
utilizzando librerie comepickle
:xgboost_model = pickle.load(file)
b. Esportare il modello : utilizzare la funzione "
convert_xgboost
" per convertire il modello in formato "ONNX
".from onnxmltools import convert_xgboost from onnxconverter_common.data_types import FloatTensorType from onnxmltools.utils import save_model initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))] onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types) onnx_model_filename = "xgboost_onnx_model.onnx" save_model(onnx_model, onnx_model_filename)
Verifica della conversione : dopo aver convertito il modello, verificare che funzioni come previsto utilizzando la libreria onnx.
Conversione dei modelli dell' scikit-learn
, in formato dell' ONNX
Segui questa procedura per convertire il tuo modello in formato scikit-learn
nel formato ONNX
:
Importare le librerie : iniziare importando le librerie essenziali, come
onnxruntime
per l'esecuzione del modello,sklearn
per le funzionalità discikit-learn
,skl2onnx
per la conversione e altre librerie necessarie per l'applicazione.Creare o scaricare un modello di
scikit-learn
: È possibile creare un modello discikit-learn
utilizzando il proprio set di dati o utilizzare modelli forniti da archivi di modelli open source esterni come Hugging Face.Convertire il modello
scikit-learn
in formato ONNX : Per convertire il modelloscikit-learn
in formatoONNX
:a. Caricare il modello
scikit-learn
: È possibile caricare il modelloscikit-learn
utilizzando librerie comepickle
:sklearn_model = pickle.load(file)
b. Esportare il modello : utilizzare la funzione "
to_onnx
" per convertire il modello in formato "ONNX
".from skl2onnx import to_onnx onnx_model = to_onnx(sklearn_model, X, target_opset=19) with open("sklearn_model.onnx", "wb") as f: f.write(onnx_model.SerializeToString())
Verificare la conversione : Dopo aver convertito il modello, verificare che il modello funzioni come previsto utilizzando la libreria
onnx
.
Ulteriori considerazioni
Ecco alcune considerazioni aggiuntive per convertire i vostri modelli in form ONNX
:
Assi dinamici : Gli assi dinamici possono essere utilizzati da un modello per gestire forme di input variabili, come le dimensioni dinamiche dei lotti o le lunghezze delle sequenze, utili per i modelli utilizzati in applicazioni in cui le dimensioni di input possono variare. Utilizzare gli assi dinamici se il modello gestisce dimensioni di input variabili, come la dimensione dinamica del batch o la lunghezza della sequenza.
Gli assi dinamici riducono anche l'overhead di memoria, in quanto possono essere utilizzati con più ingressi e uscite per adattarsi dinamicamente senza riesportare il modello. È possibile specificare gli assi dinamici durante l'esportazione del modello in
PyTorch
oTensorFlow
.Versione OPSET: la versione OPSET in
ONNX
determina l'insieme delle operazioni e le relative specifiche supportate dal modello. È un fattore critico durante la conversione e la distribuzione del modello.Diversi tempi di esecuzione dell'
ONNX
e e framework supportano versioni specifiche dell' e. Le vecchie versioni di opset possono essere prive di funzioni o ottimizzazioni presenti nelle versioni più recenti. L'incompatibilità tra la versione opset di un modello e il runtime dell'ONNX
e può causare errori durante l'inferenza. È necessario assicurarsi che la versione di Opset dell'ONNX
e scelta sia supportata dal proprio runtime di destinazione.
Distribuzione di modelli convertiti in form ONNX
Utilizza le specifiche del software " onnxruntime_opset_19
" per distribuire il tuo modello di apprendimento automatico convertito in formato " ONNX
". È necessario specificare le specifiche del software e il tipo di modello quando si memorizza il modello nell'archivio di esecuzione di watsonx.ai. Per ulteriori informazioni, vedere Specifiche software supportate.
Per distribuire modelli convertiti in form ONNX
e dall'interfaccia utente, procedere come segue:
Nello spazio di distribuzione, andare alla scheda Assets (Risorse).
Individuare il modello nell'elenco delle risorse, fare clic sull'icona Menu e selezionare Deploy.
Selezionate il tipo di distribuzione per il vostro modello. Scegliete tra le opzioni di distribuzione online e batch.
Immettere un nome per l'installazione client e, facoltativamente, un nome di servizio, una descrizione e dei tag.
Nota:- Usare il campo Nome dell'installazione client per specificare un nome per l'installazione client invece dell'ID dell'installazione client.
- Il nome del servizio deve essere unico all'interno dello spazio dei nomi.
- Il nome del servizio deve contenere solo questi caratteri: a-z,0-9,_] e deve essere lungo al massimo 36 caratteri.
- Nei flussi di lavoro in cui l' foundation model e personalizzata viene utilizzata periodicamente, è consigliabile assegnare al modello lo stesso nome di servizio ogni volta che viene distribuito. In questo modo, dopo aver cancellato e poi distribuito nuovamente il modello, si può continuare a usare lo stesso endpoint nel codice.
Selezionare una specifica hardware per il proprio modello.
Selezionate una configurazione e una specifica software per il vostro modello.
Fare clic su Crea.
Test del modello
Seguire questi passaggi per testare i modelli distribuiti e convertiti in formato ONNX:
- Nello spazio di installazione client, aprire la scheda Deployments e fare clic sul nome dell'installazione client.
- Fare clic sulla scheda Test per immettere un testo di richiesta e ottenere una risposta dall'asset distribuito.
- Immettere i dati di prova in uno dei seguenti formati, a seconda del tipo di risorsa distribuita:
- Testo : Immettere i dati di input del testo per generare un blocco di testo come output.
- JSON : inserire i dati di input JSON per generare l'output in formato JSON.
- Fare clic su Genera per ottenere risultati basati sulla richiesta.
Notebook di esempio
I seguenti esempi di notebook mostrano come distribuire modelli di apprendimento automatico convertiti da PyTorch
o TensorFlow
al formato ONNX
utilizzando la libreria client Python :
Blocco appunti | Framework | Descrizione |
---|---|---|
Convertire la rete neurale ONNX da assi fissi ad assi dinamici e utilizzarla con watsonx | ONNX | Impostare l'ambiente Creare ed esportare il modello ONNX di base Convertire il modello da assi fissi ad assi dinamici Persistere il modello ONNX convertito Distribuire e valutare il modello ONNX Pulire Riepilogo e passi successivi |
Utilizzare il modello ONNX convertito da PyTorch con watsonx | PyTorch, ONNX | Creare il modello PyTorch con il set di dati. Convertire il modello PyTorch in formato ONNX Persistere il modello convertito nel repository Watson Machine Learning. Distribuire il modello per la valutazione online utilizzando la libreria client. Punteggio dei record di campione utilizzando la libreria dei clienti. |
Usare il modello ONNX convertito da TensorFlow per riconoscere le cifre scritte a mano con watsonx | Tensorflow, ONNX | Scaricare un modello TensorFlow addestrato esternamente con un set di dati. Convertire il modello TensorFlow in formato ONNX Persistere il modello convertito nel repository Watson Machine Learning. Distribuire il modello per la valutazione online utilizzando la libreria client. Punteggio dei record di campione utilizzando la libreria dei clienti. |
Utilizzare il modello ONNX convertito da CatBoost | CatBoost, ONNX | Modello addestrato CatBoost. Convertire il modello CatBoost in formato ONNX. Persistere il modello convertito nel repository Watson Machine Learning. Distribuire il modello per la valutazione online utilizzando la libreria client. Punteggio dei record di campione utilizzando la libreria dei clienti. |
Utilizzare il modello ONNX convertito da LightGBM | LightGBM, ONNX | Addestrare un modello LightGBM Convertire il modello LightGBM in formato ONNX Persistere il modello convertito nel repository di runtime watsonx.ai Distribuire il modello per lo scoring online utilizzando la libreria client Assegnare il punteggio ai record di esempio utilizzando la libreria client |
Usa il modello ONNX convertito da XGBoost con ibm- watsonx -ai | XGBoost, ONNX | Addestrare un modello XGBoost. Convertire il modello XGBoost nel formato ONNX. Conservare il modello convertito nell'archivio dell' watsonx.ai. Distribuire il modello per il punteggio online utilizzando l'istanza APIClient. Registra i record di esempio utilizzando l'istanza APIClient. |
Usa il modello ONNX convertito da scikit-learn con ibm- watsonx -ai | Scikit-learn, ONNX | Train a scikit-learn model (Addestrare un modello scikit-learn) (Convertire il modello scikit-learn nativo in formato ONNX) (Eseguire la conversione per un modello scikit-learn personalizzato avvolto in una pipeline sklearn) (Persistere il modello convertito nel repository Runtime di watsonx.ai ) (Distribuire il modello per il punteggio online utilizzando la libreria client) (Punteggiare record campione utilizzando la libreria client) |
Argomento principale: Distribuzione di risorse di apprendimento automatico