Esportazione di un SavedModel per la previsione

Per eseguire il deployment dei modelli addestrati in AI Platform Prediction e utilizzarli per generare le previsioni, devi prima esportarli nel formato SavedModel di TensorFlow.

Questa pagina illustra alcuni aspetti importanti da considerare durante la creazione del tuo SavedModel. Per informazioni più dettagliate sull'esportazione in un modello SavedModel, consulta la guida di TensorFlow ai modelli SavedModel e la guida di TensorFlow al salvataggio dei modelli Keras. Per informazioni dettagliate su come eseguire il deployment del tuo SavedModel in AI Platform Prediction per generare le previsioni, consulta la guida all'implementazione dei modelli. Per informazioni generali sulla procedura di previsione, consulta la pagina Panoramica della previsione.

Routine di previsione personalizzate

In alternativa all'implementazione di un modello SavedModel, puoi anche creare e implementare una routine di previsione personalizzata. Una routine di previsione personalizzata può combinare un SavedModel (o un modello addestrato salvato in un altro modo) con altri elementi di addestramento e codice Python che fornisci per personalizzare il modo in cui AI Platform Prediction gestisce le richieste di previsione. Ad esempio, puoi utilizzare questa flessibilità per pre-elaborare l'input di previsione prima che il modello effettui una previsione.

Per saperne di più, consulta la guida alle routine di previsione personalizzata.

Informazioni sui grafici di addestramento e sui grafici di pubblicazione

Dopo aver addestrato il modello ed esportato come SavedModel, sono necessari alcuni passaggi importanti prima di poter generare le previsioni.

Esistono alcune differenze fondamentali tra un grafico di addestramento e un grafico di pubblicazione. I grafici di addestramento contengono funzionalità non appropriate per la pubblicazione, come:

  • lettori di file
  • code di input
  • strati dropout
  • funzioni di perdita
  • ottimizzatori

Poiché il processo di pubblicazione delle previsioni ha esigenze diverse rispetto al processo di addestramento, è buona prassi esportare un grafico separato specificamente per la pubblicazione delle previsioni.

Informazioni su SavedModel

Un modello SavedModel è il formato consigliato da TensorFlow per salvare i modelli ed è il formato obbligatorio per il deployment dei modelli TensorFlow addestrati su AI Platform Prediction. L'esportazione del modello addestrato come SavedModel consente di salvare il grafico di addestramento con gli asset, le variabili e i metadati in un formato che Può essere utilizzato e ripristinato da AI Platform Prediction per le previsioni.

Dopo aver esportato un SavedModel, hai una directory SavedModel che contiene quanto segue:

  • i grafici di addestramento salvati in buffer di protocollo SavedModel
  • file esterni, chiamati asset
  • variabili, che vengono salvate come file di checkpoint

Quando esegui il deployment di SavedModel in AI Platform Prediction, devi includere l'intera directory SavedModel, non solo il file buffer del protocollo SavedModel che contiene il grafo e i relativi metadati. Di solito questo file ha un'estensione .pb o .pbtxt.

SavedModel ti consente di salvare più versioni di un grafico che condividono gli stessi asset e le stesse variabili (o checkpoint). Ad esempio, potresti voler sviluppare due versioni dello stesso grafico: una da eseguire su CPU e un'altra su GPU.

Scopri di più sulla struttura di una directory SavedModel.

Esportazione da varie API TensorFlow

Esistono diversi modi per esportare i SavedModel dal codice di addestramento di TensorFlow. L'elenco seguente descrive alcuni modi diversi che funzionano per varie API TensorFlow:

Compatibilità con AI Explanations

Se vuoi utilizzare AI Explanations con il tuo modello, scopri i requisiti aggiuntivi per il tuo SavedModel.

Controllare e modificare le dimensioni del modello

Il tuo SavedModel deve avere dimensioni massime pari a 500 MB se vuoi eseguirlo in una versione del modello che utilizza un tipo di macchina legacy (MLS1). Può essere fino a 10 GB se utilizzi un tipo di macchina 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 del protocollo SavedModel (ovvero saved_model.pb o saved_model.pbtxt).

Per controllare le dimensioni del modello durante lo sviluppo, esporta un SavedModel e controlla le dimensioni del file della directory.

Se il tuo SavedModel supera il limite di 500 MB:

Se segui questi passaggi, puoi ridurre il modello salvato al di sotto del limite di 500 MB e diminuire la latenza delle previsioni. I vantaggi includono un miglioramento del rendimento e la possibilità di non dover richiedere e attendere un aumento della quota.

Se hai ancora bisogno di una quota aggiuntiva, scopri come richiedere un aumento della quota.

Creare un grafico di previsione ottimale

L'addestramento produce più checkpoint che non vengono utilizzati per la pubblicazione delle predizioni. Assicurati di caricare una directory priva di questi elementi, contenente solo il modello da implementare.

Ad esempio, se esporti i riepiloghi durante il processo di addestramento per la visualizzazione in TensorBoard, devi assicurarti che non siano inclusi nel tuo SavedModel. Questi riepiloghi di TensorBoard non sono necessari per un grafico di previsione.

