ML.GENERATE_EMBEDDING を繰り返し呼び出して割り当てエラーを処理する

このチュートリアルでは、BigQuery bqutil.procedure.bqml_generate_embeddings 公開ストアド プロシージャを使用して、ML.GENERATE_EMBEDDING 関数の呼び出しを反復処理する方法について説明します。関数を繰り返し呼び出すと、関数に適用される割り当てと上限を超えたために発生する再試行可能なエラーに対処できます。

GitHub の bqutil.procedure.bqml_generate_embeddings ストアド プロシージャのソースコードを確認するには、bqml_generate_embeddings.sqlx をご覧ください。ストアド プロシージャのパラメータと使用方法の詳細については、README ファイルをご覧ください。

このチュートリアルでは、次のタスクについて説明します。

  • text-embedding-005 モデルを介してリモートモデルを作成する。
  • bqutil.procedure.bqml_generate_embeddings ストアド プロシージャを使用し、リモートモデルと bigquery-public-data.bbc_news.fulltext 一般公開データテーブルを使用して ML.GENERATE_EMBEDDING 関数の呼び出しを繰り返し行う。

必要な権限

このチュートリアルを実行するには、次の Identity and Access Management(IAM)ロールが必要です。

  • BigQuery データセット、接続、モデルを作成して使用する: BigQuery 管理者(roles/bigquery.admin)。
  • 接続のサービス アカウントに権限を付与する。プロジェクト IAM 管理者(roles/resourcemanager.projectIamAdmin)。

これらの事前定義ロールには、このドキュメントのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

  • データセットを作成する: bigquery.datasets.create
  • 接続を作成、委任、使用する: bigquery.connections.*
  • デフォルトの接続を設定する: bigquery.config.*
  • サービス アカウントの権限を設定する: resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
  • モデルを作成して推論を実行する:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

費用

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

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI model.

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

BigQuery の料金の詳細については、BigQuery の料金をご覧ください。

Vertex AI の料金の詳細については、Vertex AI の料金をご覧ください。

始める前に

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

    Go to project selector

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

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

データセットを作成する

モデルとサンプルデータを保存する BigQuery データセットを作成します。

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

    [BigQuery] ページに移動

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

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

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

    1. [データセット ID] に「target_dataset」と入力します。

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

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

テキスト エンベディング生成モデルを作成する

Vertex AI text-embedding-005 モデルを表すリモートモデルを作成します。

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

    [BigQuery] に移動

  2. クエリエディタで、次のステートメントを実行します。

    CREATE OR REPLACE MODEL `target_dataset.embedding_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    クエリが完了するまでに数秒かかります。完了後、embedding モデルが [エクスプローラ] ペインの sample データセットに表示されます。クエリは CREATE MODEL ステートメントを使用してモデルを作成するため、クエリの結果はありません。

ストアド プロシージャを実行する

bqutil.procedure.bqml_generate_embeddings ストアド プロシージャを実行します。このプロシージャは、target_dataset.embedding_model モデルと bigquery-public-data.bbc_news.fulltext 一般公開データテーブルを使用して ML.GENERATE_EMBEDDING 関数を繰り返し呼び出します。

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

    [BigQuery] に移動

  2. クエリエディタで、次のステートメントを実行します。

    CALL `bqutil.procedure.bqml_generate_embeddings`(
        "bigquery-public-data.bbc_news.fulltext",            -- source table
        "PROJECT_ID.target_dataset.news_body_embeddings",  -- destination table
        "PROJECT_ID.target_dataset.embedding_model",       -- model
        "body",                                              -- content column
        ["filename"],                                        -- key columns
        '{}'                                                 -- optional arguments encoded as a JSON string
    );

    PROJECT_ID は、このチュートリアルで使用するプロジェクトのプロジェクト ID に置き換えます。

    ストアド プロシージャは、ML.GENERATE_EMBEDDING 関数の出力を含む target_dataset.news_body_embeddings テーブルを作成します。

  3. クエリの実行が完了したら、再試行可能なエラーを含む行が target_dataset.news_body_embeddings テーブルにないことを確認します。クエリエディタで、次のステートメントを実行します。

    SELECT *
    FROM `target_dataset.news_body_embeddings`
    WHERE ml_generate_embedding_status LIKE '%A retryable error occurred%';

    このクエリは、メッセージ No data to display を返します。

クリーンアップ

  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.