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 seguenti tre scenari end-to-end:

  • Addestra ed esegui il deployment di un modello di regressione logistica, valido anche per i modelli di classificatore DNN, regressore DNN, k-means, regressione lineare e fattorizzazione della matrice.
  • Addestra ed esegui il deployment di un modello di classificatore boosted tree, valido anche per il modello di regressore boosted tree.
  • Addestra ed esegui il deployment di un modello di classificatore AutoML, valido anche per il modello di regressore AutoML.

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

  • BigQuery ML
  • Cloud Storage
  • Vertex AI (facoltativo, utilizzato per la previsione online)

Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.

Per ulteriori informazioni sui costi di Cloud Storage, consulta la pagina dei prezzi di Cloud Storage.

Per ulteriori informazioni sui costi di Vertex AI, consulta Modelli con addestramento personalizzato.

Prima di iniziare

  1. Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. BigQuery è abilitato automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Abilita l'API BigQuery.

    Ruoli necessari per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita l'API

  7. Abilita l'API AI Platform Training e l'API Prediction e le API Compute Engine.

    Ruoli necessari per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita le API

  8. Installa la Google Cloud CLI e la Google Cloud CLI.

Crea il tuo set di dati

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

Console

  1. Nella Google Cloud console, 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, procedi nel seguente modo:

    • In ID set di dati, inserisci bqml_tutorial.

    • In Tipo di località, seleziona Multi-regione, quindi seleziona Stati Uniti.

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

bq

Per creare un nuovo set di dati, utilizza il bq mk --dataset comando.

  1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il datasets.insert metodo con una risorsa set di dati definita.

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

Addestra ed esegui il deployment di un modello di regressione logistica

Utilizza le seguenti sezioni 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 CREATE MODEL di BigQuery ML. 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 di questo job di estrazione dovrebbe richiedere meno di 1 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 di TensorFlow Serving. I seguenti passaggi richiedono l'installazione di Docker.

Scarica i file del modello esportato 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

Estrai l'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 &

Esegui 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 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

Crea 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) Recupera informazioni sulla nuova versione:

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

Dovresti visualizzare un output simile al seguente:

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 ulteriori informazioni sull'esecuzione delle previsioni online su un modello di cui è stato eseguito il deployment, consulta Ottenere 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) Configura le variabili di ambiente per la previsione:

INPUT_DATA_FILE="instances.json"

3) Esegui la previsione:

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 classificatore boosted tree.

Addestra il modello

Addestra un modello di classificatore boosted tree che prevede il tipo di iris utilizzando l' CREATE MODEL istruzione. 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, consulta 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 esportato in una directory locale

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

Estrai il 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.

Esegui 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 ulteriori informazioni, consulta Ottenere inferenze online da un modello con addestramento personalizzato.

Per ulteriori informazioni sul deployment di un modello in Vertex AI per le previsioni online o batch utilizzando routine personalizzate, consulta 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

Crea 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) Recupera informazioni sulla nuova versione:

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

Dovresti visualizzare un output simile al seguente:

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 ulteriori informazioni sull'esecuzione delle previsioni online su un modello di cui è stato eseguito il deployment, consulta Ottenere 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) Configura le variabili di ambiente per la previsione:

INPUT_DATA_FILE="instances.json"

3) Esegui la previsione:

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 AutoML

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

Addestra il modello

Addestra un modello di classificatore AutoML che prevede il tipo di iris utilizzando l' CREATE MODEL istruzione. 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 Esportare i modelli BigQuery ML.

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

Deployment e distribuzione locali

Per i dettagli sulla creazione di container AutoML, consulta Esportare i modelli tabulari AutoML. I seguenti passaggi richiedono l'installazione di Docker.

Copia 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

Estrai l'immagine Docker 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

Esegui 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) Esegui la chiamata di previsione:

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

Deployment e distribuzione online

La previsione online per i modelli di regressore AutoML e classificatore AutoML non è supportata in Vertex AI.

Libera spazio

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  • Puoi eliminare il progetto che hai creato.
  • In alternativa, puoi mantenere il progetto ed eliminare il set di dati e il bucket Cloud Storage.

Arresta il container Docker

1) Elenca tutti i container Docker in esecuzione.

docker ps

2) Arresta il container con l'ID container applicabile dall'elenco dei container.

docker stop container_id

Elimina le risorse Vertex AI

1) Elimina la versione del modello.

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2) Elimina il modello.

gcloud ai-platform models delete $MODEL_NAME

Elimina il set di dati

L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati che hai creato in questo tutorial:

  1. Se necessario, apri la pagina BigQuery nella Google Cloud console.

    Vai alla pagina BigQuery

  2. Nella navigazione, fai clic sul set di dati bqml_tutorial che hai creato.

  3. Fai clic su Elimina set di dati sul lato destro della finestra. Questa azione elimina il set di dati, la tabella e tutti i dati.

  4. Nella finestra di dialogo Elimina set di dati, conferma il comando di eliminazione digitando il nome del set di dati (bqml_tutorial) e poi fai clic su Elimina.

Elimina il bucket Cloud Storage

L'eliminazione del progetto rimuove tutti i bucket Cloud Storage nel progetto. Se preferisci riutilizzare il progetto, puoi eliminare il bucket che hai creato in questo tutorial

  1. Nella Google Cloud console, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Seleziona la casella di controllo del bucket che vuoi eliminare.

  3. Fai clic su Elimina.

  4. Nella finestra di overlay visualizzata, conferma di voler eliminare il bucket e i relativi contenuti facendo clic su Elimina.

Elimina il progetto

Per eliminare il progetto:

  1. Nella Google Cloud console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare e poi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi