Nesta página, mostramos como gerar previsões de machine learning (ML) usando um banco de dados do Spanner. As previsões de ML funcionam com bancos de dados GoogleSQL e PostgreSQL.
Com a integração da Vertex AI do Spanner, é possível gerar previsões usando o 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 do Spanner, consulte Visão geral da integração da Vertex AI do Spanner.
Antes de começar
Antes de gerar previsões com base em uma instância do Spanner, prepare o banco de dados e selecione um modelo.
Configurar o acesso da 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 ele executa a primeira instrução DDL MODEL. Se o banco de dados do Spanner e o endpoint da Vertex AI estiverem no mesmo projeto, nenhuma outra configuração será necessária.
Se a conta do agente de serviço do Spanner não existir para seu projeto do Spanner, crie-a 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 do agente de serviço do Spanner
service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com
no seu
projeto da Vertex AI.
Selecione um modelo
Ao usar a função ML.PREDICT
(para GoogleSQL) ou
ML_PREDICT_ROW
para PostgreSQL, você precisa especificar o local
do modelo de ML. O modelo selecionado pode ser um dos seguintes:
Um modelo em execução no Grupo de modelos da Vertex AI.
Um modelo da Vertex AI com um endpoint ativo que seu agente de serviço do Spanner tem permissão do IAM para acessar.
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 Grupo de modelos da Vertex AI
Para gerar uma previsão usando um modelo do Grupo de modelos da Vertex AI, selecione um modelo do Grupo de modelos.
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 modeloINPUT_COLUMN_NAME
: o nome da coluna de entrada. Por exemplo, se você estiver usando o modelogemini-pro
, o nome da coluna de entrada seráprompt
.INPUT_COLUMN_TYPE
: o tipo de dados paraINPUT_COLUMN_NAME
OUTPUT_COLUMN_NAME
: o nome da coluna de saída. Por exemplo, se você estiver usando o modelogemini-pro
, o nome da coluna de saída serácontent
.OUTPUT_COLUMN_TYPE
: o tipo de dados paraOUTPUT_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. 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 de modelo para IA generativa.
Use a função GoogleSQL ML.PREDICT
com o modelo selecionado no 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 modeloPara mais informações sobre modelos, consulte Referência da API de modelo 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 valorSTRUCT
que contém parâmetros compatíveis commodel_id
.
Também é possível usar SAFE.ML.PREDICT
para retornar null
em vez de um erro nas previsões. Isso é útil nos casos de execução de consultas grandes em que algumas previsões com falha são toleráveis.
PostgreSQL
Use a função ML_PREDICT_ROW
do PostgreSQL com o modelo selecionado no Grupo de modelos 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. 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 de modelo 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 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 Vertex AI do Spanner, é necessário implantá-lo 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 ML.PREDICT
do GoogleSQL com o modelo em um
endpoint da Vertex AI para gerar sua previsão. Antes de usar um
modelo com ML.PREDICT()
, é necessário registrá-lo usando
a instrução
CREATE MODEL
. Cada modelo implantado tem seu próprio esquema exclusivo. Veja a seguir um esquema de exemplo 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 projeto do Google Cloud;LOCATION
: o ID da região do Google Cloud 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 Referência da API de modelo para IA generativa.
Use a função GoogleSQL ML.PREDICT
com o modelo selecionado no 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 a subconsulta em que você quer executar a previsão de ML.PARAMETERS
: um valorSTRUCT
que contém parâmetros compatíveis commodel_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 em um
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á localizado.REGION_ID
: o ID da região do Google Cloud 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 como usar funções de ML para gerar previsões
O exemplo a seguir usa o modelo gemini-pro, do Grupo de modelos, para gerar texto com base em um comando curto fornecido como argumento. Esse modelo está disponível como parte do Genmini no Spanner.
GoogleSQL
Registre 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 projetoLOCATION
: 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
O resultado esperado é o 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
O resultado esperado é o seguinte:
+--------------------+
| content |
+--------------------+
| "Yes" |
+--------------------+