Per eseguire il deployment dei modelli addestrati in AI Platform Prediction e utilizzarli per fornire previsioni, devi prima esportarli nel formato SaveModel TensorFlow.
Questa pagina illustra alcuni aspetti importanti da considerare durante la creazione di saveModel. Per informazioni più dettagliate sull'esportazione in un SaveModel, leggi la guida di TensorFlow a savedModel e la guida di TensorFlow al salvataggio dei modelli Keras. Per maggiori dettagli su come eseguire il deployment del modello savedModel in AI Platform Prediction per fornire previsioni, leggi la guida al deployment dei modelli. Per informazioni generali sul processo di previsione, consulta la pagina della panoramica delle previsioni.
Routine di previsione personalizzate
In alternativa al deployment di un SaveModel, puoi anche creare ed eseguire il deployment di una routine di previsione personalizzata. Una routine di previsione personalizzata può combinare un saveModel (o un modello addestrato salvato in modo diverso) con altri artefatti di addestramento e il codice Python che fornisci per personalizzare il modo in cui AI Platform Prediction gestisce le richieste di previsione. Questa flessibilità può essere usata ad esempio per pre-elaborare l'input di previsione prima che il modello faccia una previsione.
Per saperne di più, leggi la guida alle routine di previsione personalizzate.
Comprensione dei grafici di addestramento e di pubblicazione
Dopo aver addestrato il modello e averlo esportato come SaveModel, devi seguire alcuni passaggi importanti prima che tu sia pronto per ottenere previsioni.
Ci sono alcune differenze fondamentali tra un grafico di addestramento e un grafico di pubblicazione. I grafici di addestramento contengono funzionalità non appropriate per la pubblicazione, ad esempio:
- lettori di file
- code di input
- strati di abbandono
- funzione di perdita
- ottimizzatori
Poiché il processo di pubblicazione delle previsioni ha esigenze diverse rispetto a quello di addestramento, è consigliabile esportare un grafico separato appositamente per la pubblicazione delle previsioni.
Informazioni su SaveModel
SalvatoModel è il formato consigliato da TensorFlow per il salvataggio dei modelli ed è il formato richiesto per eseguire il deployment di modelli TensorFlow addestrati su AI Platform Prediction. L'esportazione del modello addestrato come SaveModel salva il grafico di addestramento con i relativi asset, variabili e metadati in un formato che AI Platform Prediction può utilizzare e ripristinare per le previsioni.
Dopo aver esportato un savedModel, hai una directory salvataModel contenente quanto segue:
- i grafici di addestramento, salvati nei buffer di protocollo salvatiModel
- file esterni, chiamati asset
- che vengono salvate come file di checkpoint
Quando esegui il deployment di SavingModel in AI Platform Prediction, devi includere l'intera directory savedModel, non solo il file del buffer di protocollo SaveModel contenente il grafico e i relativi metadati. Questo file in genere ha un'estensione
.pb
o .pbtxt
.
Il modello SaveModel consente di salvare più versioni di un grafico che condividono gli stessi asset e variabili (o punti di controllo). Ad esempio, potresti voler sviluppare due versioni dello stesso grafico: una da eseguire sulle CPU e un'altra da eseguire sulle GPU.
Scopri di più sulla struttura di una directory savedModel.
Esportazione da varie API TensorFlow
Esistono diversi modi per esportare SaveModel dal codice di addestramento TensorFlow. Di seguito sono descritti i vari modi in cui è possibile usare le varie API TensorFlow:
- Se hai utilizzato Keras per l'addestramento, utilizza
tf.keras.Model.save
per esportare un saveModel - Se utilizzi uno strumento di stima per l'addestramento, utilizza
tf.estimator.Estimator.export_saved_model
per esportare un saveModel. - In caso contrario, utilizza
tf.saved_model.save
o usatf.saved_model.SavedModelBuilder
(tf.compat.v1.saved_model.Builder
in TensorFlow 2).
Compatibilità con AI Explanations
Se vuoi utilizzare AI Explanations con il tuo modello, scopri i requisiti aggiuntivi per SaveModel.
Controllare e regolare le dimensioni del modello
Le dimensioni di SaveModel devono essere al massimo di 500 MB se vuoi eseguirne il deployment in una versione del modello che utilizza un tipo di macchina legacy (MLS1). Può arrivare fino a 10 GB se utilizzi un tipo di macchina di Compute Engine (N1). Scopri di più sui tipi di macchine per la previsione online.
Questo limite di dimensioni include tutti gli asset e le variabili nella directory savedModel, non solo il file del buffer di protocollo SalvatoModel (ovvero saved_model.pb
o saved_model.pbtxt
).
Per verificare le dimensioni del modello durante lo sviluppo, esporta un modello SaveModel e controlla le dimensioni del file della directory.
Se il modello savedModel supera il limite di 500 MB:
- Assicurati di includere solo gli elementi necessari per la previsione nel grafico esportato.
- Riduci le dimensioni del modello riducendo la precisione di ponderazioni e dati.
Seguendo questi passaggi è possibile portare il SaveModel sotto il limite di 500 MB e ridurre la latenza delle previsioni. I vantaggi includono prestazioni migliori e non dover richiedere e attendere un aumento della quota.
Se hai comunque bisogno di una quota aggiuntiva, scopri come richiedere un aumento della quota.
Crea un grafico di previsione ottimale
L'addestramento produce più checkpoint che non vengono utilizzati per fornire previsioni. Assicurati di caricare una directory priva di questi artefatti, contenente solo il modello di cui eseguire il deployment.
Ad esempio, se esporti i riepiloghi durante il processo di addestramento per visualizzarli in TensorBoard, assicurati che non siano inclusi nel tuo SavingModel. Questi riepiloghi di TensorBoard non sono necessari per un grafico di previsione.
Riduci la precisione per ridurre le dimensioni del file
La riduzione della precisione delle variabili e dei dati di input è un compromesso che riduce notevolmente le dimensioni del modello con un certo costo di accuratezza della previsione. I dati ad alta precisione vengono archiviati in modo meno efficiente rispetto a quelli a bassa precisione. Sebbene i dati a bassa precisione siano una fonte di rumore, una rete neurale può "ignorare" questo rumore e produrre comunque previsioni abbastanza accurate.
Se l'utilizzo di questi metodi comporta una perdita eccessiva della precisione della previsione per il tuo caso d'uso, prova a richiedere un aumento della quota.
Riduci le dimensioni del file riducendo le dimensioni delle ponderazioni, che per impostazione predefinita corrispondono a numeri in virgola mobile difficili da archiviare in modo efficiente. Queste ponderazioni archiviate in modo inefficiente contribuiscono maggiormente alla dimensione complessiva del file del modello.
Quantifica i dati continui per ridurre le dimensioni del modello fino al 75% senza sacrificare una notevole quantità di precisione.
Utilizza variabili meno precise. Ad esempio, modifica il tipo di dati (
dtype
) daint64
aint32
.Riduci le dimensioni di altre funzionalità di input nella cartella
assets
della directory savedModel. Ad esempio, usa dimensioni più piccole del vocabolario per i dati testuali.Scopri le tecniche per ottimizzare i modelli TensorFlow per la pubblicazione in maggiore dettaglio e consulta esempi di applicazione di queste tecniche. Le tecniche collegate si applicano solo se utilizzi TensorFlow 1.
Strumenti per esaminare i modelli salvati e i grafici
TensorFlow fornisce un'interfaccia a riga di comando che puoi usare per verificare
l'integrità del tuo modello savedModel, come la formattazione dell'input e SignatureDefs
.
Scopri di più sull'interfaccia a riga di comando di SaveModel.
Puoi utilizzare lo strumento di trasformazione del grafico in TensorFlow per ottimizzare il deployment del modello. Sebbene l'uso di questo strumento sia spiegato nel contesto del deployment mobile, può essere utilizzato anche per ottimizzare i modelli per il deployment non mobile.
Creazione di funzioni di input per la pubblicazione
Se esporti il modello SaveModel utilizzando tf.keras.Model.save
, non devi specificare una funzione di input per la pubblicazione.
In caso contrario, definisci una funzione di input per la pubblicazione quando esporti il modello SaveModel. In relazione al processo di addestramento complessivo, puoi farlo nei seguenti punti:
- Durante la fine del processo di addestramento.
- Come processo separato al termine dell'addestramento.
I seguenti esempi mostrano come eseguire questa operazione per uno strumento di stima esperto. Scopri di più sulla pubblicazione delle funzioni di input per gli strumenti di stima.
Crea grafico di pubblicazione durante l'addestramento
Questo si verifica in genere alla fine del processo di addestramento, ma è ancora legato all'addestramento.
Definisci una funzione di input di pubblicazione. Nella funzione, assicurati che la dimensione più esterna delle funzionalità sia
None
. Ciò corrisponde alle dimensioni del tuo batch ed è dimostrato di seguito durante la definizione del valore degli elementi nella dettatura delle funzionalità mediantetf.placeholder
. Il seguente codice di esempio proviene dal nostro esempio di Census:Esporta un SaveModel dallo strumento di stima utilizzando
tf.estimator.Estimator.export_saved_model
, passando il percorso al tuo modello come parametroexport_dir_base
e il nome della funzione di input di pubblicazione come parametroserving_input_fn
. Nell'esempio del censimento, il tipo di strumento di stima utilizzato ètf.estimator.DNNLinearCombinedClassifier
.
Crea un grafico di pubblicazione separatamente dall'addestramento
Se hai già addestrato il modello, puoi ottenere previsioni senza riaddestrare il modello. Questo processo è molto simile alla creazione di un grafico di pubblicazione durante l'addestramento. La differenza principale è che crei il grafico di pubblicazione in uno script Python separato che esegui al termine dell'addestramento. L'idea di base è
costruire il Estimator
con lo stesso model_dir
usato in addestramento, quindi chiamare
tf.estimator.Estimator.export_saved_model
come descritto nella sezione precedente.
Definisci una funzione di input di pubblicazione nello script Python, in modo simile a come la definisci durante l'addestramento:
Quando crei
Estimator
, assicurati di impostare il parametromodel_dir
in modo che corrisponda a quello utilizzato per l'addestramento. In questo modo, i checkpoint del modello salvato in precedenza vengono resi disponibili per l'Estimator
.Infine, utilizza
Estimator
per chiamaretf.estimator.Estimator.export_saved_model
che passano nel percorso del modello come parametroexport_dir_base
e il nome della funzione di input di pubblicazione come parametroserving_input_fn
.
Tag e firme TensorFlow
Se esporti un SaveModel da tf.keras
o da uno strumento di stima di TensorFlow, il grafico esportato è pronto per la pubblicazione per impostazione predefinita.
In altri casi, quando crei un grafico di previsione TensorFlow, devi specificare i valori corretti dei tag e delle firme del grafico. TensorFlow fornisce costanti per questi valori di tag e firma, utilizzati per i seguenti scopi:
- Per selezionare un grafico in SaveModel al fine di fornire previsioni, procedi nel seguente modo:
- Per indicare che stai creando una firma di previsione per il grafico di previsione
Le firme definiscono gli input e gli output per il grafico. Quando crei una firma per il grafico di previsione, devi specificare una costante di firma valida come parametro method_name
in build_signature_def
.
Per le previsioni, la scelta migliore è in genere PREDICT_METHOD_NAME
.
Devi utilizzare un tag per specificare quale grafico in SavingModel viene utilizzato per fornire le previsioni. In add_meta_graph_and_variables
, aggiungi
tag_constants.SERVING
al tuo elenco tags
.
Esamina un esempio di come creare un grafico di previsione utilizzando le costanti corrette per tag e firme.
Passaggi successivi
- Scopri come eseguire il deployment del modello esportato in AI Platform Prediction per fornire previsioni.