Esportare un modello BigQuery ML per la previsione online

Questo tutorial mostra come esportare un modello BigQuery ML e poi eseguirne il deployment su Vertex AI o su una macchina locale. Utilizzerai la tabella iris dei set di dati pubblici di BigQuery e seguirai i tre scenari end-to-end riportati di seguito:

  • Addestra e implementa un modello di regressione logistica. Questa procedura si applica anche ai modelli DNN_CLASSIFIER, DNN_REGRESSOR, K-means, regressione lineare e fattorizzazione matriciale.
  • Addestra ed esegui il deployment di un modello di classificatore boosted tree. Questa procedura si applica anche al modello di regressione boosted tree.
  • Addestra ed esegui il deployment di un modello di classificazione AutoML. Questa procedura si applica anche al modello di regressione AutoML.

Crea il tuo set di dati

Crea un set di dati BigQuery per archiviare il tuo modello ML.

Console

  1. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nel riquadro Explorer, fai clic sul nome del progetto.

  3. Fai clic su Visualizza azioni > Crea set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Tipo di località, seleziona Multi-regione e poi Stati Uniti (più regioni negli Stati Uniti).

    • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.

bq

Per creare un nuovo set di dati, utilizza il comando bq mk con il flag --location. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset.

  1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US e una descrizione di BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    Anziché utilizzare il flag --dataset, il comando utilizza la scorciatoia -d. Se ometti -d e --dataset, il comando crea per impostazione predefinita un dataset.

  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il metodo datasets.insert con una risorsa dataset definita.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

Addestra ed esegui il deployment di un modello di regressione logistica

Utilizza le sezioni seguenti per scoprire come addestrare ed eseguire il deployment di un modello di regressione logistica.

Addestra il modello

Addestra un modello di regressione logistica che prevede il tipo di iris utilizzando l'istruzione BigQuery ML CREATE MODEL. Il completamento di questo job di addestramento dovrebbe richiedere circa 1 minuto.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

Esporta il modello

Esporta il modello in un bucket Cloud Storage utilizzando lo strumento a riga di comando bq. Per altri modi per esportare i modelli, consulta Esportare i modelli BigQuery ML. Il completamento del job di estrazione dovrebbe richiedere meno di un minuto.

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

Deployment e distribuzione locali

Puoi eseguire il deployment dei modelli TensorFlow esportati utilizzando il container Docker TensorFlow Serving. I seguenti passaggi richiedono l'installazione di Docker.

Scarica i file del modello esportati in una directory temporanea

mkdir tmp_dir
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive

Crea una sottodirectory della versione

Questo passaggio imposta un numero di versione (1 in questo caso) per il modello.

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Esegui il pull dell'immagine Docker

docker pull tensorflow/serving

Esegui il container Docker

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

Eseguire la previsione

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

Deployment e distribuzione online

Questa sezione utilizza Google Cloud CLI per eseguire il deployment e le previsioni sul modello esportato.

Per ulteriori informazioni sul deployment di un modello in Vertex AI per le previsioni online o in batch, consulta Eseguire il deployment di un modello su un endpoint.

Crea una risorsa modello

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Creare una versione del modello

1) Imposta le variabili di ambiente:

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2) Crea la versione:

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

Il completamento di questo passaggio potrebbe richiedere alcuni minuti. Dovresti visualizzare il messaggio Creating version (this might take a few minutes).......

3) (facoltativo) Ottieni informazioni sulla nuova versione:

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Dovresti visualizzare un output simile a questo:

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Previsione online

Per saperne di più sull'esecuzione di previsioni online su un modello di cui è stato eseguito il deployment, consulta Generare inferenze online da un modello con addestramento personalizzato.

1) Crea un file JSON delimitato da caratteri di nuova riga per gli input, ad esempio il file instances.json con i seguenti contenuti:

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2) Configura le variabili di ambiente per la previsione:

INPUT_DATA_FILE="instances.json"

3) Esegui predict:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Addestra ed esegui il deployment di un modello di classificatore boosted tree

