Gere previsões de ML com SQL

Esta página mostra como gerar previsões de aprendizagem automática (ML) a partir de uma base de dados do Spanner. As previsões de ML funcionam com bases de dados de dialeto GoogleSQL e bases de dados de dialeto PostgreSQL.

A integração do Spanner com a Vertex AI permite-lhe gerar previsões através do seu código SQL chamando a função ML.PREDICT para GoogleSQL ou a função spanner.ML_PREDICT_ROW para PostgreSQL. Para mais informações sobre a integração do Spanner com o Vertex AI, consulte o artigo Vista geral da integração do Spanner com o Vertex AI.

Antes de começar

Antes de poder gerar previsões a partir de uma instância do Spanner, tem de preparar a base de dados e selecionar um modelo.

Configure o acesso da integração do Spanner Vertex AI aos pontos finais do Vertex AI

O Spanner cria o agente de serviço e concede as autorizações necessárias automaticamente quando o Spanner executa a primeira declaração MODEL DDL. Se a base de dados do Spanner e o ponto final do Vertex AI estiverem no mesmo projeto, não é necessária configuração adicional.

Se a conta do agente do serviço do Spanner não existir para o seu projeto do Spanner, crie-a executando o seguinte comando:

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

Siga os passos descritos no artigo Atribua uma única função para atribuir a função Spanner API Service Agent à conta do agente de serviço do Spanner service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com no seu projeto do Vertex AI.

Selecione um modelo

Quando usa a função ML.PREDICT (para GoogleSQL) ou spanner.ML_PREDICT_ROW (para PostgreSQL), tem de especificar a localização do modelo de ML. O modelo selecionado pode ser um dos seguintes:

Para saber mais sobre a integração do Spanner com a Vertex AI, consulte o artigo Como funciona a integração do Spanner com a Vertex AI?.

Gere previsões

Consoante o tipo de modelo selecionado, os passos para gerar as previsões são diferentes.

Use um modelo no Vertex AI Model Garden

Para gerar uma previsão com um modelo do Vertex AI Model Garden, selecione um modelo do Model Garden.

GoogleSQL

Antes de usar um modelo com ML.PREDICT(), tem de registar o modelo com a declaração 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'
);

Substitua o seguinte:

  • MODEL_NAME: o nome que quer dar ao seu modelo

  • INPUT_COLUMN_NAME: o nome da coluna de entrada. Por exemplo, se usar o modelo gemini-pro, o nome da coluna de entrada é prompt.

  • INPUT_COLUMN_TYPE: o tipo de dados de INPUT_COLUMN_NAME

  • OUTPUT_COLUMN_NAME: o nome da coluna de saída. Por exemplo, se usar o modelo gemini-pro, o nome da coluna de saída é content.

  • OUTPUT_COLUMN_TYPE: o tipo de dados de OUTPUT_COLUMN_NAME

  • PROJECT_ID: o ID do seu Google Cloud projeto

  • REGION_ID: o ID da região em que o modelo está localizado, por exemplo, us-central1 Google Cloud

  • MODEL_ID: o ID do modelo de AA que quer usar, por exemplo, gemini-pro

    Para mais informações sobre modelos, consulte a referência da API Model para IA generativa.

Use a função ML.PREDICT GoogleSQL com o modelo selecionado no Model Garden para gerar a sua previsão.

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

Substitua o seguinte:

  • MODEL_NAME: o nome que quer dar ao seu modelo

    Para mais informações sobre modelos, consulte a referência da API Model para IA generativa.

  • INPUT_RELATION: TABLE table_name ou uma subconsulta da tabela ou da subconsulta que fornece dados para executar a previsão de ML.

  • PARAMETERS: um valor STRUCT que contém parâmetros suportados por model_id.

Também pode usar SAFE.ML.PREDICT para devolver null em vez de um erro nas suas previsões. Isto é útil nos casos em que executa consultas grandes em que algumas previsões falhadas são toleráveis.

PostgreSQL

Use a função ML_PREDICT_ROW do PostgreSQL com o modelo selecionado no Model Garden para gerar a sua previsão.

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

Substitua o seguinte:

  • PROJECT_ID: o ID do seu Google Cloud projeto

  • REGION_ID: o ID da região em que o modelo está localizado, por exemplo, us-central1 Google Cloud

  • MODEL_ID: o ID do modelo de AA que quer usar, por exemplo, gemini-pro

    Para mais informações sobre modelos, consulte a referência da API Model para IA generativa.

  • INSTANCES: as entradas para a chamada de previsão, no formato JSON

  • PARAMETERS: parâmetros opcionais para a chamada de previsão, no formato JSON

Esta consulta produz uma resposta JSON. Para mais informações sobre as mensagens de resposta JSON do modelo, consulte PredictResponse.

Use um ponto final do modelo do Vertex AI

Para usar um modelo preparado ou transferido com a integração do Vertex AI do Spanner, tem de implementar o modelo no Vertex AI. Para mais informações sobre como implementar um modelo num ponto final na Vertex AI, consulte Implemente um modelo num ponto final.

GoogleSQL

Use a função ML.PREDICT do GoogleSQL com o modelo num ponto final do Vertex AI para gerar a sua previsão. Antes de usar um modelo com ML.PREDICT(), tem de registar o modelo através da declaração CREATE MODEL. Cada modelo implementado tem o seu próprio esquema exclusivo. Segue-se um esquema de exemplo da vista geral de classificação e regressão

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'
)

Substitua o seguinte:

  • PROJECT_ID: o ID do seu Google Cloud projeto

  • LOCATION: o ID da região em que o modelo está localizado, por exemplo, us-central1 Google Cloud

  • ENDPOINT_ID: o ID do modelo de AA que quer usar, por exemplo, gemini-pro

    Para mais informações sobre modelos, consulte a referência da API Model para IA generativa.

Use a função ML.PREDICT GoogleSQL com o modelo selecionado no Model Garden para gerar a sua previsão.

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

Substitua o seguinte:

  • MODEL_ID: o ID do modelo de AA que quer usar.

  • INPUT_RELATION: a tabela ou a subconsulta na qual quer executar a previsão de ML.

  • PARAMETERS: um valor STRUCT que contém parâmetros suportados por model_name.

Esta consulta produz uma relação que contém todas as colunas de saída do modelo e todas as colunas da relação de entrada.

PostgreSQL

Use a função ML.PREDICT do PostgreSQL com o modelo num ponto final do Vertex AI para gerar a sua previsão.

  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: o ID do projeto Google Cloud no qual o modelo está localizado

  • REGION_ID: o ID da Google Cloud região em que o modelo está localizado, por exemplo, us-central1

  • ENDPOINT_ID: o ID do ponto final do modelo

  • INSTANCES: as entradas para a chamada de previsão, no formato JSON

  • PARAMETERS: parâmetros opcionais para a chamada de previsão, no formato JSON

Esta consulta produz uma resposta JSON. Para mais informações sobre as mensagens de resposta JSON do modelo, consulte PredictResponse.

Exemplos de utilização de funções de ML para gerar previsões

O exemplo seguinte usa o modelo gemini-pro do Model Garden para gerar texto com base num comando curto fornecido como argumento. Este modelo está disponível como parte do Gemini no Spanner.

GoogleSQL

Registe o modelo 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
);

Substitua o seguinte:

  • PROJECT: o ID do projeto
  • LOCATION: a região onde está a usar o Vertex AI

Execute o modelo

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)
);

Resultado esperado

O resultado esperado é o seguinte:

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

PostgreSQL

Execute o modelo

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}
    }'
);

Resultado esperado

O resultado esperado é o seguinte:

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