Panoramica di Prediction

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Puoi ospitare i modelli addestrati di machine learning nel cloud e utilizzare AI Platform Prediction per dedurre i valori di destinazione per i nuovi dati. Questa pagina illustra l'hosting e la previsione del modello e presenta le considerazioni da tenere presenti per i progetti.

Come funziona

AI Platform Prediction gestisce le risorse di calcolo nel cloud per eseguire i tuoi modelli. Puoi richiedere previsioni dai modelli e ottenere valori di destinazione previsti per i modelli. Ecco la procedura per prepararti all'esecuzione di previsioni nel cloud:

  1. Esporta il modello come artefatti che puoi sottoporre a deployment in AI Platform Prediction.

  2. Crei una risorsa del modello in AI Platform Prediction e quindi crei una versione del modello dal modello salvato.

    Se stai eseguendo il deployment di una routine di previsione personalizzata, devi anche fornire il codice da eseguire al momento della previsione.

  3. formatti i dati di input per la previsione e richiedi la previsione online o batch

  4. Quando utilizzi la previsione online, il servizio esegue il modello salvato e restituisce le previsioni richieste come messaggio di risposta per la chiamata.

    • Il deployment della versione del modello viene eseguito nella regione specificata al momento della creazione del modello.
    • Anche se non è garantito, la versione del modello che utilizzi regolarmente è generalmente generalmente pronta per essere eseguita.

    Quando utilizzi la previsione batch, supportata solo per i modelli TensorFlow, il processo è più lieve:

    1. Il servizio di previsione alloca risorse per eseguire il job. Sono inclusi uno o più nodi di previsione.

    2. Il servizio ripristina il grafico di TensorFlow su ciascun nodo allocato.

    3. Il servizio di previsione distribuisce i dati di input tra i nodi assegnati.

    4. Ogni nodo esegue il tuo grafico e salva le previsioni in una località di Cloud Storage specificata da te.

    5. Durante l'elaborazione di tutti i dati di input, il servizio arresta il job e rilascia le risorse allocate per tale job.

Deployment del modello

AI Platform Prediction può ospitare i tuoi modelli in modo da poter ottenere previsioni da loro nel cloud. Il processo di hosting di un modello salvato è chiamato deployment. Il servizio di previsione gestisce l'infrastruttura necessaria per eseguire il modello su larga scala e lo rende disponibile per richieste di previsione online e batch. Questa sezione descrive il deployment del modello.

Informazioni su modelli e versioni

Il servizio AI Platform Prediction organizza i tuoi modelli addestrati utilizzando risorse chiamate modelli e versioni. Un modello è una soluzione di machine learning. Ad esempio, potresti creare un modello chiamato census per contenere tutto il lavoro su un modello di machine learning censito degli Stati Uniti. L'entità che crei, denominata census, è un container per le implementazioni effettive del modello di machine learning, denominato versioni.

Lo sviluppo di un modello di machine learning è un processo iterativo. Per questo motivo, il paradigma di previsione della piattaforma AI Platform è impostato sul presupposto che creerai più versioni di ogni modello di machine learning. Questa terminologia può creare confusione, in quanto la risorsa del modello di previsione AI Platform non è di per sé un modello di machine learning. In AI Platform Prediction un modello è un container per le versioni del modello di machine learning.

Cosa c'è in una versione?

Il "modello" di cui esegui il deployment in AI Platform Prediction come versione di modello consiste in uno o più artefatti prodotti dall'addestramento con framework ospitati, TensorFlow, scikit-learn o XGBoost. Non importa se hai addestrato il tuo modello nel cloud utilizzando AI Platform Training o altrove.

Puoi anche eseguire il deployment di una routine di previsione personalizzata (beta), nel qual caso puoi fornire alla versione del modello ulteriori artefatti di addestramento e codice per gestire le richieste di previsione.

Varianti tra le versioni

Le versioni create per una determinata risorsa modello sono arbitrarie; puoi utilizzare la stessa risorsa modello anche se cambi completamente il modello di machine learning tra le versioni. Un modello è uno strumento organizzativo che puoi utilizzare nel modo più appropriato per la tua situazione.

