Puoi ospitare i modelli addestrati di machine learning nel cloud e utilizzare AI Platform Prediction per dedurre valori di destinazione per i nuovi dati. Questa pagina illustra l'hosting e la previsione dei modelli e presenta alcune 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 valori target previsti per ciascuno. Ecco la procedura per effettuare la configurazione per fare previsioni nel cloud:
Esporta il modello come artefatti che puoi eseguire in AI Platform Prediction.
Crea una risorsa modello in AI Platform Prediction e poi una versione del modello dal modello salvato.
Se stai implementando una routine di previsione personalizzata, fornisci anche il codice da eseguire 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.
- La versione del modello viene eseguita 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. Sono inclusi uno o più nodi di previsione.
Il servizio ripristina il grafico TensorFlow su ogni 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 una posizione Cloud Storage specificata.
Quando tutti i dati di input sono stati elaborati, il servizio arresta il job e rilascia le risorse che ha allocato.
Deployment del modello
AI Platform Prediction può ospitare i tuoi modelli in modo da poterne ricavare le 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 denominato census
per contenere tutto il tuo lavoro su un
modello di machine learning del censimento degli Stati Uniti. L'entità che crei, 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 delle risorse di AI Platform Prediction è configurato presupponendo che creerai più versioni di ciascun 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. In AI Platform Prediction un modello è un contenitore 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. Non importa se hai addestrato il tuo modello nel cloud utilizzando AI Platform Training o altrove.
Puoi anche implementare una routine di previsione personalizzata (beta), in questo caso puoi fornire alla versione del modello elementi di addestramento e codice aggiuntivi per gestire le richieste di previsione.
Differenze tra le versioni
Le versioni create per una determinata risorsa modello sono arbitrarie; puoi utilizzare la stessa risorsa modello anche se modifichi completamente il modello di machine learning tra le versioni. Un modello è uno strumento organizzativo che puoi utilizzare come meglio soddisfa le tue esigenze.
È normale, soprattutto dopo aver implementato una versione in produzione, mantenere invariati gli input e gli output 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 le previsioni specificando solo un nome del modello, AI Platform Prediction utilizza la versione predefinita per quel modello.
Tieni presente che l'unico momento in cui il servizio imposta automaticamente la versione predefinita è quando ne crei la prima. Puoi impostare manualmente qualsiasi versione successiva come predefinita chiamando projects.models.versions.setDefault (disponibile 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). In questo modo, ad esempio, puoi utilizzare una versione predefinita stabile per pubblicare le previsioni in produzione, mentre testi le versioni più recenti senza creare una risorsa del modello dedicata 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.
- Deve iniziare con una lettera.
- Contenere al massimo 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. Potresti doverli scegliere tra elenchi di molti nomi in log o report.
- È preferibile mantenere i nomi delle versioni 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
AI Platform Prediction richiede alcune informazioni per creare la versione del modello.
Puoi anche configurare alcune opzioni. 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 delle altre versioni del modello.
- Descrizione
- Puoi fornire una descrizione della 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 di deployment
- Devi fornire l'URI della posizione di Cloud Storage in cui è archiviato il tuo SavedModel. AI Platform Prediction estrae il modello da questa
posizione ed esegue il deployment. Questo parametro è chiamato
--origin
nel comandogcloud 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 gli elementi utilizzati dalla versione del modello per la previsione, non solo un 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, hai la possibilità di eseguire l'override della versione di runtime assegnata. La previsione online utilizza sempre la versione di runtime impostata quando viene eseguita 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 esegue nella posizione Cloud Storage specificata prima di eseguirlo in AI Platform Prediction.
Modifiche al grafico per la previsione
Potresti aver incluso nel grafico di calcolo operazioni TensorFlow utili principalmente nel contesto dell'addestramento. Una volta addestrato il modello, puoi rimuovere queste operazioni dal grafico prima di esportare la versione finale.
Gran parte dei consigli forniti nella pagina relativa allo sviluppo di applicazioni di addestramento è rivolta all'esperienza di previsione. 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. Le sezioni seguenti descrivono considerazioni importanti sulle previsioni.
Previsione online e previsione batch
Scopri le 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 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. Contiene inoltre un'immagine del sistema operativo e una configurazione impostata del software necessario per eseguire il modello e ottenere le 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. La previsione online e quella batch allocano i nodi in modo diverso, il che può avere un effetto sostanziale sull'importo che ti verrà addebitato.
Allocazone di 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. A tal fine, il servizio:
Alloca alcuni nodi per gestire il job quando lo avvii.
Scala il numero di nodi durante il job nel tentativo di ottimizzare l'efficienza. 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 utilizzati 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 le previsioni dopo una lunga interruzione delle richieste.
Scala il numero di nodi in risposta al traffico delle richieste, aggiungendo nodi quando il traffico aumenta e rimuovendoli quando le richieste diminuiscono.
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 alcuni minuti) per inizializzare i nodi per gestire le richieste. Il tempo di inizializzazione dipende dalle dimensioni della versione del modello, pertanto un timeout lato client potrebbe comportare l'abbandono delle richieste fino all'inizializzazione dei nuovi nodi e/o l'aumento delle latenze durante questo periodo di tempo.
Per garantire un servizio sempre pronto, puoi specificare un numero minimo di nodi
che il servizio deve mantenere pronti, impostando l'opzione
minNodes
nella 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 mettere online i nodi abbastanza rapidamente per stare al passo con i picchi di traffico delle richieste. Se il tuo traffico presenta regolarmente picchi elevati e se una latenza bassa e affidabile è importante per la tua applicazione, ti consigliamo di prendere in considerazione il scaling manuale.
Utilizzare la 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. Se imposti il numero di nodi manualmente, la scalabilità del servizio viene interrotta, il che significa che il numero di nodi specificato sarà sempre pronto e ti verrà addebitato un costo continuativo. Dovresti evitare questa operazione, a meno che il numero di richieste ricevute dal tuo modello non fluttui in modo intrinseco più velocemente di quanto la scalabilità automatica possa stare al passo. Imposta il numero di nodi da utilizzare impostando
manualScaling
nell'oggetto
Versione
che passi 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 superiore
(a seconda che tu utilizzi la scalabilità automatica o manuale), i tuoi
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 degli stessi dati che hai utilizzato per l'addestramento. Le previsioni online e batch utilizzano entrambi gli stessi dati (le caratteristiche 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 istanze JSON o file TFRecord (può essere compresso) |
In 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 istanze JSON o file CSV |
Stringhe JSON delle istanze
Il formato di base sia per le previsioni online che per quelle batch è un elenco di tensori di dati delle istanze. 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 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 tuo modello accetta un solo input, non è necessario racchiuderlo in un oggetto JSON. Ad esempio, se invii un singolo tensore (in questo caso un vettore) con quattro valori, non è necessario formattarlo come segue:
{"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 rappresentarli. È 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 i tensori di input e 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 per la richiesta predict. Per la formattazione del corpo della richiesta e della risposta, consulta i dettagli della richiesta di previsione.
In breve: rendi ogni istanza un elemento di un elenco e assegna un nome all'elemento dell'elencoinstances
. Di conseguenza, l'esempio di istanza di dati JSON semplice riportato sopra 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
Fornisci i 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 intestazioni di colonna o altre formattazioni 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 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.
Devi passare le chiavi attraverso il grafo non alterate nell'applicazione di addestramento. 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 alle versioni precedenti diventino 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
Quando crei una versione del modello, devi specificare una versione di runtime di AI Platform Prediction supportata. In questo modo viene stabilita l'impostazione predefinita della versione del modello.
Puoi specificare una versione di runtime da utilizzare quando avvii un job di previsione batch. Questo è utile per ottenere previsioni utilizzando un modello che non è stato disegnato 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 del runtime diversa potrebbe causare errori imprevisti.
Non puoi richiedere previsioni online da modelli esterni ad AI Platform Prediction, pertanto non è possibile ignorare la versione di runtime predefinita nella richiesta.
La versione di runtime predefinita 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.
Regioni e previsioni
Google Cloud utilizza 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, 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 pubblicate dalla regione predefinita specificata per il modello.
Per visualizzare le regioni disponibili per i servizi di AI Platform Prediction, 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 se configurerai il modello in modo da generarli al momento della creazione. 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 oppure nessuna di esse.
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 il flag --enable-logging
quando esegui gcloud ai-platform models create
.
Generazione di previsioni da modelli non di cui non è stato eseguito il deployment
Puoi richiedere una previsione batch utilizzando un modello che non hai disegnato nel servizio AI Platform Prediction. Anziché specificare un nome di modello o versione, puoi utilizzare l'URI di una posizione Cloud Storage in cui è archiviato il modello che vuoi eseguire.
Poiché un modello di cui non è stato eseguito il deployment non ha una versione di runtime predefinita, devi impostarla 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 precedente alla preparazione per il deployment di una soluzione di machine learning. Lo scopo di un passaggio di test è testare il modello in un ambiente il più simile possibile a come verrà utilizzato nelle situazioni reali.
Ricorda che puoi avere più versioni di un modello di cui è stato eseguito il deployment contemporaneamente sul servizio. Ciò significa che, se necessario, puoi avere più revisioni del modello in test contemporaneamente. Inoltre, semplifica la creazione di una versione di produzione del modello di cui è stato eseguito il deployment 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. Devi sviluppare strategie per suddividere i dati di cui disponi e raccogliere nuovi dati da utilizzare per i test.
Passaggi successivi
Dedurre i valori dalle nuove istanze di dati con la previsione online.
Dedurre i valori dalle nuove istanze di dati con la previsione batch.