Le routine di previsione personalizzate consentono di determinare quale codice eseguire quando invii una richiesta di previsione online ad AI Platform Prediction.
Quando esegui il deployment di una risorsa di versione in AI Platform Prediction senza utilizzare una routine di previsione personalizzata, questa gestisce le richieste di previsione eseguendo l'operazione di previsione del framework di machine learning che hai utilizzato per l'addestramento.
Tuttavia, quando esegui il deployment di una routine di previsione personalizzata come risorsa di versione, puoi indicare ad AI Platform Prediction di eseguire codice Python personalizzato in risposta a ogni richiesta di previsione ricevuta. Puoi pre-elaborare l'input di previsione prima che il modello addestrato esegua la previsione oppure puoi post-elaborare la previsione del modello prima di inviare il risultato della previsione.
Per creare una routine di previsione personalizzata, devi fornire due parti ad AI Platform Prediction quando crei la versione del modello:
Una directory del modello in Cloud Storage, che contiene tutti gli artefatti che devono essere utilizzati per la previsione.
Un pacchetto di distribuzione di origine Python
.tar.gz
in Cloud Storage contenente la tua implementazione dell'interfaccia Predictor e qualsiasi altro codice personalizzato che vuoi che AI Platform Prediction utilizzi al momento della previsione.
Puoi eseguire il deployment di una routine di previsione personalizzata solo quando utilizzi un tipo di macchina legacy (MLS1) per la versione del tuo modello.
Carica gli artefatti del modello nella directory del modello
Segui la guida al deployment dei modelli per caricare il tuo modello addestrato in Cloud Storage, insieme a qualsiasi altro file che fornisce dati o statefulness che AI Platform Prediction può utilizzare durante la previsione.
La dimensione totale del file degli artefatti del modello di cui esegui il deployment in AI Platform Prediction deve essere 500 MB o inferiore.
Puoi caricare il modello di machine learning addestrato nella directory del modello come TensorFlow SavedModel
, file model.joblib
, file model.pkl
o file model.bst
, ma puoi anche fornire il modello come file HDF5 contenente un modello tf.keras
addestrato o in un formato seriale diverso.
Puoi anche includere un file Pickle con un'istanza di una classe di preprocessore personalizzata con stato serializzato dall'addestramento.
Ad esempio, considera il seguente preprocessore, definito nel file denominato
preprocess.py
:
Durante l'addestramento su un set di dati numerico, il preprocessore centra i dati attorno allo zero, sottraendo la media di ogni colonna da ogni valore nella colonna. Quindi, puoi esportare l'istanza del preprocessore come file di pre-elaborazione, preprocessor.pkl
, che conserva le medie di ogni colonna calcolata dai dati di addestramento.
Durante la previsione, una routine di previsione personalizzata può caricare il preprocessore da questo file per eseguire una trasformazione identica sull'input di previsione.
Per scoprire come utilizzare un preprocessore stateful come questo nella tua routine di previsione personalizzata, leggi la sezione successiva, che descrive come implementare l'interfaccia Predittore.
Per esaminare un esempio completo dell'utilizzo di un preprocessore stateful durante l'addestramento e la previsione, consulta Creazione di una routine di previsione personalizzata con Keras o Creazione di una routine di previsione personalizzata con scikit-learn.
Crea il tuo predittore
Indica ad AI Platform Prediction come gestire le richieste di previsione fornendo una classe Predictor. Questa è una classe che implementa la seguente interfaccia:
I nodi di previsione di AI Platform Prediction utilizzano il metodo della classe from_path
per caricare un'istanza del Predittore. Questo metodo dovrebbe caricare gli artefatti che hai salvato nella directory del modello, i cui contenuti vengono copiati da Cloud Storage in una località indicata dall'argomento model_dir
.
Ogni volta che il deployment riceve una richiesta di previsione online, l'istanza della classe Predictor restituita da from_path
utilizza il proprio metodo predict
per generare previsioni. AI Platform Prediction serializza il valore restituito di questo metodo
in JSON e lo invia come risposta alla richiesta di previsione.
Tieni presente che il metodo predict
non ha bisogno di convertire l'input da JSON in oggetti Python né di convertire l'output in JSON; AI Platform Prediction gestisce questa operazione al di fuori del metodo predict
.
AI Platform Prediction fornisce l'argomento instances
analizzando il campo instances
dal corpo della richiesta predict
all'API AI Platform Training and Prediction. Analizza tutti gli altri campi del corpo della richiesta e li fornisce al metodo predict
come voci nel dizionario **kwargs
. Per saperne di più, leggi come strutturare una richiesta predict
all'API AI Platform Training and Prediction.
Proseguendo con l'esempio della sezione precedente, supponi che la directory del modello contenga preprocessor.pkl
(l'istanza in salamoia della classe ZeroCenterer
) e un modello tf.keras
addestrato esportato come model.h5
o un modello scikit-learn addestrato esportato come model.joblib
.
A seconda del framework di machine learning utilizzato, implementa una delle seguenti classi Predictor in un file chiamato predictor.py
:
TensorFlow
scikit-learn
Osserva che il metodo predict
converte i risultati della previsione in un elenco con il
metodo tolist
prima di restituirli. Gli array NumPy non sono serializzabili JSON, quindi devi convertirli in elenchi di numeri (che sono serializzabili JSON). In caso contrario, AI Platform Prediction non invierà la risposta alla previsione.
pacchettizza il predittore e le sue dipendenze
Devi pacchettizzare il tuo Predictor come pacchetto di distribuzione di origine .tar.gz
.
Poiché NumPy, TensorFlow e scikit-learn sono inclusi
nell'immagine di runtime di AI Platform Prediction,
non è necessario includere queste dipendenze nel tarball. Tuttavia, assicurati di includere eventuali dipendenze del Predictor che non sono preinstallate su AI Platform Prediction.
Per l'esempio precedente, devi includere preprocess.py
nel pacchetto di distribuzione sorgente, anche se il Predictor non lo importa esplicitamente.
In caso contrario, preprocessor = pickle.load(f)
restituirà un errore perché Python non riconosce la classe dell'istanza ZeroCenterer
nel file pickle.
Il seguente setup.py
mostra un modo per pacchettizzare questi script:
Per pacchettizzare e caricare l'esempio di codice personalizzato descritto in questa pagina, segui questi passaggi:
Crea i file
preprocess.py
,predictor.py
esetup.py
descritti nelle sezioni precedenti, tutti nella stessa directory. Passa a quella directory nella tua shell.Esegui
python setup.py sdist --formats=gztar
per crearedist/my_custom_code-0.1.tar.gz
.Carica questo tarball in una posizione temporanea in Cloud Storage.
Non deve essere necessariamente la directory del modello. Se prevedi di eseguire l'iterazione e il deployment di più versioni della tua routine di previsione personalizzata, ti consigliamo di caricare i pacchetti di codice personalizzati in una directory temporanea designata. Puoi incrementare l'argomento
version
insetup.py
quando aggiorni il codice per tenere traccia di versioni diverse.Il seguente comando mostra un modo per caricare il pacchetto di distribuzione di origine in Cloud Storage:
gsutil cp dist/my_custom_code-0.1.tar.gz gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/
Puoi fornire il codice per la tua routine di previsione personalizzata in uno o più pacchetti.
Esegui il deployment della tua routine di previsione personalizzata
Seleziona innanzitutto una regione in cui è disponibile la previsione online e utilizza gcloud
per creare una risorsa del modello:
gcloud ai-platform models create MODEL_NAME{"</var>"}} \
--regions CHOSEN_REGION
Assicurati che il componente gcloud beta
sia aggiornato, quindi crea una risorsa di versione prestando particolare attenzione ai seguenti flag gcloud
:
--origin
: il percorso della directory del modello in Cloud Storage.--package-uris
: un elenco separato da virgole di tarball dei codici utente in Cloud Storage, incluso quello contenente la classe Predictor.--prediction-class
: il nome completo della classe Predittore (MODULE_NAME.CLASS_NAME).--framework
: non specificare un framework durante il deployment di una routine di previsione personalizzata.--runtime-version
: le routine di previsione personalizzate sono disponibili nelle versioni di runtime dalla 1.4 alla 2.11.
Il seguente comando mostra come creare una risorsa di versione basata sui file di esempio descritti nelle sezioni precedenti:
gcloud components install beta
gcloud beta ai-platform versions create VERSION_NAME \
--model MODEL_NAME{"</var>"}} \
--runtime-version 2.11 \
--python-version 3.7 \
--origin gs://YOUR_BUCKET/PATH_TO_MODEL_DIR \
--package-uris gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/my_custom_code-0.1.tar.gz \
--prediction-class predictor.MyPredictor
Per saperne di più sulla creazione di modelli e versioni in dettaglio o per scoprire come crearli utilizzando la console Google Cloud anziché gcloud CLI, consulta la guida al deployment dei modelli.
Specifica un account di servizio
Quando crei una risorsa di versione, puoi specificare facoltativamente un account di servizio per la routine di previsione personalizzata da utilizzare durante la previsione. In questo modo puoi personalizzarne le autorizzazioni per accedere ad altre risorse Google Cloud. Scopri di più su come specificare un account di servizio per la routine di previsione personalizzata.
Passaggi successivi
- Segui un tutorial sull'utilizzo delle routine di previsione personalizzate con Keras o con scikit-learn per vedere un esempio più completo su come addestrare ed eseguire il deployment di un modello utilizzando una routine di previsione personalizzata.
- Leggi la guida all'esportazione dei modelli per scoprire come esportare gli artefatti per la previsione senza utilizzare una routine di previsione personalizzata.
- Leggi la guida al deployment dei modelli per saperne di più sul deployment delle risorse
model
eversion
in AI Platform Prediction per fornire previsioni.