Panoramica di Prediction

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

Come funziona

AI Platform Prediction gestisce le risorse di calcolo nel cloud per eseguire i tuoi modelli. Puoi richiedere previsioni dai tuoi modelli e ottenere i relativi valori target previsti. Ecco la procedura di configurazione per eseguire previsioni nel cloud:

  1. Puoi esportare il modello come artefatti di cui puoi eseguire il deployment in AI Platform Prediction.

  2. Creerai una risorsa del modello in AI Platform Prediction e poi creerai una versione del modello dal modello salvato.

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

  3. Puoi formattare i dati di input per la previsione e richiedere previsioni 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.
    • Sebbene non sia garantita, una versione del modello che utilizzi regolarmente viene generalmente mantenuta pronta per l'esecuzione.

    Quando utilizzi la previsione batch, supportata solo per i modelli TensorFlow, il processo è un po' più complesso:

    1. Il servizio di previsione alloca le risorse per eseguire il job. Questo include uno o più nodi di previsione.

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

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

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

    5. Quando tutti i dati di input vengono elaborati, il servizio arresta il job e rilascia le risorse allocate.

Deployment dei modelli

Il servizio AI Platform Prediction può ospitare i tuoi modelli in modo che tu possa ottenerne previsioni 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 la rende disponibile per richieste di previsione online e batch. Questa sezione descrive il deployment dei modelli.

Informazioni su modelli e versioni

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 tuo lavoro su un modello di machine learning per il censimento degli Stati Uniti. L'entità creata, denominata census, è un contenitore per le implementazioni effettive del modello di machine learning, chiamate versioni.

Lo sviluppo di un modello di machine learning è un processo iterativo. Per questo motivo, il paradigma di risorse AI Platform Prediction viene configurato partendo dal presupposto che creerai più versioni di ogni modello di machine learning. Questa terminologia può creare confusione perché una risorsa del modello di AI Platform Prediction non è in realtà un modello di machine learning a sé stante. In AI Platform Prediction un modello è un container per le versioni del modello di machine learning.

Che cos'è una versione?

Il "modello" di cui esegui il deployment in AI Platform Prediction come versione del modello è costituito da uno o più artefatti prodotti tramite l'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 altri artefatti e codice di addestramento per gestire le richieste di previsione.

Varianti tra le versioni

Le versioni create per una determinata risorsa del modello sono arbitrarie; puoi utilizzare la stessa risorsa del modello anche se cambi completamente il modello di machine learning da una versione all'altra. Un modello è uno strumento organizzativo che puoi usare nel modo che ritieni più adatto alla tua situazione.

È comune, soprattutto dopo che hai una versione in produzione, mantenere gli stessi input e output tra le versioni del modello. In questo modo puoi cambiare versione senza dover cambiare l'altra struttura dell'applicazione basata sul tuo modello. Inoltre, semplifica 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 specificando solo il nome di un modello, AI Platform Prediction utilizza la versione predefinita.

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

Denominazione di modelli e versioni

I nomi di modello e versione devono:

  • Contenere solo lettere maiuscole e minuscole, numeri e trattini bassi (con distinzione tra maiuscole e minuscole).
  • Inizia con una lettera.
  • Contenere al massimo 128 caratteri.
  • Essere univoci all'interno di un determinato progetto (per i modelli) o 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 distintivi: potrebbe essere necessario selezionarli dagli elenchi di molti nomi nei log o nei report.
  • È preferibile che i nomi di versione siano brevi e semplici. È più facile identificare "v1" in un elenco di risorse rispetto a "2017_01_29T13_54_58".

Limiti di modelli e versioni

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

Parametri di deployment del modello

AI Platform Prediction ha bisogno di alcune informazioni per creare la versione del modello. Hai 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 praticità nel comando gcloud ai-platform versions create.

