Esportazione di un SavedModel per la previsione

Per eseguire il deployment dei modelli addestrati su AI Platform Prediction e utilizzarli per la pubblicazione le previsioni, devi prima esportarle nel formato SavedModel di TensorFlow.

Questa pagina illustra alcuni aspetti importanti da considerare durante la creazione SavedModel. Per informazioni più dettagliate sull'esportazione in un SavedModel, consulta La guida di TensorFlow di SavedModels e la guida di TensorFlow per salvare Keras di machine learning. Per dettagli su come eseguire il deployment del SavedModel in AI Platform Prediction per la pubblicazione previsioni, leggi la guida al deployment modelli di machine learning. Per informazioni di base generali su il processo di previsione, consulta la 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 SavedModel (o un modello addestrato salvato in modo diverso) con altro addestramento artefatti e codice Python forniti per personalizzare il modo in cui AI Platform Prediction gestisce le richieste di previsione. Ad esempio, puoi sfruttare questa flessibilità pre-elaborare l'input della previsione prima che il modello faccia 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, ci sono alcune importanti passaggi da seguire per ottenere previsioni.

Esistono alcune differenze fondamentali tra un grafico di addestramento e un grafico di pubblicazione. I grafici di addestramento contengono caratteristiche non adatte alla pubblicazione, quali:

  • 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

SavedModel è il formato consigliato di TensorFlow per il salvataggio dei modelli, per eseguire il deployment di modelli TensorFlow addestrati 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, viene visualizzata una directory SavedModel che contiene le seguenti:

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. Solitamente questo file ha un'estensione di .pb o .pbtxt.

SavedModel ti consente di salvare più versioni di un grafo 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 un SavedModel Google Cloud.

Esportazione da varie API TensorFlow

Esistono diversi modi per esportare SavedModels dal codice di addestramento TensorFlow. Nell'elenco che segue sono descritti i diversi modi a disposizione per vari API TensorFlow:

Compatibilità con AI Explanations

Se vuoi utilizzare AI Explains al tuo modello, scopri i requisiti aggiuntivi per 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ù sulla macchina tipi di previsioni 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 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 una migliore delle prestazioni senza dover richiedere e attendere un aumento della quota.

Se hai ancora 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 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 in TensorBoard, ti consigliamo di assicurarti che non siano inclusi il tuo SavedModel. Questi riepiloghi TensorBoard non sono necessari per grafico di previsione.

Riduci la precisione per ridurre le dimensioni del file

Ridurre la precisione delle variabili e dei dati di input è un compromesso che riduce le dimensioni del modello in modo significativo con un certo costo in termini di accuratezza della previsione. I dati ad alta precisione sono 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 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 memorizzati 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 quantità significativa di accuratezza.

  • Utilizzare 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 di 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 offre un'interfaccia a riga di comando utilizzabile per il controllo di integrità aspetti del SavedModel, come la formattazione dell'input e SignatureDefs. Scopri di più sull'interfaccia a riga di comando SavedModel.

Lo strumento di trasformazione del grafico in TensorFlow può essere utilizzato per ottimizzare 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 di pubblicazione

Se esporti il SavedModel utilizzando tf.keras.Model.save, non dovrai specificare una funzione di input.

In caso contrario, definisci una funzione di input per il servizio quando esporti il modello SavedModel. Tu può 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 uno strumento di stima addestrato. Espandi informazioni sulla pubblicazione di funzioni di input per Strumenti di stima.

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 di pubblicazione. Nella funzione, assicurati che la dimensione più esterna degli elementi sia None. Questo valore corrisponde alla dimensione del batch e viene mostrato di seguito quando si definisce il valore degli elementi nelle caratteristiche indicate 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 dal tuo strumento di stima utilizzando tf.estimator.Estimator.export_saved_model, passando il percorso del modello come parametro export_dir_base e 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

Creare il grafico di pubblicazione separatamente dall'addestramento

Se hai già addestrato il modello, puoi ottenere le previsioni senza bisogno di addestramento. Questa procedura è molto simile alla creazione di un grafico di pubblicazione addestramento. La differenza principale è che crei il grafico di pubblicazione in una tabella Script Python che esegui al termine dell'addestramento. L'idea di base è creare Estimator con lo stesso model_dir usato nell'addestramento, quindi chiamata tf.estimator.Estimator.export_saved_model come descritto nella sezione precedente.

  1. Definisci una funzione di input di servizio nello script Python, in modo simile a come la definiamo 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 il Estimator, assicurati di impostare il parametro model_dir sia lo stesso usato per l'addestramento. In questo modo vengono eseguiti i punti di controllo modello salvato in precedenza disponibile 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 un modello TensorFlow, stimatore, 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 offre per questi valori di tag e firma, utilizzate per i seguenti scopi:

  • Per selezionare un grafico nel SavedModel per fornire le previsioni
  • Per indicare che stai creando una firma di previsione per la tua previsione. grafico

Le firme definiscono gli input e gli output per il grafico. Quando crei un per il grafico di previsione, devi specificare una firma valida costante 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