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


このチュートリアルでは、Vertex AI エンドポイントを BigQuery のリモートモデルとして登録します。次に、ML.PREDICT 関数を使用して、リモートモデルを使用して予測を行います。

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

目標

  • 事前トレーニング済みの TensorFlow モデルを Vertex AI Model Registry にインポートする。
  • モデルを Vertex AI エンドポイントにデプロイします。
  • Cloud リソース接続を作成する。
  • CREATE MODEL ステートメントを使用して、BigQuery でリモートモデルを作成します。
  • ML.PREDICT 関数を使用して、リモートモデルで予測を行います。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery, Vertex AI, Cloud Storage, and BigQuery Connection APIs.

    Enable the APIs

  6. このドキュメントのタスクを実行するために必要な権限が付与されていることを確認します。

必要なロール

新しいプロジェクトを作成した場合、そのプロジェクトのオーナーには、このチュートリアルを完了するために必要なすべての IAM 権限が付与されます。

既存のプロジェクトを使用している場合は、次の操作を行います。

Make sure that you have the following role or roles on the project:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    [IAM] に移動
  2. プロジェクトを選択します。
  3. [ アクセスを許可] をクリックします。
  4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

  5. [ロールを選択] リストでロールを選択します。
  6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
  7. [保存] をクリックします。
  8. BigQuery の IAM 権限の詳細については、BigQuery の権限をご覧ください。

モデルを Vertex AI Model Registry にインポートする

このチュートリアルでは、Cloud Storage の gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ にある事前トレーニング済みの TensorFlow モデルを使用します。Cloud Storage バケットは US マルチリージョン ロケーションにあります。

このモデルは、saved_model.pb という名前の TensorFlow モデルです。これは、書式なしテキストの IMDB 映画レビューを使用して BERT モデルを微調整することにより作成された、カスタマイズされた感情分析モデルです。このモデルは、映画レビューのテキスト入力を使用し、0 ~ 1 の感情スコアを返します。モデルを Model Registry にインポートする場合は、ビルド済みの TensorFlow コンテナを使用します。

モデルをインポートする手順は次のとおりです。

  1. Google Cloud コンソールで、Vertex AI [Model Registry] ページに移動します。

    [Model Registry] に移動

  2. [インポート] をクリックします。

  3. [ステップ 1: 名前とリージョン] で、次の操作を行います。

    1. [新しいモデルとしてインポート] を選択します。

    2. [名前] に「bert_sentiment」と入力します。

    3. [説明] に「BQML tutorial model」と入力します。

    4. [リージョン] で us-central1 を選択します。Cloud Storage バケットは US マルチリージョン ロケーションにあるため、米国ベースのリージョンを選択する必要があります。

    5. [続行] をクリックします。

  4. [ステップ 2: モデルの設定] で、次の操作を行います。

    1. [新しいビルド済みコンテナにモデル アーティファクトをインポートする] を選択します。

    2. [Prebuilt container settings] セクションで、次の操作を行います。

      1. [モデル フレームワーク] で [TensorFlow] を選択します。

      2. [モデル フレームワークのバージョン] で [2.15] を選択します。

      3. [アクセラレータ タイプ] で [GPU] を選択します。

      4. [モデル アーティファクトの場所] に「gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/」と入力します。

      5. 残りのオプションはすべてデフォルト値のままにして、[インポート] をクリックします。

インポートが完了すると、モデルが [Model Registry] ページに表示されます。

Vertex AI エンドポイントにモデルをデプロイする

モデルをエンドポイントにデプロイする手順は次のとおりです。

  1. Google Cloud コンソールで、Vertex AI [Model Registry] ページに移動します。

    [Model Registry] に移動

  2. [名前] 列で [bert_sentiment] をクリックします。

  3. [デプロイとテスト] タブをクリックします。

  4. [エンドポイントへのデプロイ] をクリックします。

  5. ステップ 1「エンドポイントを定義する」では、次の操作を行います。

    1. [新しいエンドポイントを作成する] をクリックします。

    2. [エンドポイント名] に「bert sentiment endpoint」と入力します。

    3. 残りのデフォルト値は変更せず、[続行] をクリックします。

  6. ステップ 2 の [モデル設定] で、次の操作を行います。

    1. [コンピューティングの設定] セクションの [コンピューティング ノードの最小数] に「1」と入力します。これは、モデルで常に使用できる必要のあるノードの数です。

    2. [Advanced scaling options] セクションの [Machine type] で、[Standard (n1-standard-2)] を選択します。モデルのインポート時にアクセラレータ タイプとして GPU を選択したため、マシンタイプを選択すると、アクセラレータ タイプとアクセラレータ数が自動的に設定されます。

    3. 残りのデフォルト値は変更せずに、[デプロイ] をクリックします。

      モデルがエンドポイントにデプロイされると、ステータスは Active に変わります。

    4. [ID] 列の数値エンドポイント ID と [Region] 列の値をコピーします。これらは後で必要になります。

データセットを作成する

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

Console

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

    [BigQuery] ページに移動

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

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

    [データセットを作成] メニュー オプション。

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

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

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

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

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

    値が入力された [データセットを作成する] ページ。