Nome versione
Un nome per la nuova versione univoco tra i nomi delle altre versioni del modello.
Descrizione
Puoi fornire una descrizione per la tua versione. Al momento la descrizione viene fornita solo quando si ottengono le informazioni sulla versione con l'API; né Google Cloud CLI né la console Google Cloud visualizzano la descrizione.
URI di deployment
Devi fornire l'URI della località di Cloud Storage in cui è archiviato il tuo modello savedModel. Il servizio AI Platform Prediction estrae il modello da questa località e ne 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 Cloud Storage contenente eventuali artefatti utilizzati dalla versione del modello per la previsione, non solo un SaveModel.
Versione runtime
AI Platform Prediction utilizza l'ultima versione di runtime stabile per eseguire il deployment della versione del modello, a meno che non ne specifichi una diversa supportata. La versione runtime determina principalmente la versione di TensorFlow utilizzata dal servizio di previsione per eseguire il modello. Quando esegui un job di previsione batch, puoi eseguire l'override della versione del runtime assegnata. La previsione online utilizza sempre la versione di runtime impostata quando viene eseguito il deployment della versione del modello.
Scalabilità manuale

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

Bucket di gestione temporanea

Se utilizzi Google Cloud CLI per eseguire il deployment del modello, puoi utilizzare un savedModel sul tuo computer locale. Lo strumento lo inserisce nella località di Cloud Storage specificata prima di eseguirne il deployment in AI Platform Prediction.

Tracciare un grafico delle modifiche per la previsione

Potresti aver incluso nel grafico di calcolo TensorFlow Ops, che è stato utile principalmente nel contesto dell'addestramento. Dopo aver addestrato il modello, puoi rimuovere queste operazioni dal grafico prima di esportare la versione finale.

Gran parte dei consigli forniti nella pagina di sviluppo delle applicazioni di addestramento sono rivolti all'esperienza di previsione. In alcuni casi si tratta di modifiche che apporti al modello quando la maggior parte dell'addestramento è terminata 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 sulla previsione.

Confronto tra previsione online e previsione batch

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

Informazioni sui nodi di previsione e sull'allocazione delle risorse

AI Platform Prediction misura la quantità di elaborazione consumata per la previsione in ore nodo. Questa sezione descrive questi nodi e come sono allocati per i diversi tipi di previsione.

È più semplice pensare a un nodo come a una macchina virtuale (VM), anche se è implementata con un meccanismo diverso rispetto a una VM tradizionale. A ogni nodo viene eseguito il provisioning di una quantità prestabilita di potenza di elaborazione e memoria. Presenta inoltre un'immagine del sistema operativo e una configurazione predefinita del software necessario per eseguire il modello al fine di ottenere previsioni.

Sia la previsione online che quella batch eseguono il nodo con l'elaborazione distribuita, in modo che una determinata richiesta o un job possa utilizzare più nodi contemporaneamente. Ti viene addebitato l'utilizzo totale dei nodi al minuto, utilizzando una tariffa oraria. Ad esempio, l'esecuzione di due nodi per dieci minuti è la stessa dell'esecuzione di un nodo per venti minuti. Le previsioni online e batch allocano i nodi in modo diverso, il che può influire notevolmente sui costi che ti verranno addebitati.

Allocazione dei nodi per la 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 job all'avvio.

  • Scala il numero di nodi durante il job nel tentativo di ottimizzare l'efficienza. L'avvio di ogni nodo richiede tempo, quindi il servizio tenta di assegnarne una quantità sufficiente in modo che il tempo di avvio venga contrastato dalla riduzione del tempo trascorso.

  • Arresta i nodi al termine del job.

Puoi influire sulla scalabilità di un job di previsione batch specificando un numero massimo di nodi da utilizzare. In genere si vuole un numero illimitato di nodi quanti ne verranno utilizzati dal servizio, ma l'utilizzo dei nodi è soggetto ai criteri per le quote di previsione di AI Platform Prediction. Potresti voler limitare il numero di nodi allocati a un determinato job, soprattutto se condividi il progetto con altri ed esegui potenzialmente job (sia 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.

  • Scala il numero di nodi in risposta alle richieste di traffico, aggiungendo nodi quando il traffico aumenta e rimuovendoli quando ci sono meno richieste.

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

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

