Puoi ospitare i modelli addestrati di machine learning nel cloud e utilizzare AI Platform Prediction per dedurre valori di destinazione per i nuovi dati. In questa pagina vengono trattati l'hosting e la previsione del modello, oltre a introdurre considerazioni da tenere presenti per i tuoi progetti.
Come funziona
Il servizio AI Platform Prediction gestisce le risorse di calcolo nel cloud per l'esecuzione dei tuoi modelli. Puoi richiedere previsioni dai tuoi modelli e ottenere i valori target previsti per ciascuno. Ecco la procedura per iniziare a fare previsioni nel cloud:
Esporta il modello come artefatti che puoi eseguire in AI Platform Prediction.
Crei una risorsa del modello in AI Platform Prediction e quindi della versione del modello salvato.
Se esegui il deployment di una previsione personalizzata , devi fornire anche il codice al momento della previsione.
Formatta i dati di input per la previsione e richiedi una previsione online o batch.
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 garantito, in genere viene mantenuta pronta per l'esecuzione una versione del modello che utilizzi regolarmente.
Quando utilizzi la previsione batch, che è supportata solo per i modelli di TensorFlow, la procedura è un po' più complessa:
Il servizio di previsione alloca le risorse per eseguire il job. Questo include uno o più nodi di previsione.
Il servizio ripristina il grafico TensorFlow su ciascun nodo allocato.
Il servizio di previsione distribuisce i dati di input tra i nodi allocati.
Ogni nodo esegue il grafico e salva le previsioni in il percorso di Cloud Storage da te specificato.
Quando tutti i dati di input sono stati elaborati, il servizio il job e rilascia le risorse assegnate.
Deployment del modello
Il servizio AI Platform Prediction può ospitare i tuoi modelli in modo che tu possa ottenere previsioni nel cloud. Il processo di hosting di un modello salvato è chiamato deployment. Il servizio di previsione gestisce l'infrastruttura necessaria per eseguire il tuo modello su larga scala e lo rende disponibile per le richieste di previsione online e batch. Questa sezione descrive il deployment del modello.
Informazioni su modelli e versioni
AI Platform Prediction organizza i 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 una
modello di machine learning del censimento. L'entità che crei, denominata census
, è un
container per le effettive implementazioni del modello di machine learning, che sono
denominate versioni.
Lo sviluppo di un modello di machine learning è un processo iterativo. Per questo motivo, il paradigma di risorse AI Platform Prediction è configurato partendo dal presupposto è che creerai più versioni di ogni modello di machine learning. Questa terminologia può creare confusione perché una risorsa modello di AI Platform Prediction non è in realtà un modello di machine learning autonomo. Nella previsione di AI Platform un modello è un container per le versioni del modello di machine learning.
Che cosa contiene una versione?
Il "modello" di cui esegui il deployment in AI Platform Prediction come versione del modello è costituito da uno o più artefatti prodotti dall'addestramento con framework ospitati, come TensorFlow, scikit-learn o XGBoost. it a prescindere dal fatto che tu abbia addestrato il tuo modello nel cloud utilizzando AI Platform Training o altrove.
Puoi anche eseguire il deployment di una previsione personalizzata (beta), nel qual caso puoi fornisce alla versione del modello codice e artefatti di addestramento aggiuntivi 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 modifichi completamente il modello tra le versioni. Un modello è uno strumento organizzativo che puoi utilizzare indipendentemente più adatto alla tua situazione.
Capita spesso, soprattutto dopo aver creato una versione in produzione, mantenere su input e output lo stesso valore tra le versioni del modello. In questo modo puoi cambiare versione senza dover modificare un'altra struttura dell'applicazione che potresti avere costruito attorno al tuo modello. Inoltre, semplifica il test delle nuove versioni con i dati esistenti.
Versione predefinita
Ogni modello con almeno una versione ha una versione predefinita, che viene impostata quando viene creata la prima versione. Se richiedi previsioni specificando solo nome del modello, AI Platform Prediction utilizza la versione predefinita del modello.
Tieni presente che l'unica volta in cui il servizio imposta automaticamente la versione predefinita è
quando crei il primo. Puoi creare manualmente qualsiasi versione successiva
per impostazione predefinita
projects.models.versions.setDefault
(esposto anche come gcloud ai-platform versions set-default
e come opzione nel
Elenco delle versioni della pagina Dettagli modello nella console Google Cloud (vai a
alla pagina dei dettagli del modello facendo clic sul tuo modello nell'elenco dei modelli
pagina Modelli). Questo
consente, ad esempio, di utilizzare una versione predefinita stabile per fornire previsioni
in produzione durante i test delle versioni più recenti senza creare un modello dedicato
per i test.
Denominazione di modelli e versioni
I nomi del modello e della versione devono:
- Contenere solo lettere maiuscole e minuscole (con sensibilità alle maiuscole), numeri e trattini bassi.
- Inizia con una lettera.
- Contenere un massimo di 128 caratteri.
- Deve essere univoco 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 sceglierli da elenchi di molti nomi nei log o nei report.
- È meglio che i nomi delle versioni siano brevi e semplici. È più facile identificare "v1" in un elenco di risorse rispetto a "2017_01_29T13_54_58", ad esempio.
Limiti di modelli e versioni
Per scoprire quanti modelli e versioni puoi creare in un progetto Google Cloud, consulta Quote delle risorse.
Parametri di deployment del modello
La previsione di AI Platform richiede alcune informazioni per creare la versione del modello.
Puoi anche configurare alcune opzioni. Questa sezione descrive le
di entrambi i tipi. Questi parametri vengono definiti
Version
o aggiunto per comodità nel gcloud ai-platform versions create
.
- Nome versione
- Un nome della 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 ricevi le informazioni sulla versione con l'API. Né Google Cloud CLI né la console Google Cloud mostrano la descrizione.
- URI deployment
- Devi fornire l'URI della posizione di Cloud Storage in cui è archiviato il tuo SavedModel. AI Platform Prediction estrae il modello da questo
e ne esegue il deployment. Questo parametro è chiamato
--origin
nel comandogcloud ai-platform versions create
. Se esegui il deployment di una 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 SavedModel. - Versione runtime
- La previsione di AI Platform 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 del runtime determina principalmente la versione di TensorFlow utilizzata dal servizio di previsione per eseguire il modello. Quando esegui un job di previsione batch, per eseguire l'override della versione del runtime assegnata. La previsione online è sempre utilizza la versione del runtime impostata al momento del deployment della versione del modello.
- Scalabilità manuale
Puoi specificare il numero di nodi di previsione da mantenere in esecuzione per alla 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 usare un SavedModel sul tuo computer locale. Lo strumento lo esegue nella posizione Cloud Storage specificata prima di eseguirlo in AI Platform Prediction.
Tracciare il grafico delle modifiche per la previsione
Potresti aver incluso le operazioni TensorFlow nel grafico di calcolo che si sono rivelate utili principalmente nel contesto della formazione. Dopo aver addestrato il modello, puoi rimuovile dal grafico prima di esportare la versione finale.
Molti dei consigli forniti nella pagina di sviluppo di applicazioni di addestramento ha come obiettivo la previsione un'esperienza senza intervento manuale. In alcuni casi, si tratta di modifiche apportate al modello quando la maggior parte dell'addestramento è stata completata e puoi iniziare a implementare le versioni.
Generazione di previsioni
Puoi inviare nuovi dati alle versioni del modello di cui è stato eseguito il deployment per ottenere le previsioni. La le seguenti sezioni descrivono importanti considerazioni sulla previsione.
Previsione online e previsione batch
Scopri di più sulle differenze tra previsioni online e batch.
Informazioni sui nodi di previsione e sull'allocazione delle risorse
AI Platform Prediction misura la quantità di elaborazione che consumi per la previsione in ore di nodo. Questa sezione descrive questi nodi e come vengono allocati per i diversi tipi di previsione.
È più facile pensare a un nodo come a una macchina virtuale (VM), anche se sono implementati con un meccanismo diverso rispetto a una VM tradizionale. Per ogni nodo viene eseguito il provisioning di una determinata quantità di potenza di elaborazione e memoria. Ha anche un un'immagine del sistema operativo e una configurazione del software per ottenere previsioni.
Sia la previsione online che quella batch eseguono il nodo con elaborazione distribuita, pertanto una determinata richiesta o un determinato job può 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 ha lo stesso costo dell'esecuzione di un nodo per venti minuti. Allocazione delle previsioni online e batch nodi in modo diverso, il che può avere un impatto sostanziale su ciò che sarai carico.
Allocazione dei nodi per la previsione batch
Il servizio di previsione batch scala il numero di nodi utilizzati per ridurre al minimo il tempo necessario per l'esecuzione del job. Per farlo, il servizio:
Alloca alcuni nodi per gestire il job quando lo avvii.
Scala il numero di nodi durante il job nel tentativo di ottimizzare efficienza operativa. Ogni nodo richiede tempo per l'avvio, pertanto il servizio tenta di allocarne una quantità sufficiente in modo che il tempo di avvio venga compensato dalla riduzione del tempo trascorso.
Arresta i nodi non appena il job è terminato.
Puoi influire sulla scalabilità di un job di previsione batch specificando un numero massimo di nodi da utilizzare. In genere, è consigliabile utilizzare il maggior numero di nodi possibile, ma l'utilizzo dei nodi è soggetto alle norme relative alle quote di AI Platform Prediction. Ti consigliamo di limitare il numero di nodi assegnati a un determinato job, in particolare se condividi il progetto con altri e potresti eseguire job (di addestramento e previsione) contemporaneamente.
Allocazone di nodi per la previsione online
Il servizio di previsione online scala il numero di nodi che utilizza, per il numero di richieste che può gestire senza introdurre troppa latenza. Per farlo, il servizio:
Alloca alcuni nodi la prima volta che richiedi le previsioni dopo una lunga interruzione delle richieste.
Scala il numero di nodi in risposta al traffico di richiesta, aggiungendo nodi quando aumenta il traffico e li rimuove quando il numero di richieste è inferiore.
Mantiene almeno un nodo pronto per un periodo di diversi minuti per gestire le richieste anche quando non ce ne sono. Lo stato di disponibilità garantisce che il servizio possa pubblicare ogni previsione tempestivamente.
Si riduce a zero dopo diversi minuti senza una richiesta di previsione per la versione del modello.
Dopo che il servizio è stato ridotto a zero o quando si verifica un picco improvviso nel traffico, può essere necessario del tempo (da alcuni secondi a qualche minuto) per inizializzare i nodi per soddisfare le richieste. Il tempo di inizializzazione dipende dalle dimensioni della versione del modello, pertanto un timeout lato client può comportare l'abbandono delle richieste fino all'inizializzazione dei nuovi nodi e/o l'aumento delle latenze durante questo periodo di tempo.
Per garantire sempre la pubblicazione dei prompt, puoi specificare un numero minimo di nodi
che il servizio rimanga pronto, impostando
minNodes
per la versione del modello. Questa impostazione può aumentare i costi, poiché paghi per i nodi anche se non vengono fornite previsioni.
Limiti della scalabilità automatica
La scalabilità automatica di AI Platform Prediction per la previsione online può aiutarti a gestire tassi variabili di richieste di previsione riducendo al minimo i costi. Tuttavia, non è ideale per tutte le situazioni. Il servizio potrebbe non essere in grado di portare nodi online abbastanza velocemente da stare al passo con grandi picchi di traffico di richieste. Se le tue il traffico presenta regolarmente picchi forti e se è importante avere una latenza bassa in modo affidabile per la tua applicazione, puoi prendere in considerazione la scalabilità manuale.
Utilizzare la scalabilità manuale
È possibile influire sulla scalabilità della previsione online per una versione del modello
che specifica un numero di nodi da mantenere
in esecuzione a prescindere dal traffico. L'impostazione del parametro
di nodi interrompe manualmente la scalabilità del servizio, il che significa
che il numero di nodi specificato sia sempre pronto,
addebitato continuamente. Dovresti evitare questa situazione, a meno che il numero
richieste che il modello riceve fluttua intrinsecamente più velocemente rispetto alle richieste
la scalabilità può tenere il passo. Puoi impostare il numero di nodi da utilizzare
manualScaling
in
Versione
a cui passi
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 superiore
(a seconda che tu utilizzi la scalabilità automatica o manuale), i
nodi di previsione vengono eseguiti in più zone nella stessa regione. In questo modo, viene garantita la disponibilità continua in caso di interruzione in una delle zone.
Dati di input della previsione
I dati che utilizzi per ottenere le previsioni sono nuovi dati che hanno la stessa forma dei dati utilizzati per l'addestramento. Le previsioni online e batch utilizzano entrambi gli stessi dati (le funzionalità del modello), ma richiedono formati diversi a seconda del tipo di previsione e dell'interfaccia utilizzata. Questi formati sono riportati nella tabella seguente e descritti in maggiore dettaglio nelle sezioni seguenti:
Tipo di previsione e interfaccia | Formato di input supportato |
---|---|
Batch con chiamata API | File di testo con stringhe di istanza JSON o file TFRecord (può essere compresso) |
Batch con gcloud CLI | 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 istanze JSON o file CSV |
Stringhe JSON delle istanze
Il formato di base per la previsione sia online che batch è un elenco di dati delle istanze tensori. 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é rispetti queste regole:
Il livello superiore dei dati dell'istanza deve essere un oggetto JSON, ovvero un dizionario 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 mescolare valori numerici e di stringa.
La stringa seguente (formattata per la leggibilità) mostra un oggetto contenente un'etichetta e un'immagine, dove l'immagine è un array tridimensionale di 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 aggregarlo in un file JSON . Ad esempio, se invii un singolo tensore (in questo caso un vettore) con quattro valori non necessari, che devono essere formattati nel seguente 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 gli input contengono dati binari, devi utilizzare la codifica base64 per che lo rappresentano. È obbligatoria la seguente formattazione speciale:
La stringa codificata deve essere formattata come oggetto JSON con una singola chiave chiamata
b64
. Il seguente esempio di 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 agli alias per l'input e tensori di output in modo che terminino con "_bytes".
Dati di input della previsione online
Le istanze di input per la previsione online vengono passate come corpo del messaggio predict. Per formattazione del corpo della richiesta e della risposta, consulta dettagli della richiesta di previsione.
In breve: rendi ogni istanza un elemento di un elenco e assegna un nome all'elemento dell'elencoinstances
. Pertanto, il semplice esempio JSON di istanza di dati sopra indicato diventa:
{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}
Quando utilizzi gcloud ai-platform projects predict
per richiedere le
predizioni online, devi passare un file con lo stesso formato utilizzato per la
previsione batch.
Dati di input della previsione batch
Devi fornire dati di input per la previsione batch in uno o più file di testo contenenti righe di dati delle istanze JSON come descritto sopra. Un file di input non contiene colonne intestazioni o altre formattazioni che vanno oltre la 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 e l'elaborazione dei dati. Ciò significa che i dati vengono distribuiti tra un cluster arbitrario di macchine virtuali e vengono elaborati in un ordine imprevedibile. Per poter associare le previsioni restituite alle istanze di input, devi avere definito le chiavi delle istanze. 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 inalterate durante l'addestramento un'applicazione. Se i tuoi dati non hanno già chiavi di istanza, puoi aggiungerle come parte della preelaborazione dei dati.
Versioni runtime
Man mano che vengono rilasciate nuove versioni di AI Platform Prediction, è possibile che i modelli sviluppati in base a versioni precedenti diventeranno obsoleti. Questo è particolarmente pertinente se raggiungi una versione del modello efficace che rimane invariata per un lungo periodo. Ti consigliamo di consultare le norme relative al versionamento di AI Platform Prediction e di assicurarti di comprendere la versione di runtime di AI Platform Prediction che utilizzi per addestrare le versioni del modello.
Versioni di runtime e previsioni
Devi specificare una versione del runtime AI Platform Prediction supportata quando per creare una versione del modello. In questo modo si stabilisce dell'ambientazione.
Puoi specificare una versione del runtime da utilizzare quando avvii un job di previsione batch. al fine 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 il runtime predefinito del modello personalizzata nella richiesta di job. L'utilizzo di una versione del runtime diversa potrebbe causare errori imprevisti.
Non puoi richiedere previsioni online da modelli esterni a AI Platform Prediction, quindi non è possibile eseguire l'override del runtime predefinito personalizzata nella richiesta.
La versione del runtime predefinita impostata per una versione del modello non può essere modificata. A specifica una diversa versione del runtime per una versione del modello, esegui il deployment di una nuova versione con gli stessi artefatti di addestramento che hai usato inizialmente.
Regioni e previsioni
Google Cloud utilizza regioni suddivise in zone per definire la posizione geografica delle risorse informatiche fisiche. Quando esegui il deployment di un modello per la previsione utilizzando AI Platform Prediction, specifichi la regione predefinita in cui vuoi eseguire la previsione.
Quando avvii un job di previsione batch, puoi specificare una regione in cui eseguirlo, sostituendo la regione predefinita. Le previsioni online vengono sempre fornite regione predefinita specificata per il modello.
Per visualizzare le regioni disponibili per i servizi di previsione di AI Platform, tra cui l'addestramento dei modelli e la previsione online/collettiva, consulta la guida alle regioni.
Log di previsione
La previsione batch genera log dei job che puoi visualizzare in Cloud Logging. Puoi anche ottenere i log per le richieste di previsione online e configurare il modello per generarle al momento della creazione. Tieni presente che devi specifica questa opzione quando crei la tua risorsa del modello AI Platform Prediction; o tutte le versioni di un modello generano log previsioni online o nessuna di queste lo fa.
Puoi impostare il logging della previsione online per un modello impostando
onlinePredictionLogging
su true (True
in Python) nella
risorsa modello che utilizzi
quando crei il modello con
projects.models.create.
Se utilizzi Google Cloud CLI per creare il modello, includi
--enable-logging
flag quando esegui
gcloud ai-platform models create
Ottenere previsioni da modelli di cui non è stato eseguito il deployment
Puoi richiedere una previsione batch utilizzando un modello che non hai disegnato nel servizio AI Platform Prediction. Invece di specificare un nome di modello o di versione, puoi utilizzare l'URI di una posizione in Cloud Storage in cui il modello che vuoi eseguire.
Poiché un modello di cui è stato annullato il deployment non ha una versione di runtime predefinita prestabilita, devi impostarlo esplicitamente nella richiesta di job.
Per il resto, un job di previsione batch che utilizza un modello non 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 utilizzarlo per testarli. Tradizionalmente, il test del modello è il passaggio prima della preparazione al deployment di una macchina e machine learning di Google Cloud. Lo scopo di un test superato è testare il modello in una un ambiente molto simile a quello che verrà usato nel mondo reale in situazioni diverse.
Ricorda che puoi avere più versioni di un modello di cui è stato eseguito il deployment contemporaneamente sul servizio. Ciò significa che puoi avere più revisioni del modello durante i test contemporaneamente, se necessario. Semplifica anche la disponibilità di una versione di produzione del modello distribuito durante il test della revisione successiva. Come per 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 che raccogliere e raccogliere nuovi dati da usare per i test.
Passaggi successivi
Dedurre i valori dalle nuove istanze di dati con la previsione online.
Deduci i valori da nuove istanze di dati con previsione batch.