Generare previsioni ML utilizzando SQL

Questa pagina mostra come generare previsioni di machine learning (ML) da un database Spanner. Le previsioni di ML funzionano sia con i database con dialetto GoogleSQL sia con quelli con dialetto PostgreSQL.

L'integrazione di Spanner Agent Platform ti consente di generare previsioni utilizzando il tuo codice SQL chiamando la ML.PREDICT funzione per GoogleSQL o la spanner.ML_PREDICT_ROW funzione per PostgreSQL. Per saperne di più sull'integrazione di Spanner Agent Platform, consulta la panoramica dell'integrazione di Spanner Agent Platform.

Prima di iniziare

Prima di poter generare previsioni da un'istanza Spanner, devi preparare il database e selezionare un modello.

Configurare l'accesso per l'integrazione di Spanner Agent Platform agli endpoint Vertex AI

Spanner crea l'account di servizio e concede automaticamente le autorizzazioni necessarie quando esegue la prima istruzione DDL MODEL. Se sia il database Spanner sia l'endpoint Vertex AI si trovano nello stesso progetto, non è richiesta alcuna configurazione aggiuntiva.

Se l'account di servizio Spanner non esiste per il tuo progetto Spanner, crealo eseguendo il seguente comando:

gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`

Segui i passaggi descritti in Concedere un singolo ruolo per concedere il ruolo Spanner API Service Agent all'account service agent Spanner service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com nel tuo progetto Vertex AI.

Seleziona un modello

Quando utilizzi la funzione ML.PREDICT (per GoogleSQL) o spanner.ML_PREDICT_ROW (per PostgreSQL), devi specificare la posizione del modello ML. Il modello selezionato può essere uno dei seguenti:

  • Un modello in esecuzione in Model Garden di Vertex AI.

  • Un modello Vertex AI con un endpoint attivo a cui il Spanner service agent ha l'autorizzazione IAM per accedere.

Per saperne di più sull'integrazione di Spanner Agent Platform, consulta Come funziona l'integrazione di Spanner Agent Platform?.

Genera previsioni

A seconda del tipo di modello selezionato, i passaggi per generare le previsioni variano.

Utilizza un modello in Model Garden di Vertex AI

Per generare una previsione utilizzando un modello di Model Garden di Vertex AI, seleziona un modello da Model Garden.

GoogleSQL

Prima di utilizzare un modello con ML.PREDICT(), devi registrarlo utilizzando l'istruzione CREATE MODEL.

CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);

Sostituisci quanto segue:

  • MODEL_NAME: il nome che vuoi assegnare al modello

  • INPUT_COLUMN_NAME: il nome della colonna di input. Ad esempio, se utilizzi il modello gemini-pro, il nome della colonna di input è prompt.

  • INPUT_COLUMN_TYPE: il tipo di dati per INPUT_COLUMN_NAME

  • OUTPUT_COLUMN_NAME: il nome della colonna di output. Ad esempio, se utilizzi il modello gemini-pro, il nome della colonna di output è content.

  • OUTPUT_COLUMN_TYPE: il tipo di dati per OUTPUT_COLUMN_NAME

  • PROJECT_ID: l'ID del tuo Google Cloud progetto

  • REGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempio us-central1

  • MODEL_ID: l'ID del modello ML che vuoi utilizzare, ad esempio gemini-pro

    Per saperne di più sui modelli, consulta il riferimento dell'API Model per l'AI generativa.

Utilizza la ML.PREDICT funzione GoogleSQL con il modello selezionato da Model Garden per generare la previsione.

SELECT * FROM ML.PREDICT(
  MODEL `MODEL_NAME`,
  `INPUT_RELATION`[, `PARAMETERS`])

Sostituisci quanto segue:

  • MODEL_NAME: il nome che vuoi assegnare al modello

    Per saperne di più sui modelli, consulta il riferimento dell'API Model per l'AI generativa.

  • INPUT_RELATION: TABLE table_name o una sottoquery della tabella o della sottoquery che fornisce i dati su cui eseguire la previsione ML.

  • PARAMETERS: un valore STRUCT che contiene i parametri supportati da model_id.

Puoi anche utilizzare SAFE.ML.PREDICT per restituire null anziché un errore nelle previsioni. Questa opzione è utile nei casi in cui esegui query di grandi dimensioni in cui alcune previsioni non riuscite sono tollerabili.

PostgreSQL

Utilizza la funzione PostgreSQL ML_PREDICT_ROW con il modello selezionato da Model Garden per generare la previsione.

SELECT spanner.ml_predict_row(
  'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
  '{
    "instances": [ INSTANCES ],
    "parameters": { PARAMETERS }
   }'::jsonb);

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto

  • REGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempio us-central1

  • MODEL_ID: l'ID del modello ML che vuoi utilizzare, ad esempio gemini-pro

    Per saperne di più sui modelli, consulta il riferimento dell'API Model per l'AI generativa.

  • INSTANCES: gli input per la chiamata di previsione, in formato JSON

  • PARAMETERS: parametri facoltativi per la chiamata di previsione, in formato JSON

Questa query produce una risposta JSON. Per saperne di più sui messaggi di risposta JSON del modello, consulta PredictResponse.

Utilizza un endpoint del modello Vertex AI

Per utilizzare un modello addestrato o scaricato con l'integrazione di Spanner Agent Platform, devi eseguire il deployment del modello in Vertex AI. Per saperne di più su come eseguire il deployment di un modello su un endpoint in Vertex AI, consulta Eseguire il deployment di un modello su un endpoint.

GoogleSQL

Utilizza la funzione GoogleSQL ML.PREDICT con il modello in un endpoint Vertex AI per generare la previsione. Prima di utilizzare un modello con ML.PREDICT(), devi registrare il modello utilizzando l'CREATE MODEL istruzione. Ogni modello di cui è stato eseguito il deployment ha il proprio schema univoco. Di seguito è riportato un esempio di schema tratto da Panoramica di classificazione e regressione

CREATE MODEL MyClassificationModel
INPUT (
  length FLOAT64,
  material STRING(MAX),
  tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
  scores ARRAY<FLOAT64>,
  classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo Google Cloud progetto

  • LOCATION: l'ID della regione in cui si trova il modello, ad esempio us-central1 Google Cloud

  • ENDPOINT_ID: l'ID del modello ML che vuoi utilizzare, ad esempio gemini-pro

    Per saperne di più sui modelli, consulta il riferimento dell'API Model per l'AI generativa.

Utilizza la ML.PREDICT funzione GoogleSQL con il modello selezionato da Model Garden per generare la previsione.

SELECT * FROM ML.PREDICT(
  `MODEL_ID`,
  `INPUT_RELATION`[, `PARAMETERS`])

Sostituisci quanto segue:

  • MODEL_ID: l'ID del modello ML che vuoi utilizzare.

  • INPUT_RELATION: la tabella o la sottoquery su cui vuoi eseguire la previsione ML.

  • PARAMETERS: un valore STRUCT che contiene i parametri supportati da model_name.

Questa query produce una relazione contenente tutte le colonne di output del modello e tutte le colonne della relazione di input.

PostgreSQL

Utilizza la funzione PostgreSQL ML.PREDICT con il modello in un endpoint Vertex AI per generare la previsione.

  SELECT spanner.ml_predict_row(
    'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
    '{
      "instances": [ INSTANCES ],
      "parameters": { PARAMETERS }
      }'::jsonb);
  ```

