Gerar previsões de ML usando SQL

Esta página mostra como gerar previsões de machine learning (ML) em um banco de dados do Spanner. As previsões de ML funcionam com bancos de dados do GoogleSQL e PostgreSQL.

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

Antes de começar

Antes de gerar previsões de uma instância do Spanner, prepare seu banco de dados e selecione um modelo.

Configurar o acesso à integração da Vertex AI com o Spanner aos endpoints da Vertex AI

O Spanner cria o agente de serviço e concede as permissões necessárias automaticamente quando executa a primeira instrução DDL do MODEL. Se o banco de dados do Spanner e o endpoint da Vertex AI estiverem no mesmo projeto, nenhuma configuração adicional será necessária.

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

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

Siga as etapas descritas em Conceder um único papel para conceder o papel Spanner API Service Agent à conta service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com do agente de serviço do Spanner no seu projeto da Vertex AI.

Selecione um modelo

Ao usar a função ML.PREDICT (para o SQL do Google) ou spanner.ML_PREDICT_ROW (para o PostgreSQL), é necessário especificar o local do modelo de ML. O modelo selecionado pode ser um destes:

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

gere previsões

Dependendo do tipo de modelo selecionado, as etapas para gerar as previsões serão diferentes.

Usar um modelo no Model Garden da Vertex AI

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

GoogleSQL

Antes de usar um modelo com ML.PREDICT(), é necessário registrá-lo usando a instruçã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:

  • MODEL_NAME: o nome que você quer dar ao modelo

  • INPUT_COLUMN_NAME: o nome da coluna de entrada. Por exemplo, se você usar o modelo gemini-pro, o nome da coluna de entrada será 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 você usar o modelo gemini-pro, o nome da coluna de saída será content.

  • OUTPUT_COLUMN_TYPE: o tipo de dados de OUTPUT_COLUMN_NAME

  • PROJECT_ID: o ID do seu Google Cloud .

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

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

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

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

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

Substitua:

  • MODEL_NAME: o nome que você quer dar ao modelo

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

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

  • PARAMETERS: um valor STRUCT que contém parâmetros com suporte de model_id.

Também é possível usar SAFE.ML.PREDICT para retornar null em vez de um erro nas previsões. Isso é útil nos casos em que são executadas consultas grandes em que algumas previsões com falhas são toleráveis.

PostgreSQL

Use a função PostgreSQL ML_PREDICT_ROW com o modelo selecionado no Model Garden para gerar a 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:

  • PROJECT_ID: o ID do seu Google Cloud .

  • REGION_ID: o ID da região em que o modelo está localizado. Por exemplo, us-central1.

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

    Para mais informações sobre modelos, consulte a referência da API de modelos 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

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

Usar um endpoint de modelo da Vertex AI

Para usar um modelo treinado ou transferido por download com a integração da Spanner Vertex AI, é necessário implantar o modelo na Vertex AI. Para mais informações sobre como implantar um modelo em um endpoint na Vertex AI, consulte Implantar um modelo em um endpoint.

GoogleSQL

Use a função GoogleSQL ML.PREDICT com o modelo em um endpoint da Vertex AI para gerar a previsão. Antes de usar um modelo com ML.PREDICT(), é necessário registrá-lo usando a instrução CREATE MODEL. Cada modelo implantado tem um esquema exclusivo. Confira a seguir um exemplo de esquema da Visão 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:

  • PROJECT_ID: o ID do seu Google Cloud .

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

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

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

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

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

Substitua:

  • MODEL_ID: o ID do modelo de ML que você quer usar.

  • INPUT_RELATION: a tabela ou subconsulta em que você quer executar a previsão de ML.

  • PARAMETERS: um valor STRUCT que contém parâmetros com suporte de model_name.

Essa 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 PostgreSQL ML.PREDICT com o modelo em um endpoint da Vertex AI para gerar a 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 do Google Cloud em que o modelo está localizado

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

  • ENDPOINT_ID: o ID do endpoint 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

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

Exemplos de uso de funções de ML para gerar previsões

O exemplo a seguir usa o modelo gemini-pro, do Model Garden, para gerar texto com base em um comando curto fornecido como um argumento. Esse modelo está disponível como parte do Gemini no Spanner.

GoogleSQL

Registrar 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:

  • PROJECT: o ID do projeto;
  • LOCATION: a região em que você está usando a Vertex AI.

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

Saída esperada

A saída esperada é a seguinte:

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

PostgreSQL

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

Saída esperada

A saída esperada é a seguinte:

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