本页面介绍了如何通过 Spanner 数据库生成机器学习 (ML) 预测。机器学习预测适用于 GoogleSQL 和 PostgreSQL 数据库。
借助 Spanner Vertex AI 集成,您可以通过针对 GoogleSQL 调用 ML.PREDICT
函数或针对 PostgreSQL 调用 spanner.ML_PREDICT_ROW
函数,从而使用 SQL 代码生成预测。如需详细了解 Spanner Vertex AI 集成,请参阅 Spanner Vertex AI 集成概览。
准备工作
您必须先准备数据库并选择模型,然后才能通过 Spanner 实例生成预测。
配置 Spanner Vertex AI 与 Vertex AI 端点的集成访问权限
当 Spanner 执行第一个 MODEL DDL 语句时,Spanner 会创建服务代理并自动授予必要的权限。如果 Spanner 数据库和 Vertex AI 端点位于同一项目中,则无需进行额外设置。
如果您的 Spanner 项目没有 Spanner 服务代理帐号,请通过运行以下命令创建该帐号:
gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`
按照授予单个角色中所述的步骤操作,将 Spanner API Service Agent
角色授予 Vertex AI 项目中的 Spanner 服务代理帐号 service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com
。
选择模型
使用 ML.PREDICT
(对于 GoogleSQL)或 spanner.ML_PREDICT_ROW
(对于 PostgreSQL)函数时,必须指定机器学习模型的位置。您选择的模型可以是以下类型之一:
在 Vertex AI Model Garden 中运行的模型。
具有活跃端点的 Vertex AI 模型,您的 Spanner 服务 IAM有权访问该端点。
如需详细了解 Spanner Vertex AI 集成,请参阅 Spanner Vertex AI 集成如何运作?。
生成预测
生成预测结果的步骤因所选模型的类型而异。
使用 Vertex AI Model Garden 中的模型
如需使用 Vertex AI Model Garden 中的模型生成预测,请从 Model Garden 中选择模型。
GoogleSQL
在通过 ML.PREDICT()
使用模型之前,您需要使用 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'
);
请替换以下内容:
MODEL_NAME
:您要为模型指定的名称INPUT_COLUMN_NAME
:输入列的名称。例如,如果使用gemini-pro
模型,则输入列名称为prompt
。INPUT_COLUMN_TYPE
:INPUT_COLUMN_NAME
的数据类型OUTPUT_COLUMN_NAME
:输出列的名称。例如,如果使用gemini-pro
模型,则输出列名称为content
。OUTPUT_COLUMN_TYPE
:OUTPUT_COLUMN_NAME
的数据类型PROJECT_ID
:您的 Google Cloud 项目的 IDREGION_ID
:模型所在 Google Cloud 区域的 ID,例如us-central1
MODEL_ID
:您要使用的机器学习模型的 ID,例如gemini-pro
如需详细了解模型,请参阅生成式 AI 的模型 API 参考文档。
将 ML.PREDICT
GoogleSQL 函数与从 Model Garden 中选择的模型搭配使用,以生成预测。
SELECT * FROM ML.PREDICT(
MODEL `MODEL_NAME`,
`INPUT_RELATION`[, `PARAMETERS`])
请替换以下内容:
MODEL_NAME
:您要为模型指定的名称如需详细了解模型,请参阅生成式 AI 的模型 API 参考文档。
INPUT_RELATION
:TABLE table_name
,或提供数据以运行机器学习预测的表或子查询的子查询。PARAMETERS
:一个STRUCT
值,包含model_id
支持的参数。
您还可以使用 SAFE.ML.PREDICT
返回 null
,而不是预测结果中的错误。当运行大型查询时,如果可以容忍某些失败的预测,这会非常有用。
PostgreSQL
将 ML_PREDICT_ROW
PostgreSQL 函数与从 Model Garden 中选择的模型搭配使用,以生成预测。
SELECT spanner.ml_predict_row(
'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
'{
"instances": [ INSTANCES ],
"parameters": { PARAMETERS }
}'::jsonb);
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 IDREGION_ID
:模型所在 Google Cloud 区域的 ID,例如us-central1
MODEL_ID
:您要使用的机器学习模型的 ID,例如gemini-pro
如需详细了解模型,请参阅生成式 AI 的模型 API 参考文档。
INSTANCES
:预测调用的输入,采用 JSON 格式PARAMETERS
:预测调用的可选参数,采用 JSON 格式
此查询会生成 JSON 响应。如需详细了解模型的 JSON 响应消息,请参阅 PredictResponse。
使用 Vertex AI 模型端点
如需将经过训练或下载的模型与 Spanner Vertex AI 集成搭配使用,您需要将该模型部署到 Vertex AI。如需详细了解如何将模型部署到 Vertex AI 中的端点,请参阅将模型部署到端点。
GoogleSQL
将 ML.PREDICT
GoogleSQL 函数与 Vertex AI 端点中的模型搭配使用,以生成预测。在通过 ML.PREDICT()
使用模型之前,您需要使用 CREATE MODEL
语句注册模型。每个已部署的模型都有自己唯一的架构。以下是分类和回归概览中的示例架构
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'
)
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 IDLOCATION
:模型所在 Google Cloud 区域的 ID,例如us-central1
ENDPOINT_ID
:您要使用的机器学习模型的 ID,例如gemini-pro
如需详细了解模型,请参阅生成式 AI 的模型 API 参考文档。
将 ML.PREDICT
GoogleSQL 函数与从 Model Garden 中选择的模型搭配使用,以生成预测。
SELECT * FROM ML.PREDICT(
`MODEL_ID`,
`INPUT_RELATION`[, `PARAMETERS`])
请替换以下内容:
MODEL_ID
:您要使用的机器学习模型的 ID。INPUT_RELATION
:要运行机器学习预测的表或子查询。PARAMETERS
:一个STRUCT
值,包含model_name
支持的参数。
此查询会生成一个关系,其中包含模型的所有输出列和输入关系的所有列。
PostgreSQL
将 ML.PREDICT
PostgreSQL 函数与 Vertex AI 端点中的模型搭配使用,以生成预测。
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
:模型所在的 Google Cloud 项目的 IDREGION_ID
:模型所在的 Google Cloud 区域的 ID,例如us-central1
ENDPOINT_ID
:模型端点的 IDINSTANCES
:预测调用的输入,采用 JSON 格式PARAMETERS
:预测调用的可选参数,采用 JSON 格式
此查询会生成 JSON 响应。如需详细了解模型的 JSON 响应消息,请参阅 PredictResponse。
使用机器学习函数生成预测的示例
以下示例使用 Model Garden 中的 gemini-pro 模型,根据作为参数提供的简短提示生成文本。此模型是 Spanner 中的 Gemini 的一部分。
GoogleSQL
注册 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
);
请替换以下内容:
PROJECT
:项目 IDLOCATION
:您使用 Vertex AI 的区域
运行模型
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)
);
预期输出
预期输出如下:
+--------------------+
| content |
+--------------------+
| "Yes" |
+--------------------+
PostgreSQL
运行模型
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}
}'
);
预期输出
预期结果如下:
+--------------------+
| content |
+--------------------+
| "Yes" |
+--------------------+