Dopo che il servizio ha fatto lo scale down a zero o quando si verifica un picco improvviso del traffico, può essere necessario del tempo (da secondi a minuti) per inizializzare i nodi per gestire le richieste. Il tempo di inizializzazione dipende dalle dimensioni della versione del modello, quindi un timeout lato client potrebbe comportare l'eliminazione delle richieste fino all'inizializzazione dei nuovi nodi e/o un aumento delle latenze durante questo periodo di tempo.

Per garantire che i prompt vengano sempre pubblicati, puoi specificare un numero minimo di nodi che il servizio deve tenere pronti, impostando l'opzione minNodes sulla versione del tuo modello. Questa impostazione può aumentare i costi, poiché paghi per i nodi anche se non vengono pubblicate previsioni.

Limitazioni della scalabilità automatica

La scalabilità automatica di AI Platform Prediction per la previsione online può aiutarti a fornire frequenze diverse di 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 tenere il passo con grandi picchi di traffico delle richieste. Se il traffico presenta regolarmente picchi elevati e se per la tua applicazione è importante una latenza bassa in modo affidabile, puoi prendere in considerazione la scalabilità manuale.

Utilizzo della scalabilità manuale

Puoi influire sulla scalabilità della previsione online per una versione del modello specificando un numero di nodi da mantenere in esecuzione indipendentemente dal traffico. L'impostazione manuale del numero di nodi interrompe la scalabilità del servizio, il che significa che il numero di nodi specificato sarà sempre pronto e il costo ti verrà addebitato continuamente. Dovresti evitarlo, a meno che il numero di richieste ricevute dal modello non subisca variazioni intrinseche più velocemente di quanto non possa fare la scalabilità automatica. Per impostare il numero di nodi da utilizzare, imposta manualScaling nell'oggetto Version che passi a projects.models.versions.create.

Scalabilità multizona

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

Dati di input della previsione

I dati che utilizzi per ottenere previsioni sono nuovi dati che assumono la stessa forma dei dati utilizzati per l'addestramento. La previsione online e batch utilizzano gli stessi dati (le caratteristiche del modello), ma richiedono formati diversi a seconda del tipo di previsione e dell'interfaccia utilizzata. Questi formati sono riassunti nella tabella seguente e descritti in dettaglio nelle sezioni riportate di seguito:

Interfaccia e tipo di previsione Formato di input supportato
Batch con chiamata API File di testo con stringhe di istanze JSON o file TFRecord (può essere compresso)
Crea batch con gcloud CLI File di testo con stringhe di istanze 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 delle istanze

Il formato di base per la previsione online e batch è un elenco di tensori di dati delle istanze. Questi 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 composizione della stringa JSON può essere complessa, purché segua queste regole:

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

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

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

La seguente stringa (formattata per la leggibilità) mostra un oggetto contenente un'etichetta e un'immagine, dove l'immagine è un array 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 accetta un solo input, non è necessario eseguire il wrapping di un oggetto JSON. Ad esempio, se invii un singolo tensore (in questo caso vettore) con quattro valori, non è necessario formattarlo in questo modo:

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

Puoi semplicemente formattare ogni istanza come elenco:

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

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

  • La stringa codificata deve essere formattata come oggetto JSON con una singola chiave denominata b64. Il seguente esempio Python 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 modello TensorFlow, devi assegnare un nome ai tensori di input e di output in modo che terminino con "_bytes".

Dati di input per la previsione online

Le istanze di input per la previsione online vengono passate come corpo del messaggio per la richiesta predict. Per la formattazione del corpo della richiesta e della risposta, consulta i dettagli della richiesta di previsione.

In breve: imposta ogni istanza come elemento di un elenco e assegna un nome al membro dell'elenco instances. Quindi, l'esempio JSON di semplice istanza di dati riportato 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 che utilizzi per le previsioni batch.

Dati di input per la previsione batch

