Cloud SQL インスタンスからオンライン予測を呼び出す

このページでは、Cloud SQL for PostgreSQL インスタンスからオンライン予測を呼び出す方法について説明します。

Cloud SQL では、ml_predict_row() 関数を呼び出すことで、SQL コードでオンライン予測を取得できます。詳細については、Cloud SQL を使用して生成 AI アプリケーションを作成するをご覧ください。

始める前に

Cloud SQL インスタンスからオンライン予測を呼び出すには、データベースを準備して、適切な ML モデルを選択する必要があります。

データベースを準備する

データベースを準備する手順は次のとおりです。

  1. Cloud SQL と Vertex AI のインテグレーションを設定します

  2. データベース ユーザーに、ml_predict_row() 関数を使用して予測を実行する権限を付与します。

    1. psql クライアントを使用して接続するの説明に従って、psql クライアントをプライマリ インスタンスに接続します。

    2. psql コマンド プロンプトで、データベースに接続して権限を付与します。

      \c DB_NAME
      
      GRANT EXECUTE ON FUNCTION ml_predict_row TO USER_NAME;
      

      次のように置き換えます。

      • DB_NAME: 権限を付与するデータベースの名前

      • USER_NAME: 権限を付与するユーザーの名前

ML モデルを選択する

ml_predict_row() 関数を呼び出すときに、ML モデルの場所を指定する必要があります。指定するモデルは次のいずれかです。

  • Vertex AI Model Garden で実行されているモデル。

    ml_predict_row() 関数は、表形式モデルまたはカスタムモデルでのみ予測の呼び出しをサポートしています。

  • Identity and Access Management(IAM)のアクセス権限があるアクティブなエンドポイントを持つ Vertex AI モデル。

    Cloud SQL は、オンライン予測を取得するためのプライベート エンドポイントをサポートしていません。

オンライン予測を呼び出す

ml_predict_row() SQL 関数を使用して、データに対するオンライン予測を呼び出すことができます。

関数の最初の引数の形式は、使用する ML モデルが Vertex AI Model Garden にあるか、Google Cloud プロジェクトで実行されているエンドポイントかによって異なります。

Vertex AI Model Garden でモデルを使用する

Vertex AI Model Garden で実行されている ML モデルを使用してオンライン予測を呼び出すには、ml_predict_row() SQL 関数に次の構文を使用します。

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');

次の項目を置き換えます。

  • MODEL_ID: 使用する ML モデルの ID。たとえば、テキスト用の PaLM 2 の場合は text-bison です。

  • INSTANCES: JSON 形式の予測呼び出しの入力

  • PARAMETERS: JSON 形式の予測呼び出しのパラメータ

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');

モデルの JSON レスポンス メッセージについては、生成 AI の基盤モデルのリファレンスをご覧ください。例については、呼び出しの例をご覧ください。

Vertex AI モデル エンドポイントを使用する

Vertex AI モデル エンドポイントを使用してオンライン予測を呼び出すには、ml_predict_row() SQL 関数に次の構文を使用します。

SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');

次の項目を置き換えます。

  • ENDPOINT_ID: モデルのエンドポイントの ID

  • INSTANCES: JSON 形式の予測呼び出しの入力

  • PARAMETERS: JSON 形式の予測呼び出しのパラメータ

モデルの JSON レスポンス メッセージについては、PredictResponse をご覧ください。

呼び出しの例

次の例では、Model Garden で利用可能な PaLM 2 for Text を使用して、ml_predict_row() にリテラル引数として指定された短いプロンプトに基づいてテキストを生成します。

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison', '{"instances":[{"prompt": "What are three advantages of using Cloud SQL as my SQL database server?"}], "parameters":{"maxOutputTokens":1024, "topK": 40, "topP":0.8, "temperature":0.2}}');

レスポンスは JSON オブジェクトです。オブジェクトの形式の詳細については、レスポンス本文をご覧ください。

次の例では、前の例を次のように変更しています。

  • この例では、現在のデータベースの messages.message 列の内容を入力として使用します。

  • この例では、関数のパラメータをフォーマットする際に json_build_object() 関数を使用する方法を示しています。

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison', json_build_object('instances', json_build_object('prompt', message), 'parameters', json_build_object('maxOutputTokens', 1024,'topK', 40,'topP', 0.8,'temperature', 0.2))) from messages;

messages テーブルの各行について、返された JSON オブジェクトの predictions 配列に 1 つのエントリが含まれるようになりました。

レスポンスは JSON オブジェクトであるため、PostgreSQL の矢印演算子を使用して特定のフィールドを取得できます。

SELECT ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison',json_build_object('instances', json_build_object('prompt',message), 'parameters', json_build_object('maxOutputTokens', 1024,'topK', 40,'topP', 0.8,'temperature', 0.2)))->'predictions'->0->'content' FROM messages;

ml_predict_row() の引数の例については、Vertex AI Gemini API を試すをご覧ください。

次のステップ