Riduci la precisione per diminuire 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 in termini di accuratezza della previsione. I dati ad alta precisione vengono archiviati in modo meno efficiente rispetto ai dati 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 precise.

Se l'utilizzo di questi metodi comporta una perdita di accuratezza nella previsione troppo elevata per il tuo caso d'uso, prova a richiedere un aumento della quota.

  • Riduci le dimensioni del file riducendo le dimensioni dei pesi, che per impostazione predefinita sono numeri in virgola mobile difficili da memorizzare in modo efficiente. Questi pesi archiviati in modo inefficiente contribuiscono maggiormente alle dimensioni complessive del file del modello.

  • Quantizza i tuoi dati continui per ridurre le dimensioni del modello fino al 75% senza sacrificare una quantità significativa 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, utilizza vocabolari di dimensioni inferiori per i dati text.

  • Scopri di più sulle tecniche per ottimizzare i modelli TensorFlow per il servizio e consulta esempi di applicazione di queste tecniche. Le tecniche collegate si applicano solo se utilizzi TensorFlow 1.

Strumenti per ispezionare i modelli salvati e i grafici

TensorFlow fornisce un'interfaccia a riga di comando che puoi utilizzare per eseguire controlli di congruenza su aspetti del tuo SavedModel, ad esempio la formattazione degli input e SignatureDefs. Scopri di più sull'interfaccia a riga di comando SavedModel.

Lo strumento Graph Transform in TensorFlow può essere utilizzato per ottimizzare il modello per il deployment. Sebbene l'utilizzo di questo strumento sia spiegato nel contesto del deployment mobile, puoi utilizzarlo anche per ottimizzare i modelli per il deployment non mobile.

Creazione di funzioni di input per la pubblicazione

Se esporti il tuo SavedModel utilizzando tf.keras.Model.save, non devi specificare una funzione di input per il servizio.

In caso contrario, definisci una funzione di input per il servizio quando esporti il modello SavedModel. Puoi farlo nei seguenti punti in relazione al processo di addestramento complessivo:

  • Alla fine del processo di addestramento.
  • Come processo separato al termine dell'addestramento.

I seguenti esempi mostrano come eseguire questa operazione per un estimatore esperto. Scopri di più sulle funzioni di input per gli stimatori.

Creare un grafico di pubblicazione durante l'addestramento

Questo accade in genere alla fine del processo di addestramento, ma rimane comunque correlato all'addestramento.

  1. Definisci una funzione di input per l'erogazione. Nella funzione, assicurati che la dimensione più esterna degli elementi sia None. Questo corrisponde alla dimensione del batch e viene dimostrato di seguito quando si definisce il valore degli elementi nel dizionario delle funzionalità utilizzando tf.placeholder. Il seguente codice di esempio proviene dal nostro campione del censimento:

    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 SavedModel dall'estimatore utilizzando tf.estimator.Estimator.export_saved_model, passando il percorso del 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 stimatore utilizzato è tf.estimator.DNNLinearCombinedClassifier.

Creare il grafico di pubblicazione separatamente dall'addestramento

Se hai già addestrato il modello, puoi ottenere le previsioni senza bisogno di addestramento. Questo processo è molto simile alla creazione di un grafico di pubblicazione durante la formazione. La differenza principale è che crei il grafo di pubblicazione in uno script Python distinto che viene eseguito al termine dell'addestramento. L'idea di base è costruire il Estimator con lo stesso model_dir utilizzato nell'addestramento, quindi chiamare tf.estimator.Estimator.export_saved_model come descritto nella sezione precedente.

  1. Definisci una funzione di input per la pubblicazione nello script Python, in modo simile a come la definisci nell'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 su quello utilizzato nell'addestramento. In questo modo, i checkpoint del modello salvate in precedenza saranno disponibili per Estimator.

  3. Infine, utilizza Estimator per chiamare tf.estimator.Estimator.export_saved_model passando il 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 SavedModel da tf.keras o da uno strumento di stima TensorFlow, il grafico esportato è pronto per la pubblicazione per impostazione predefinita.

In altri casi, quando crei un grafo di previsione di TensorFlow, devi specificare i valori corretti per i tag e le firme del grafo. TensorFlow fornisce costanti per questi valori di tag e firme, utilizzati per le seguenti finalità:

  • Per selezionare un grafico nel tuo SavedModel per la pubblicazione delle previsioni
  • Per indicare che stai creando una firma di previsione per il grafico di previsione

Le firme definiscono gli input e gli output del grafo. 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 la previsione, la scelta migliore è in genere PREDICT_METHOD_NAME.

Devi utilizzare un tag per specificare quale grafo nel tuo SavedModel viene utilizzato per fornire le predizioni. In add_meta_graph_and_variables, aggiungi tag_constants.SERVING al tuo elenco tags.

Guarda un esempio di come creare un grafico di previsione utilizzando le costanti corrette per i tag e le firme.

Passaggi successivi