Utilizza le seguenti sezioni per scoprire come addestrare ed eseguire il deployment di un modello di classificazione ad albero potenziato.

Addestra il modello

Addestra un modello di classificazione basato su Gradient Boosted Decision Tree che prevede il tipo di iris utilizzando l'istruzione CREATE MODEL. Il completamento di questo job di addestramento dovrebbe richiedere circa 7 minuti.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model`
  OPTIONS (model_type="boosted_tree_classifier",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

Esporta il modello

Esporta il modello in un bucket Cloud Storage utilizzando lo strumento a riga di comando bq. Per altri modi per esportare i modelli, vedi Esportare i modelli BigQuery ML.

bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model

Deployment e distribuzione locali

Nei file esportati è presente un file main.py per l'esecuzione locale.

Scarica i file del modello esportati in una directory locale

mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive

Estrai predittore

tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/

Installa la libreria XGBoost

Installa la libreria XGBoost, versione 0.82 o successive.

Eseguire la previsione

cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'

Deployment e distribuzione online

Questa sezione utilizza Google Cloud CLI per eseguire il deployment e le previsioni sul modello esportato. Per saperne di più, consulta l'articolo Generare inferenze online da un modello con addestramento personalizzato.

Per ulteriori informazioni sul deployment di un modello in Vertex AI per previsioni online o batch utilizzando routine personalizzate, vedi Eseguire il deployment di un modello su un endpoint.

Crea una risorsa modello

MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Creare una versione del modello

1) Imposta le variabili di ambiente:

MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"

2) Crea la versione:

gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15

Il completamento di questo passaggio potrebbe richiedere alcuni minuti. Dovresti visualizzare il messaggio Creating version (this might take a few minutes).......

3) (facoltativo) Ottieni informazioni sulla nuova versione:

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Dovresti visualizzare un output simile a questo:

createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Previsione online

Per saperne di più sull'esecuzione di previsioni online su un modello di cui è stato eseguito il deployment, consulta Generare inferenze online da un modello con addestramento personalizzato.

1) Crea un file JSON delimitato da nuova riga per gli input. Ad esempio, il file instances.json con i seguenti contenuti:

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2) Imposta le variabili di ambiente per predict:

INPUT_DATA_FILE="instances.json"

3) Esegui predict:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Addestra ed esegui il deployment di un modello di classificazione AutoML

Utilizza le sezioni seguenti per scoprire come addestrare ed eseguire il deployment di un modello di classificazione AutoML.

Addestra il modello

Addestra un modello di classificazione AutoML che prevede il tipo di iris utilizzando l'istruzione CREATE MODEL. I modelli AutoML richiedono almeno 1000 righe di dati di input. Poiché ml_datasets.iris ha solo 150 righe, duplichiamo i dati 10 volte. Il completamento di questo job di addestramento dovrebbe richiedere circa 2 ore.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.automl_iris_model`
  OPTIONS (model_type="automl_classifier",
      budget_hours=1, input_label_cols=["species"])
  AS SELECT
    * EXCEPT(multiplier)
  FROM
    `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'

Esporta il modello

Esporta il modello in un bucket Cloud Storage utilizzando lo strumento a riga di comando bq. Per altri modi per esportare i modelli, consulta Esportazione di modelli BigQuery ML.

bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model

Deployment e distribuzione locali

Per informazioni dettagliate sulla creazione di container AutoML, consulta Esportazione di modelli. I seguenti passaggi richiedono l'installazione di Docker.

Copiare i file del modello esportato in una directory locale

mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive

Esegui il pull dell'immagine Docker di AutoML

docker pull gcr.io/cloud-automl-tables-public/model_server

Avvia il container Docker

docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

Eseguire la previsione

1) Crea un file JSON delimitato da nuova riga per gli input. Ad esempio, il file input.json con i seguenti contenuti:

{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0},
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}]}

2) Effettua la chiamata di previsione:

curl -X POST --data @input.json http://localhost:8080/predict

Deployment e distribuzione online

La previsione online per i modelli AutoML Regressor e AutoML Classifier non è supportata in Vertex AI.