Gerar previsões de ML usando SQL

Nesta página, mostramos como gerar previsões de machine learning (ML) com base no banco de dados do Spanner. as previsões de ML funcionam com Bancos de dados GoogleSQL e PostgreSQL.

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

Antes de começar

Antes de poder gerar previsões de uma instância do Spanner, é preciso preparar seu banco de dados e selecionar um modelo.

Configurar o acesso para a integração da Vertex AI do Spanner aos endpoints da Vertex AI

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

Se a conta do agente de serviço do Spanner não existir para seu projeto do Spanner, crie-o 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 conceda o papel Spanner API Service Agent ao Conta do agente de serviço do Spanner service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com da sua um projeto da Vertex AI.

Selecione um modelo

Quando você usa a ML.PREDICT (para GoogleSQL) ou o spanner.ML_PREDICT_ROW (para PostgreSQL), você precisa especificar o local do modelo de ML. O modelo selecionado pode ser um dos seguintes:

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 do 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 Grupo de modelos.

GoogleSQL

Antes de usar um modelo com ML.PREDICT(), é preciso 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 estiver usando o modelo gemini-pro, o nome da coluna de entrada será prompt.

  • INPUT_COLUMN_TYPE: o tipo de dados para INPUT_COLUMN_NAME.

  • OUTPUT_COLUMN_NAME: o nome da coluna de saída. Por exemplo: se estiver usando o modelo gemini-pro, o nome da coluna de saída será content.

  • OUTPUT_COLUMN_TYPE: o tipo de dados para OUTPUT_COLUMN_NAME.

  • PROJECT_ID: o ID do seu projeto do Google Cloud;

  • REGION_ID: o ID da região do Google Cloud em que o modelo está localizado em, 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 Referência da API Model para IA generativa.

Usar o ML.PREDICT Função GoogleSQL com o modelo selecionado do Model Garden para gerar sua 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 Referência da API Model para IA generativa.

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

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

Também é possível usar SAFE.ML.PREDICT para retornar null em vez de um erro no suas previsões. Isso é útil quando se executa consultas grandes em que algumas previsões com falha são toleráveis.

PostgreSQL

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

  • PROJECT_ID: o ID do seu projeto do Google Cloud;

  • REGION_ID: o ID da região do Google Cloud em que o modelo está localizado em, 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 Referência da API Model para IA generativa.

  • INSTANCES: as entradas da 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 o 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 Vertex AI com o Spanner, é necessário implantar o modelo para a Vertex AI. Para mais informações sobre como para implantar um modelo em um endpoint da Vertex AI, consulte Implantar um modelo em um endpoint.

GoogleSQL

Use a função GoogleSQL ML.PREDICT com o modelo em uma endpoint da Vertex AI para gerar sua previsão. Antes de usar um com ML.PREDICT(), é preciso registrá-lo usando CREATE MODEL . Cada modelo implantado tem um sistema esquema. Veja a seguir um exemplo de esquema 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 projeto do Google Cloud;

  • LOCATION: o ID da região do Google Cloud em que o modelo está localizado em, 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 Referência da API Model para IA generativa.

Usar o ML.PREDICT Função GoogleSQL com o modelo selecionado do Model Garden para gerar sua 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 que você quer para executar a previsão de ML.

  • PARAMETERS: um valor de STRUCT que contém parâmetros. compatível com 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 ML.PREDICT do PostgreSQL com o modelo endpoint da Vertex AI para gerar 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 do Google Cloud em que o modelo está. localizada em

  • REGION_ID: o ID da região do Google Cloud que o modelo está localizado em, 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 o 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 gemini-pro, do Grupo de modelos para gerar texto com base em um comando curto que é fornecido como argumento. Este 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"              |
+--------------------+