Spesso, soprattutto dopo la versione di produzione, viene mantenuto lo stesso numero di input e di output tra le versioni del modello. In questo modo puoi passare da una versione all'altra senza dover modificare altra struttura dell'applicazione creata in base al modello. Semplifica anche il test di nuove versioni con dati esistenti.

Versione predefinita

Ogni modello con almeno una versione ha una versione predefinita, che viene impostata al momento della creazione della prima versione. Se richiedi previsioni che specificano solo un nome di modello, AI Platform Prediction utilizza la versione predefinita per quel modello.

Tieni presente che l'unica volta in cui il servizio imposta automaticamente la versione predefinita è quando crei la prima versione. Puoi impostare manualmente qualsiasi versione successiva come predefinita chiamando projects.models.versions.setDefault (visualizzato anche come gcloud ai-platform versions set-default e come opzione nell'elenco Versioni della pagina Dettagli modello in Google Cloud Console (per accedere alla pagina dei dettagli del modello, fai clic sul modello nell'elenco dei modelli nella pagina Modelli). Questo ti consente, ad esempio, di utilizzare una versione predefinita stabile per pubblicare previsioni in produzione durante il test di versioni più recenti senza creare una risorsa di modello dedicata per i test.

Modelli di denominazione e versioni

I nomi dei modelli e delle versioni devono:

  • Contenere solo lettere maiuscole e minuscole, numeri e trattini bassi (sensibili alle maiuscole).
  • Inizia con una lettera.
  • Contenere 128 caratteri o meno.
  • Devono essere univoci all'interno di un determinato progetto (per i modelli) o di un modello (per le versioni).

Non esistono regole per i nomi oltre a questi requisiti tecnici, ma ecco alcune best practice:

  • I nomi dei modelli devono essere descrittivi e distinti perché potresti doverli scegliere tra elenchi di molti nomi nei log o nei report.
  • I nomi delle versioni sono brevi e semplici. È più facile identificare 'v1' in un elenco di risorse che, ad esempio, '2017_01_29T13_54_58'.

Limiti di modelli e versioni

Per sapere quanti modelli e versioni puoi creare in un progetto Google Cloud, consulta la pagina Quote delle risorse.

Parametri di deployment del modello

Il servizio Previsione di AI Platform richiede alcune informazioni per creare la versione del modello. Ci sono anche alcune opzioni che puoi configurare. Questa sezione descrive i parametri di entrambi i tipi. Questi parametri sono definiti nell'oggetto Version o aggiunti per comodità nel comando gcloud ai-platform versions create.

Nome versione
Un nome per la nuova versione che sia univoco tra i nomi di altre versioni del modello.
Descrizione
Puoi fornire una descrizione della versione. Al momento la descrizione viene fornita solo quando ottieni le informazioni sulla versione con l'API; né Google Cloud CLI né Google Cloud Console mostrano la descrizione.
URI di deployment
Devi fornire l'URI della posizione di Cloud Storage in cui è archiviato il tuo ModelModel. AI Platform Prediction estrae il modello da questa località ed esegue il deployment. Questo parametro è denominato --origin nel comando gcloud ai-platform versions create. Se esegui il deployment di una routine di previsione personalizzata (beta), puoi fornire l'URI di una directory di Cloud Storage contenente gli artefatti utilizzati dalla versione del modello per la previsione, non solo un modello salvato.
Versione runtime
AI Platform Prediction utilizza la più recente versione runtime stabile per eseguire il deployment della versione del modello, a meno che non ne specifichi una diversa supportata. La versione del runtime determina principalmente la versione di TensorFlow che il servizio di previsione utilizza per eseguire il modello. Quando esegui un job di previsione batch, puoi sostituire la versione di runtime assegnata. La previsione online utilizza sempre la versione di runtime impostata al momento del deployment della versione del modello.
Scalabilità manuale

Puoi specificare il numero di nodi di previsione da tenere in esecuzione per la versione del modello. Per ulteriori informazioni, consulta la sezione sulla scalabilità.

Bucket di gestione temporanea

Se utilizzi l'interfaccia a riga di comando di Google Cloud per eseguire il deployment del modello, puoi utilizzare un modello SavedModel sul computer locale. Lo strumento lo inserisce nella posizione di Cloud Storage specificata prima di eseguire il deployment in AI Platform Prediction.

Modifiche al grafico per la previsione

Nel grafico di calcolo potresti aver incluso TensorFlow Ops, utili principalmente nel contesto dell'addestramento. Dopo aver addestrato il modello, puoi rimuovere tali operazioni dal grafico prima di esportare la versione finale.

Gran parte dei consigli forniti nella pagina di sviluppo delle applicazioni di formazione sono incentrati sull'esperienza di previsione. In alcuni casi si tratta di modifiche che apporti al modello quando la maggior parte dell'addestramento è completato e sei pronto per iniziare il deployment delle versioni.

Generazione di previsioni

Puoi inviare nuovi dati alle versioni del modello di cui hai eseguito il deployment per ottenere previsioni. Le seguenti sezioni descrivono importanti considerazioni relative alle previsioni.

Confronto tra previsione online e batch

Scopri di più sulle differenze tra previsioni online e batch.

Informazioni sui nodi di previsione e sull'allocazione delle risorse

Il servizio AI Platform Prediction misura la quantità di elaborazione che utilizzi per la previsione in ore nodo. Questa sezione descrive questi nodi e in che modo sono allocati per i diversi tipi di previsione.

È più facile pensare a un nodo come a una macchina virtuale (VM), anche se è implementato con un meccanismo diverso rispetto a una VM tradizionale. Viene eseguito il provisioning di ciascun nodo con una quantità di potenza di elaborazione e memoria impostate. Inoltre, include un'immagine di sistema operativo e una configurazione impostata del software necessaria per eseguire il modello per ottenere le previsioni.

Sia la previsione online che quella batch eseguono il nodo con un'elaborazione distribuita, quindi una determinata richiesta o un job possono utilizzare più nodi contemporaneamente. Ti vengono addebitati i costi per l'utilizzo totale dei nodi al minuto, utilizzando una tariffa oraria. Ad esempio, l'esecuzione di due nodi per dieci minuti ha lo stesso costo dell'esecuzione di un nodo per 20 minuti. I nodi di previsione online e batch allocano in modo diverso, il che può avere un effetto sostanziale sugli addebiti.

Allocazione dei nodi per previsione batch

Il servizio di previsione batch scala il numero di nodi che utilizza, per ridurre al minimo la quantità di tempo trascorso dal job. Per farlo, il servizio:

  • Alloca alcuni nodi per gestire il tuo job all'avvio.

  • Scala il numero di nodi durante il job nel tentativo di ottimizzare l'efficienza. L'avvio di ciascun nodo richiede del tempo, pertanto il servizio tenta di allocarne un numero sufficiente in modo che il tempo di avvio venga controbilanciato dalla riduzione del tempo trascorso.

  • Arresta i nodi non appena hai svolto il job.

Puoi influire sulla scalabilità di un job di previsione batch specificando un numero massimo di nodi da utilizzare. In genere, vuoi che venga utilizzato il numero di nodi utilizzato dal servizio, ma l'utilizzo dei nodi è soggetto ai criteri per le quote di AI Platform Prediction. Ti consigliamo di limitare il numero di nodi allocati a un determinato job, soprattutto se condividi il progetto con altri ed esegui potenzialmente job contemporaneamente (sia in fase di addestramento che di previsione) contemporaneamente.

Allocazione dei nodi per la previsione online

Il servizio di previsione online scala il numero di nodi che utilizza, per massimizzare il numero di richieste che può gestire senza introdurre troppa latenza. Per farlo, il servizio:

  • Alloca alcuni nodi la prima volta che richiedi previsioni dopo una lunga pausa nelle richieste.

  • Scalabilità del numero di nodi in risposta al traffico di richieste, aggiunta di nodi quando il traffico aumenta e rimozione quando ci sono meno richieste.

  • Mantiene almeno un nodo pronto in un periodo di diversi minuti, per gestire le richieste anche quando non ce ne sono. Lo stato "Pronto" assicura che il servizio possa gestire ogni previsione tempestivamente.

  • Esegue lo scale down fino a zero dopo che la versione del modello passa diversi minuti senza una richiesta di previsione.

Dopo aver ridotto il servizio a zero o in caso di un improvviso picco di traffico, può essere necessario del tempo (secondi o minuti) per inizializzare i nodi per gestire le richieste. Il tempo di inizializzazione dipende dalle dimensioni della versione del modello, per cui un timeout lato client può comportare la perdita di richieste fino all'inizializzazione dei nuovi nodi e/o un aumento delle latenze durante questo periodo di tempo.

Per assicurarti che la richiesta venga sempre eseguita, puoi specificare un numero minimo di nodi che il servizio dovrebbe mantenere pronto, impostando l'opzione minNodes sulla tua versione del modello. Questa impostazione può aumentare i costi, poiché paghi i nodi anche quando non vengono pubblicate previsioni.

Limiti della scalabilità automatica

La scalabilità automatica di AI Platform Prediction per la previsione online può aiutarti a gestire tariffe diverse delle richieste di previsione, riducendo al minimo i costi. Tuttavia, non è l'ideale per tutte le situazioni. Il servizio potrebbe non essere in grado di portare i nodi online abbastanza velocemente da stare al passo con picchi di traffico delle richieste. Se il tuo traffico presenta picchi elevati in modo regolare e se la latenza bassa è importante per la tua applicazione, puoi valutare la scalabilità manuale.

Utilizzo della scalabilità manuale

Puoi influire sulla scalabilità della previsione online per la versione di un modello specificando un numero di nodi da mantenere in esecuzione indipendentemente dal traffico. L'impostazione manuale del numero di nodi interrompe effettivamente la scalabilità del servizio, il che significa che il numero di nodi specificato sarà sempre pronto e ti verrà addebitato continuamente il costo. Devi evitare questo problema a meno che il numero di richieste ricevute dal tuo modello non sia soggetto a fluttuazioni intrinseche più velocemente di quanto la scalabilità automatica possa tenere il passo. Puoi impostare il numero di nodi da utilizzare impostando manualScaling nell'oggetto Versione trasmesso a projects.models.versions.create.

Scalabilità multizona

Se la tua versione utilizza un tipo di macchina Compute Engine (N1) e imposti autoScaling.minNodes o manualScaling.nodes su 2 o più, a seconda che tu stia utilizzando la scalabilità automatica o manuale, i nodi di previsione vengono eseguiti in più zone nella stessa area geografica. Ciò garantisce la disponibilità continua in caso di interruzione in una delle zone.

Dati di input di previsione

I dati utilizzati per ottenere le previsioni sono nuovi dati che hanno la stessa forma dei dati utilizzati per l'addestramento. Le previsioni online e batch utilizzano gli stessi dati (le funzionalità del modello), ma richiedono formati diversi a seconda del tipo di previsione e dell'interfaccia utilizzata. Questi formati sono riepilogati nella tabella seguente e descritti in modo più dettagliato nelle sezioni seguenti:

Tipo di interfaccia e interfaccia di previsione Formato di input supportato
Batch con chiamata API File di testo con stringhe di istanza JSON o file TFRecord (può essere compresso)
Batch con interfaccia a riga di comando gcloud File di testo con stringhe di istanza JSON o file TFRecord (può essere compresso)
Online con chiamata API Messaggio di richiesta JSON
Online con gcloud CLI File di testo con stringhe di istanza JSON o file CSV

Stringhe JSON istanze

Il formato di base per la previsione online e batch è un elenco di tensori di dati di istanza. Possono essere semplici elenchi di valori o membri di un oggetto JSON, a seconda di come hai configurato gli input nell'applicazione di addestramento:

Questo esempio mostra un tensore di input e una chiave di istanza:

{"values": [1, 2, 3, 4], "key": 1}

La configurazione della stringa JSON può essere complessa, purché rispetti le seguenti regole:

  • Il livello superiore dei dati dell'istanza deve essere un oggetto JSON, un dizionario di coppie chiave/valore.

  • I singoli valori in un oggetto istanza possono essere stringhe, numeri o elenchi. Non è possibile incorporare oggetti JSON.

  • Gli elenchi devono contenere solo elementi dello stesso tipo (inclusi altri elenchi). Non puoi mescolare valori stringa e numerici.

La seguente stringa (formattata per la leggibilità) mostra un oggetto contenente un'etichetta e un'immagine, in cui l'immagine è una matrice tridimensionale di numeri interi a 8 bit:

{
  "tag": "beach",
  "image": [
    [
      [138, 30, 66],
      [130, 20, 56],
      ...
    ],
    [
      [126, 38, 61],
      [122, 24, 57],
      ...
    ],
        ...
  ]
}

Se il modello prende un solo input, non è necessario includerlo in un oggetto JSON. Ad esempio, se invii un singolo tensore (vettoriale in questo caso) con quattro valori, non è necessario formattarlo in questo modo:

{"values": [1, 2, 3, 4]}

Puoi semplicemente formattare ciascuna istanza come elenco:

[1, 2, 3, 4]
Dati binari nell'input della previsione

I dati binari non possono essere formattati come stringhe codificate in UTF-8 supportate da JSON. Se sono presenti dati binari negli input, devi utilizzare la codifica base64 per rappresentarli. È richiesta la seguente formattazione speciale:

  • La stringa codificata deve essere formattata come oggetto JSON con un'unica chiave denominata b64. L'esempio Python seguente codifica un buffer di dati JPEG non elaborati utilizzando la libreria base64 per creare un'istanza:

    {"image_bytes":{"b64": base64.b64encode(jpeg_data)}}
    
  • Nel codice del tuo modello TensorFlow devi assegnare agli alias i tuoi tensori di input e di output in modo che terminino con '_bytes'.

Dati di input di previsione online

Passi le istanze di input per la previsione online come corpo del messaggio per la richiesta previsione. Per la formattazione del corpo della richiesta e della risposta, consulta i dettagli della richiesta di previsione.

In breve: assegna a ogni istanza un elemento in un elenco e assegna al membro il nome instances. Quindi, il semplice esempio JSON di istanza di dati fornito sopra diventa:

{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}

Quando utilizzi gcloud ai-platform projects predict per richiedere previsioni online, trasmetti un file con lo stesso formato utilizzato per le previsioni batch.

Dati di input per previsione

Fornisci i dati di input per la previsione batch in uno o più file di testo contenenti righe di dati JSON dell'istanza come descritto sopra. Un file di input non contiene intestazioni di colonna o altra formattazione oltre alla semplice sintassi JSON.

{"image": [0.0, 0.0, ... ], "key": 0}
{"image": [0.0, 0.0, ... ], "key": 1}
{"image": [0.0, 0.0, ... ], "key": 2}

Chiavi istanza

AI Platform Prediction esegue i job di previsione batch utilizzando l'elaborazione distribuita. Ciò significa che i tuoi dati sono distribuiti tra un cluster arbitrario di macchine virtuali e vengono elaborati in un ordine imprevedibile. Per poter abbinare le previsioni restituite alle istanze di input, devi definire le chiavi di istanza. Una chiave di istanza è un valore univoco di ogni istanza tra le istanze di un insieme di dati. La chiave più semplice è un numero di indice.

Dovresti passare le chiavi attraverso il grafico inalterato nella tua applicazione di addestramento. Se i dati non hanno già chiavi di istanza, puoi aggiungerle come parte della pre-elaborazione dei dati.

Versioni runtime

Con il rilascio di nuove versioni di AI Platform Prediction, è possibile che i modelli sviluppati rispetto alle versioni precedenti diventino obsoleti. Ciò è particolarmente pertinente se arrivi a una versione del modello efficace che rimane invariata per un lungo periodo. Consulta il criterio di controllo delle versioni di AI Platform Prediction e assicurati di comprendere la versione di runtime di AI Platform Prediction che utilizzi per addestrare le versioni del modello.

Versioni e previsioni di runtime

Devi specificare una versione di runtime di AI Platform Prediction supportata quando crei una versione del modello. Questa operazione stabilisce l'impostazione predefinita della versione del modello.

Puoi specificare una versione di runtime da utilizzare quando avvii un job di previsione batch. per consentire la ricezione delle previsioni utilizzando un modello di cui non è stato eseguito il deployment su AI Platform Prediction. Per un modello di cui è stato eseguito il deployment, utilizza la versione di runtime predefinita del modello nella richiesta di job. L'utilizzo di una versione di runtime diversa potrebbe causare errori imprevisti.

Non puoi richiedere previsioni online da modelli esterni a AI Platform Prediction, quindi non è possibile sostituire la versione di runtime predefinita nella richiesta.

La versione predefinita del runtime impostata per una versione del modello non può essere modificata. Per specificare una versione di runtime diversa per una versione del modello, esegui il deployment di una nuova versione utilizzando gli stessi elementi di addestramento utilizzati inizialmente.

Aree geografiche e previsioni

Google Cloud utilizza le aree geografiche, suddivise in zone, per definire la località geografica delle risorse di elaborazione fisica. Quando esegui il deployment di un modello per la previsione utilizzando AI Platform Prediction, specifichi l'area geografica predefinita in cui vuoi eseguire la previsione.

Quando avvii un job di previsione batch, puoi specificare una regione in cui eseguire il job, sostituendo la regione predefinita. Le previsioni online sono sempre pubblicate dalla regione predefinita specificata per il modello.

Per conoscere le regioni disponibili per i servizi di AI Platform Prediction, inclusi l'addestramento di modelli e la previsione online/batch, leggi la guida alle regioni.

Logging delle previsioni

La previsione batch genera log dei job che puoi visualizzare in Cloud Logging. Puoi ricevere i log anche per le richieste di previsione online se configuri il modello per generarli quando lo crei. Tieni presente che devi specificare questa opzione quando crei la risorsa del modello in AI Platform Prediction; tutte le versioni di un modello generano log per le previsioni online, altrimenti nessuna.

Puoi impostare il logging delle previsioni online per un modello impostando onlinePredictionLogging su true (True in Python) nella risorsa modello che utilizzi durante la creazione del modello con projects.models.create. Se utilizzi l'interfaccia a riga di comando di Google Cloud per creare il modello, includi il flag --enable-logging quando esegui gcloud ai-platform models create.

Recupero delle previsioni da modelli di cui non è stato eseguito il deployment

Puoi richiedere la previsione batch utilizzando un modello di cui non hai eseguito il deployment nel servizio di previsione AI Platform. Anziché specificare il nome di un modello o di una versione, puoi utilizzare l'URI di una posizione di Cloud Storage in cui è archiviato il modello che vuoi eseguire.

Poiché non è disponibile una versione di runtime predefinita per un modello di cui non è stato eseguito il deployment, devi impostarlo esplicitamente nella richiesta di job.

In tutti gli altri modi, un job di previsione batch che utilizza un modello di cui non è stato eseguito il deployment si comporta come qualsiasi altro job batch.

Test del modello

Puoi utilizzare il servizio di previsione AI Platform per ospitare i tuoi modelli in produzione, ma puoi anche utilizzarli per testare i tuoi modelli. Tradizionalmente, il test dei modelli è il passaggio prima di prepararsi al deployment di una soluzione di machine learning. Lo scopo di un pass di test è testare il tuo modello in un ambiente che è il più vicino possibile a quello in cui verrà utilizzato in situazioni reali.

Ricorda che puoi implementare più versioni di un modello sul servizio contemporaneamente. Ciò significa che puoi avere più revisioni del modello contemporaneamente in caso di necessità. Inoltre, semplifica il deployment di una versione di produzione del modello durante il test della revisione successiva. Analogamente a quanto accade per lo sviluppo di applicazioni di machine learning, la disponibilità di dati aggiornati è spesso un fattore limitante. Dovresti sviluppare strategie per suddividere i dati e raccogliere nuovi dati da utilizzare per i test.

Passaggi successivi