このページでは、Spanner データベースから機械学習(ML)予測を生成する方法について説明します。ML 予測は、Google SQL データベースと 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 は、サービス エージェントを作成し、Cloud Spanner が最初の MODEL DDL ステートメントを実行したときに、必要な権限を自動的に付与します。Spanner データベースと Vertex AI エンドポイントの両方が同じプロジェクトにある場合、追加の設定は必要ありません。
プロジェクトに Spanner サービス エージェント アカウントが存在しない場合は、次のコマンドを実行してcreateします。
gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`
単一ロールの付与に記載の手順に沿って、Vertex AI プロジェクトの Spanner サービス エージェント アカウント service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com
に Spanner API Service Agent
ロールを付与します。
モデルの選択
ML.PREDICT
(GoogleSQL の場合)または spanner.ML_PREDICT_ROW
(PostgreSQL の場合)関数を使用する場合は、ML モデルのロケーションを指定する必要があります。選択するモデルは次のいずれかになります。
Vertex AI Model Garden で実行されているモデル。
Spanner サービス エージェントにアクセスの IAM 権限があるアクティブなエンドポイントを持つ Vertex AI モデル。
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
: 使用する ML モデルの ID(例:gemini-pro
)モデルの詳細については、生成 AI の Model API リファレンスをご覧ください。
Model Garden で選択したモデルで ML.PREDICT
GoogleSQL 関数を使用して、予測を生成します。
SELECT * FROM ML.PREDICT(
MODEL `MODEL_NAME`,
`INPUT_RELATION`[, `PARAMETERS`])
以下のように置き換えます。
MODEL_NAME
: モデルに付ける名前モデルの詳細については、生成 AI の Model API リファレンスをご覧ください。
INPUT_RELATION
:TABLE table_name
または ML 予測を実行するデータを提供するサブクエリのテーブルまたはサブクエリ。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
: 使用する ML モデルの ID(例:gemini-pro
)モデルの詳細については、生成 AI の Model API リファレンスをご覧ください。
INSTANCES
: JSON 形式の予測呼び出しの入力PARAMETERS
: 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
: 使用する ML モデルの ID(例:gemini-pro
)モデルの詳細については、生成 AI の Model 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 をご覧ください。
ML 関数を使用して予測を生成する例
次の例では、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" |
+--------------------+