I dati di input per la previsione batch vengono forniti in uno o più file di testo contenenti righe di dati di istanze JSON come descritto sopra. Un file di input non contiene intestazioni di colonna o altra formattazione diversa dalla 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 job di previsione batch utilizzando l'elaborazione distribuita. Ciò significa che i dati vengono distribuiti su un cluster arbitrario di macchine virtuali e vengono elaborati in un ordine imprevedibile. Per poter trovare corrispondenze tra le previsioni restituite con le istanze di input, devi definire le chiavi delle istanze. Una chiave di istanza è un valore univoco di ogni istanza che è univoco tra le istanze in un set di dati. La chiave più semplice è un numero di indice.

Dovresti passare le chiavi attraverso il grafico inalterate nell'applicazione di addestramento. Se i dati non dispongono già di chiavi di istanza, puoi aggiungerle durante la pre-elaborazione dei dati.

Versioni runtime

Con il rilascio di nuove versioni di AI Platform Prediction, è possibile che i modelli sviluppati su versioni precedenti diventino obsoleti. Ciò è particolarmente pertinente se si arriva a una versione del modello efficace che rimane invariata per un lungo periodo di tempo. Devi esaminare il criterio relativo al controllo delle versioni di AI Platform Prediction e assicurarti di comprendere la versione del runtime di AI Platform Prediction che utilizzi per addestrare le versioni del modello.

Versioni e previsioni di runtime

Quando crei una versione del modello, devi specificare una versione del runtime di AI Platform Prediction supportata. In questo modo viene stabilita l'impostazione predefinita della versione del modello.

Puoi specificare una versione del runtime da utilizzare quando avvii un job di previsione batch. Ciò consente di ottenere 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 del job. L'utilizzo di una versione del runtime diversa potrebbe causare errori imprevisti.

Non puoi richiedere previsioni online da modelli esterni al servizio AI Platform Prediction, pertanto non esiste un'opzione per eseguire l'override della versione di runtime predefinita nella richiesta.

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

Regioni e previsioni

Google Cloud utilizza le regioni, suddivise in zone, per definire la posizione geografica delle risorse di calcolo fisiche. Quando esegui il deployment di un modello per la previsione utilizzando AI Platform Prediction, devi specificare la regione predefinita in cui 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 vengono sempre fornite dalla regione predefinita specificata per il modello.

Per visualizzare 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 di previsione

La previsione batch genera log dei job visualizzabili in Cloud Logging. Puoi anche ottenere log per le richieste di previsione online se configuri il modello in modo che venga generato al momento della creazione. Tieni presente che devi specificare questa opzione quando crei la risorsa del modello in AI Platform Prediction. Se tutte le versioni di un modello generano log per le previsioni online, o nessuna di esse lo fa.

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

Recupero di 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 AI Platform Prediction. Anziché specificare un nome di modello o versione, puoi utilizzare l'URI di una località di Cloud Storage in cui è archiviato il modello che vuoi eseguire.

Poiché un modello di cui non è stato eseguito il deployment non ha una versione predefinita del runtime, devi impostarla esplicitamente nella richiesta del 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 di AI Platform Prediction per ospitare i tuoi modelli in produzione, ma puoi anche usarlo per testare i tuoi modelli. Tradizionalmente, il test del modello è il passaggio prima della preparazione al deployment di una soluzione di machine learning. Lo scopo di un test superato è testare il modello in un ambiente il più vicino possibile a quello in cui verrà utilizzato in situazioni reali.

Ricorda che puoi eseguire contemporaneamente più versioni di un modello nel servizio. Ciò significa che, se necessario, puoi eseguire contemporaneamente più revisioni del tuo modello nei test, se necessario. Inoltre, semplifica il deployment di una versione di produzione del modello di cui è stato eseguito il deployment durante il test della revisione successiva. Come con gran parte dello sviluppo di applicazioni di machine learning, la disponibilità di dati aggiornati è spesso un fattore limitante. Dovresti sviluppare strategie per suddividere i dati in tuo possesso e raccogliere nuovi dati da usare per i test.

Passaggi successivi