Effettuare previsioni con modelli remoti su Vertex AI

Puoi registrare un endpoint Vertex AI come modello remoto e chiamarlo direttamente da BigQuery con ML.PREDICT.

Ciò può essere utile se un modello è troppo grande per essere importato in BigQuery o se vuoi utilizzare un singolo punto di inferenza per i casi d'uso online, batch e micro-batch.

Questo tutorial utilizza un modello di analisi del sentiment personalizzato ottimizzando un modello BERT con recensioni di film di IMDB in testo normale. Il modello risultante utilizza l'input di testo (recensioni di film) e restituisce punteggi di sentiment compresi tra 0 e 1. Il modello è registrato in Vertex AI Model Registry e pubblicato su un endpoint Vertex AI. Da qui, il modello viene aggiunto a BigQuery come modello remoto. Puoi utilizzare il modello remoto in BigQuery per ottenere previsioni sul sentiment per una colonna di testo (recensioni di film dalla tabella con 100.000 righe bigquery-public-data.imdb.reviews.

Consulta il tutorial sul modello remoto BQML per un tutorial di GitHub sulla versione Python.

Panoramica del flusso di lavoro

Configurazione del tutorial

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud: Cloud Storage, Vertex AI e BigQuery. Al termine del tutorial, rimuoverai i componenti fatturabili.

  1. Fai clic qui per abilitare le API per le connessioni delle risorse cloud Vertex AI, Cloud Storage e BigQuery.
  2. Cloud Storage: per creare un bucket nella regione multipla predefinita US, segui queste istruzioni.

creazione del modello ML

Crea un modello utilizzando il tutorial sui modelli remoti BQML, che include un modello di previsione di analisi del sentiment creato ottimizzando un modello BERT aggiungendo un livello di classificazione.

Abbiamo già addestrato un modello di esempio e lo abbiamo caricato su gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ per consentirti di utilizzarlo direttamente.

Esegui il deployment del modello su Vertex AI

Segui le istruzioni per registrare il modello in Vertex AI Model Registry.

Segui le istruzioni per eseguire il deployment del modello dal registry dei modelli di Vertex AI a un endpoint Vertex AI.

Ti consigliamo di impostare il numero massimo di nodi di calcolo. In questo modo viene attivata la funzionalità di scalabilità automatica lato Vertex AI e l'endpoint può elaborare più richieste quando la tabella di dati BigQuery contiene una grande quantità di righe.

Modello remoto BigQuery ML

La creazione di un modello BigQuery ML remoto ha due componenti: una connessione alla risorsa cloud BigQuery e un modello BigQuery remoto che utilizza la connessione.

Creare una connessione a una risorsa cloud BigQuery

Per connetterti a Vertex AI, devi disporre di una connessione alla risorsa Cloud.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Per creare una connessione, fai clic su Aggiungi e poi su Connessioni a origini dati esterne.

  3. Nell'elenco Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote e BigLake (risorsa Cloud).

  4. Nel campo ID connessione, inserisci un nome per la connessione.

  5. Fai clic su Crea connessione.

  6. Fai clic su Vai alla connessione.

  7. Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio da utilizzare in un passaggio successivo.

bq

  1. In un ambiente a riga di comando, crea una connessione:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Il parametro --project_id sostituisce il progetto predefinito.

    Sostituisci quanto segue:

    • REGION: la regione di connessione
    • PROJECT_ID: il tuo ID progetto Google Cloud
    • CONNECTION_ID: un ID per la connessione

    Quando crei una risorsa di connessione, BigQuery crea un account di servizio di sistema unico e lo associa alla connessione.

    Risoluzione dei problemi: se ricevi il seguente errore di connessione, aggiorna Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera e copia l'ID account di servizio per utilizzarlo in un passaggio successivo:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    L'output è simile al seguente:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Utilizza la risorsa google_bigquery_connection.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

L'esempio seguente crea una connessione risorsa Cloud denominata my_cloud_resource_connection nella regione US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi farlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Configurare l'accesso