bq

新しいデータセットを作成するには、--location フラグを指定した bq mk コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset コマンドのリファレンスをご覧ください。

  1. データの場所を US、説明を BigQuery ML tutorial dataset に設定して、bqml_tutorial という名前のデータセットを作成します。

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

  2. データセットが作成されたことを確認します。

    bq ls

API

定義済みのデータセット リソースを使用して datasets.insert メソッドを呼び出します。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

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

Vertex AI エンドポイントに接続するには、Cloud リソース接続が必要です。

コンソール

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

    [BigQuery] に移動

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

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

  4. [接続 ID] フィールドに「bqml_tutorial」と入力します。

  5. [マルチリージョン - US] が選択されていることを確認します。

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

  7. ウィンドウの下部にある [接続に移動] をクリックします。または、[エクスプローラ] ペインで [外部接続] を開き、[us.bqml_tutorial] をクリックします。

  8. [接続情報] ペインで、サービス アカウント ID をコピーします。この ID は、接続の権限を構成するときに必要になります。接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。

bq

  1. 接続を作成するには:

    bq mk --connection --location=US --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE bqml_tutorial

    PROJECT_ID は、実際の Google Cloud プロジェクト 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.us.bqml_tutorial

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

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

接続アクセスを設定する

Cloud リソース接続のサービス アカウントに Vertex AI ユーザーロールを付与します。このロールは、リモートモデル エンドポイントを作成するプロジェクトで付与する必要があります。

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

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

    [IAM と管理] に移動

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

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

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

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

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

BigQuery ML リモートモデルを作成するには、REMOTE WITH CONNECTION 句を指定して CREATE MODEL ステートメントを使用します。CREATE MODEL ステートメントの詳細については、カスタムモデルを介したリモートモデルの CREATE MODEL ステートメントをご覧ください。

モデルは US マルチリージョン ロケーションに作成します。BigQuery マルチリージョン(USEU)データセットでは、同じマルチリージョン ロケーション(USEU)内のリージョンにデプロイされたエンドポイントに接続するリモートモデルのみを作成できます。

リモートモデルを作成するときに、Vertex AI にモデルをデプロイしたときに生成されたエンドポイント ID が必要です。また、入力と出力のフィールドの名前と型は、Vertex AI モデルの入力と出力と完全に同じである必要があります。この例では、入力はテキスト STRING で、出力は FLOAT64 タイプの ARRAY です。

Console

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

    BigQuery に移動

  2. [新規作成] で [SQL クエリ] をクリックします。

  3. クエリエディタで次の CREATE MODEL ステートメントを入力し、[実行] をクリックします。

    CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY)
    REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
    OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')

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

    • PROJECT_ID: プロジェクト名。
    • ENDPOINT_ID: 前にコピーしたエンドポイント ID。

    オペレーションが完了すると、Successfully created model named bert_sentiment のようなメッセージが表示されます。

    新しいモデルが [リソース] パネルに表示されます。モデルにはモデルアイコン モデルアイコン がついています。

    [リソース] パネルで新しいモデルを選択すると、そのモデルに関する情報がクエリエディタの下に表示されます。

bq

  1. 次の CREATE MODEL ステートメントを入力して、リモートモデルを作成します。

    bq query --use_legacy_sql=false \
    "CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY)
    REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
    OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')"

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

    • PROJECT_ID: プロジェクト名。
    • ENDPOINT_ID: 前にコピーしたエンドポイント ID。
  2. モデルを作成したら、モデルがデータセットに表示されていることを確認します。

    bq ls -m bqml_tutorial

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

    Id               Model Type   Labels    Creation Time
    ---------------- ------------ -------- -----------------
    bert_sentiment                         28 Jan 17:39:43

ML.PREDICT を使用して予測を取得する

ML.PREDICT 関数を使用して、リモートモデルから感情の予測を取得します。入力は、bigquery-public-data.imdb.reviews テーブルの映画のレビューを含むテキスト列(review)です。

この例では、10,000 件のレコードが選択され、予測用に送信されています。リモートモデルはデフォルトで、リクエストのバッチサイズとして 128 個のインスタンスに設定されています。

Console

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

    BigQuery に移動

  2. [新規作成] セクションで、[SQL クエリ] をクリックします。

  3. クエリエディタで、ML.PREDICT 関数を使用する次のクエリを入力し、[実行] をクリックします。

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

    クエリの結果は次のようになります。

    クエリ結果

bq

次のコマンドを入力して、ML.PREDICT を使用するクエリを実行します。

bq query --use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT (
MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
  (
    SELECT review as text
    FROM `bigquery-public-data.imdb.reviews`
    LIMIT 10000
  )
)'

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

Console

  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.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

または、このチュートリアルで使用した個々のリソースを削除するには:

  1. モデルを削除します。

  2. 省略可: データセットを削除します。

  3. モデルのデプロイを解除してエンドポイントを削除する

  4. Model Registry からモデルを削除します

  5. Cloud リソース接続を削除します

次のステップ