Vertex AI のリモートモデルで予測を行う

Vertex AI エンドポイントをリモートモデルとして登録し、ML.PREDICT を使用して BigQuery から直接呼び出すことができます。

これは、モデルが大きすぎて BigQuery にインポートできない場合や、オンライン、バッチ、マイクロバッチのユースケースで単一の推論ポイントを使用する場合に便利です。

このチュートリアルでは、書式なしテキストの IMDB 映画レビューを使用して BERT モデルを微調整することにより、カスタマイズされた感情分析モデルを使用します。結果のモデルでは、テキスト入力(映画レビュー)を使用し、感情スコアを(0, 1)の範囲で返します。モデルは Vertex AI Model Registry に登録され、Vertex AI エンドポイントで提供されます。そこから、モデルはリモートモデルとして BigQuery に追加されます。BigQuery 内のリモートモデルを使用して、テキスト列の感情予測(100,000 行のテーブル bigquery-public-data.imdb.reviews から映画のレビュー)を取得できます。

Python バージョンの GitHub チュートリアルについては、BQML リモート モデル チュートリアルをご覧ください。

ワークフローの概要

チュートリアルのセットアップ

このチュートリアルでは、課金対象である Google Cloud コンポーネントである Cloud Storage、Vertex AI、BigQuery を使用します。チュートリアルの終了時に、課金対象のコンポーネントを削除します。

  1. Vertex AI、Cloud Storage、BigQuery の Cloud Resource Connections の API を有効にするには、こちらをクリックしてください。
  2. Cloud Storage: こちらの手順に沿って、デフォルトの US マルチリージョンにバケットを作成します。

ML モデルの作成

BQML リモートモデル チュートリアルを使用してモデルを作成します。これには、分類レイヤを追加しながら BERT モデルを微調整して作成された感情分析予測モデルが含まれています。

すでにサンプルモデルをトレーニングし、直接使用できるように gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ にアップロードしています。

Vertex AI にモデルをデプロイする

手順に沿って、Vertex AI Model Registry にモデルを登録します。

手順に沿って、Vertex AI Model Registry から Vertex AI エンドポイントにモデルをデプロイします。

コンピューティング ノードの最大数を設定することをおすすめします。これにより、Vertex AI 側の自動スケーリング機能が有効になり、BigQuery データテーブルに大量の行がある場合にエンドポイントがより多くのリクエストを処理できるようになります。

BigQuery ML リモートモデル

BigQuery ML リモートモデルの作成には、BigQuery クラウド リソース接続と、その接続を使用する BigQuery リモートモデルの 2 つのコンポーネントがあります。

BigQuery クラウド リソース接続を作成する

Vertex AI に接続するには、クラウド リソース接続が必要です。

次のオプションのいずれかを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. 接続を作成するには、[追加] をクリックし、続いて [外部データソースへの接続] をクリックします。

  3. [接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。

  4. [接続 ID] フィールドに接続の名前を入力します。

  5. [接続を作成] をクリックします。

  6. [接続へ移動] をクリックします。

  7. [接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。

bq

  1. コマンドライン環境で接続を作成します。

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    --project_id パラメータは、デフォルト プロジェクトをオーバーライドします。

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

    接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。

    トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 後の手順で使用するため、サービス アカウント ID を取得してコピーします。

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    出力は次のようになります。

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

main.tf ファイルに次のセクションを追加します。

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
次のように置き換えます。

アクセス権限を設定する

接続のサービス アカウントに Vertex AI ユーザー ロールを付与します。このロールは、BigQuery ML リモートモデルの作成セクションでリモートモデル エンドポイントの URL に指定するプロジェクト(短いバージョンのエンドポイントを使用する場合はモデル プロジェクト)で付与する必要があります。別のプロジェクトでロールを付与すると、「bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource」というエラーが発生します。

ロールを付与する手順は次のとおりです。

  1. [IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. [アクセス権を付与] をクリックします。

  3. [新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。

  4. [ロールを選択] フィールドで、[Vertex AI]、[Vertex AI ユーザーロール] の順に選択します。

  5. [保存] をクリックします。

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. 「アクションを表示」> [データセットを作成] をクリックします。

    データセットを作成する。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。

      一般公開データセットは US マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

      データセットの作成ページ。

BigQuery ML リモートモデルを作成する

エンドポイントにリクエストを送信して TensorFlow モデルの入力スキーマと出力スキーマを確認するには次のようにします。

リクエストの例:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"

レスポンスの例:

{
  "predictions": [
    [
      [ 0.999410391 ]
    ],
    [
      [ 0.000628352049 ]
    ]
  ]
}

リモートモデルを作成する場合、入力と出力のフィールドの名前と型は、Vertex AI の入出力と完全に同じである必要があります。

単一出力モデルの場合、Vertex AI はフィールド名を返しません。CREATE MODEL では、任意のフィールド名を指定できます。

次の例は、接続を使用してリモートモデルを作成する方法を示しています。

CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS(endpoint = 'ENDPOINT_URL')

ML.PREDICT で予測を取得する

ML.PREDICT 関数を使用して、BigQuery 内のリモートモデルから予測を取得します。ここでは、10,000 件のレコードが選択され、予測用に送信されています。リモートモデルはデフォルトで、リクエストのバッチサイズとして 128 個のインスタンスに設定されています。

SELECT *
FROM ML.PREDICT (
    MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
    (
        SELECT review as text
        FROM `bigquery-public-data.imdb.reviews`
        LIMIT 10000
    )
)

サポートされるリージョン

BigQuery のロケーションには、次の 2 種類があります。

  • リージョンは、ロンドンなどの特定の地理的な場所です。
  • マルチリージョンは、米国などの、2 つ以上の地理的な場所を含む広い地理的なエリアとなります。

シングル リージョン

BigQuery の単一リージョン データセットでは、同じリージョンにデプロイされた Vertex AI エンドポイントを使用するリモートモデルのみを作成できます。 BigQuery の単一リージョン us-central1 のリモートモデルは、us-central1 の Vertex AI のみを使用できます。 そのため、単一リージョンの場合、リモートモデルは Vertex AI と BigQuery の両方をサポートするリージョンでのみサポートされます。

マルチリージョン

BigQuery マルチリージョン(USEU)データセットでは、同じ大規模な地理的領域(USEU)内のリージョンにデプロイされたリモートモデルを使用するリモートモデルのみを作成できます。例: BigQuery US マルチリージョン内のリモートモデルでは、米国の地理的領域の任意の単一リージョン(us-central1us-east4us-west2 など)にデプロイされた Vertex AI エンドポイントのみを使用できます。

BigQuery EU マルチリージョン内のリモートモデルでは、EU の加盟国にある任意の単一リージョン(europe-north1europe-west3 など)にデプロイされた Vertex AI エンドポイントのみを使用できます。

BigQuery リージョンとマルチリージョンの詳細については、データセットのロケーションのページをご覧ください。Vertex AI リージョンの詳細については、Vertex AI のロケーションをご覧ください。

VPC Service Controls を使用する

VPC Service Controls は、Google Cloud の機能で、データ漏洩を防ぐためのセキュアな境界を設定できます。セキュリティをさらに強化するために、リモートモデルで VPC Service Controls を使用するには、VPC Service Controls ガイドに沿って次の操作を行います。サービス境界を作成します。

リモート関数を使用したクエリの BigQuery プロジェクトを境界に追加します。エンドポイント プロジェクトを境界に追加し、エンドポイント タイプに基づいて制限付きサービスに Vertex AI API を設定します。詳細については、Vertex AI VPC Service Controls をご覧ください。

クリーンアップ

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.