Concedi all'account di servizio della connessione il ruolo Utente Vertex AI. Devi concedere questo ruolo nello stesso progetto che intendi specificare nell'URL dell'endpoint del modello remoto (o nel progetto del modello se utilizzi l'endpoint della versione breve) nella sezione Creare un modello BigQuery ML remoto. Se concedi il ruolo in un progetto diverso, viene visualizzato l'errore bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Per concedere il ruolo, segui questi passaggi:

  1. Vai alla pagina IAM e amministrazione.

    Vai a IAM e amministrazione

  2. Fai clic su Concedi l'accesso.

  3. Nel campo Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.

  4. Nel campo Seleziona un ruolo, scegli Vertex AI e poi Ruolo utente Vertex AI.

  5. Fai clic su Salva.

Crea il tuo set di dati

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

  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.

    Crea il set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.

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

      I set di dati pubblici sono archiviati nella US multiregione. Per semplicità, archivia il set di dati nella stessa posizione.

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

      Pagina Crea set di dati.

Creare un modello remoto BigQuery ML

Per visualizzare lo schema di input e output del modello TensorFlow inviando una richiesta all'endpoint:

Esempio di richiesta:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"

Un esempio di risposta:

{
  "predictions": [
    [
      [ 0.999410391 ]
    ],
    [
      [ 0.000628352049 ]
    ]
  ]
}

Quando crei un modello remoto, i nomi e i tipi di campi di input e output devono essere esattamente gli stessi di input e output di Vertex AI.

Per il modello con un solo output, Vertex AI non restituisce il nome del campo. In CREATE MODEL, puoi specificare qualsiasi nome di campo.

Il seguente esempio mostra come creare un modello remoto utilizzando una connessione:

CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS(endpoint = 'ENDPOINT_URL')

Ottenere previsioni con ML.PREDICT

Ottieni le previsioni dal modello remoto in BigQuery utilizzando la funzione ML.PREDICT. Qui vengono selezionati e inviati 10.000 record per la previsione. Per impostazione predefinita, il modello remoto utilizza una dimensione batch di 128 istanze per le sue richieste.

SELECT *
FROM ML.PREDICT (
    MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
    (
        SELECT review as text
        FROM `bigquery-public-data.imdb.reviews`
        LIMIT 10000
    )
)

Aree geografiche supportate

In BigQuery esistono due tipi di località:

  • Una regione è un luogo geografico ben preciso, come Londra.
  • Per "più regioni" si intende una realtà geografica di grandi dimensioni, come gli Stati Uniti, che contiene due o più luoghi geografici.

Regione singola

In un set di dati BigQuery di una singola regione, puoi creare solo un modello remoto che utilizza un endpoint Vertex AI di cui è stato eseguito il deployment nella stessa regione. Un modello remoto nella singola regione us-central1 di BigQuery può utilizzare solo un modello Vertex AI in us-central1. Pertanto, per le singole regioni, i modelli remoti sono supportati solo nelle regioni che supportano sia Vertex AI sia BigQuery.

Più regioni

In un set di dati BigQuery multi-regione (US, EU), puoi creare solo un modello remoto che utilizza un modello remoto di cui è stato eseguito il deployment in una regione all'interno della stessa area geografica ampia (US, EU). Ad esempio: Un modello remoto in BigQuery US multi-regione può utilizzare solo un endpoint Vertex AI di cui è stato eseguito il deployment in una singola regione dell'area geografica degli Stati Uniti, ad esempio us-central1, us-east4, us-west2 e così via.

Un modello remoto nella località multiregionale dell'UE di BigQuery può utilizzare solo un endpoint Vertex AI di cui è stato eseguito il deployment in una singola regione degli stati membri dell'Unione Europea, ad esempio europe-north1, europe-west3 e così via.

Per saperne di più sulle regioni e sui multiregioni di BigQuery, consulta la pagina Località dei set di dati. Per saperne di più sulle regioni di Vertex AI, consulta le località di Vertex AI.

Utilizzo dei Controlli di servizio VPC

I Controlli di servizio VPC sono una funzionalità di Google Cloud che ti consente di configurare un perimetro sicuro per proteggerti dall'esfiltrazione di dati. Per utilizzare i Controlli di servizio VPC con i modelli remoti per una maggiore sicurezza, segui la guida ai Controlli di servizio VPC per: Creare un perimetro di servizio.

Aggiungi il progetto BigQuery della query che utilizza il modello remoto al perimetro. Aggiungi il progetto dell'endpoint al perimetro e imposta l'API Vertex AI nei servizi limitati in base al tipo di endpoint. Per maggiori dettagli, consulta i Controlli di servizio VPC di Vertex AI.

Esegui la pulizia

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.