Replace the following:
  • PROJECT_ID: l'ID del Google Cloud progetto in cui si trova il modello

  • REGION_ID: l'ID della Google Cloud regione in cui si trova il modello, ad esempio us-central1

  • ENDPOINT_ID: l'ID dell'endpoint del modello

  • INSTANCES: gli input per la chiamata di previsione, in formato JSON

  • PARAMETERS: parametri facoltativi per la chiamata di previsione, in formato JSON

Questa query produce una risposta JSON. Per saperne di più sui messaggi di risposta JSON del modello, consulta PredictResponse.

Esempi di utilizzo delle funzioni ML per generare previsioni

L'esempio seguente utilizza il gemini-pro modello, da Model Garden, per generare testo in base a un breve prompt fornito come argomento. Questo modello è disponibile come parte di Gemini in Spanner.

GoogleSQL

Registra il modello gemini-pro

CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
  default_batch_size = 1
);

Sostituisci quanto segue:

  • PROJECT: l'ID progetto
  • LOCATION: la regione in cui utilizzi Vertex AI

Esegui il modello

SELECT content
FROM ML.PREDICT(
  MODEL GeminiPro,
  (SELECT "Is 7 a prime number?" AS prompt),
  STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);

Output previsto

L'output previsto è il seguente:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+

PostgreSQL

Esegui il modello

select spanner.ml_predict_row(
  '{
    "endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
    "default_batch_size": 1
   }'::jsonb,
  '{
    "instances":[{"prompt": "Is 7 a prime number?"}],
    "parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
    }'
);

Output previsto

L'output previsto è il seguente:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+