Esportazione di un SavedModel per la previsione

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:

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:

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:

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) da int64 a int32.

  • 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.

  1. 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à mediante tf.placeholder. Il seguente codice di esempio proviene dal nostro esempio di Census:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Esporta un SaveModel dallo strumento di stima utilizzando tf.estimator.Estimator.export_saved_model, passando il percorso al tuo modello come parametro export_dir_base e il nome della funzione di input di pubblicazione come parametro serving_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.

  1. Definisci una funzione di input di pubblicazione nello script Python, in modo simile a come la definisci durante l'addestramento:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Quando crei Estimator, assicurati di impostare il parametro model_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.

  3. Infine, utilizza Estimator per chiamare tf.estimator.Estimator.export_saved_model che passano nel percorso del modello come parametro export_dir_base e il nome della funzione di input di pubblicazione come parametro serving_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