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:
Um modelo em execução no Vertex AI Model Garden.
Um modelo do Vertex AI com um ponto final ativo ao qual o seu agente de serviço do Spanner tem autorização do IAM para aceder.
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 modeloINPUT_COLUMN_NAME
: o nome da coluna de entrada. Por exemplo, se usar o modelogemini-pro
, o nome da coluna de entrada éprompt
.INPUT_COLUMN_TYPE
: o tipo de dados deINPUT_COLUMN_NAME
OUTPUT_COLUMN_NAME
: o nome da coluna de saída. Por exemplo, se usar o modelogemini-pro
, o nome da coluna de saída écontent
.OUTPUT_COLUMN_TYPE
: o tipo de dados deOUTPUT_COLUMN_NAME
PROJECT_ID
: o ID do seu Google Cloud projetoREGION_ID
: o ID da região em que o modelo está localizado, por exemplo,us-central1
Google CloudMODEL_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 modeloPara 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 valorSTRUCT
que contém parâmetros suportados pormodel_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 projetoREGION_ID
: o ID da região em que o modelo está localizado, por exemplo,us-central1
Google CloudMODEL_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 JSONPARAMETERS
: 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 projetoLOCATION
: o ID da região em que o modelo está localizado, por exemplo,us-central1
Google CloudENDPOINT_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 valorSTRUCT
que contém parâmetros suportados pormodel_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á localizadoREGION_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 modeloINSTANCES
: as entradas para a chamada de previsão, no formato JSONPARAMETERS
: 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 projetoLOCATION
: 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" |
+--------------------+