本頁說明如何從 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 資料庫和 Vertex AI 端點位於同一專案,則不需要進行額外設定。
如果 Spanner 專案沒有 Spanner 服務代理程式帳戶,請執行下列指令建立該帳戶:
gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`
按照「授予單一角色」一文中的步驟,將 Spanner API Service Agent
角色授予 Vertex AI 專案中的 Spanner 服務代理程式帳戶 service-PROJECT_NUMBER@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 參考資料。
從 Model Garden 選取模型,然後使用 ML.PREDICT
GoogleSQL 函式產生預測結果。
SELECT * FROM ML.PREDICT(
MODEL `MODEL_NAME`,
`INPUT_RELATION`[, `PARAMETERS`])
更改下列內容:
MODEL_NAME
:您要為模型指定的名稱如要進一步瞭解模型,請參閱生成式 AI 的模型 API 參考資料。
INPUT_RELATION
:TABLE table_name
或子查詢,提供資料以執行機器學習預測。PARAMETERS
:包含model_id
支援參數的STRUCT
值。
您也可以使用 SAFE.ML.PREDICT
傳回 null
,而非預測中的錯誤。如果執行大型查詢時,可以容許部分預測失敗,這項功能就非常實用。
PostgreSQL
從 Model Garden 選取模型,然後使用 ML_PREDICT_ROW
PostgreSQL 函式產生預測結果。
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
:預測呼叫的輸入內容,格式為 JSONPARAMETERS
:預測呼叫的選用參數,格式為 JSON
這項查詢會產生 JSON 回應。如要進一步瞭解模型的 JSON 回應訊息,請參閱 PredictResponse。
使用 Vertex AI 模型端點
如要透過 Spanner Vertex AI 整合服務使用已訓練或下載的模型,請先將模型部署至 Vertex AI。如要進一步瞭解如何在 Vertex AI 中將模型部署至端點,請參閱「將模型部署至端點」。
GoogleSQL
在 Vertex AI 端點中使用模型和 ML.PREDICT
GoogleSQL 函式,產生預測結果。如要搭配 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 參考資料。
從 Model Garden 選取模型,然後使用 ML.PREDICT
GoogleSQL 函式產生預測結果。
SELECT * FROM ML.PREDICT(
`MODEL_ID`,
`INPUT_RELATION`[, `PARAMETERS`])
更改下列內容:
MODEL_ID
:要使用的 ML 模型 ID。INPUT_RELATION
:要執行 ML 預測的資料表或子查詢。PARAMETERS
:包含model_name
支援參數的STRUCT
值。
這項查詢會產生關係,其中包含模型的所有輸出資料欄和輸入關係的所有資料欄。
PostgreSQL
在 Vertex AI 端點中使用模型,並搭配 ML.PREDICT
PostgreSQL 函式產生預測結果。
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 模型,根據以引數形式提供的簡短提示生成文字。這個模型是 Gemini in Spanner 的一部分。
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" |
+--------------------+