ML.GENERATE_EMBEDDING を繰り返し呼び出して割り当てエラーを処理する
このチュートリアルでは、BigQuery リモート推論スクリプトを使用して ML.GENERATE_EMBEDDING
関数の呼び出しを繰り返す方法について説明します。関数を繰り返し呼び出すと、関数に適用される割り当てと上限を超えたために発生する再試行可能なエラーに対処できます。
BigQuery リモート推論スクリプトで使用されるパラメータや関数など、詳しくは、README ファイルをご覧ください。
このチュートリアルでは、次のタスクについて説明します。
text-embedding-004
モデルを介してリモートモデルを作成する。structured_table_inference_loop_generate_embedding_example
サンプル スクリプトを使用して、リモートモデルとbigquery-public-data.bbc_news.fulltext
一般公開データテーブルを使用してML.GENERATE_EMBEDDING
関数の呼び出しを繰り返し行う。
必要な権限
- データセットを作成するには、
bigquery.datasets.create
Identity and Access Management(IAM)権限が必要です。 接続リソースを作成するには、次の IAM 権限が必要です。
bigquery.connections.create
bigquery.connections.get
接続のサービス アカウントに権限を付与するには、次の権限が必要です。
resourcemanager.projects.setIamPolicy
モデルを作成するには、次の権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
推論を実行するには、次の権限が必要です。
bigquery.models.getData
bigquery.jobs.create
費用
このドキュメントでは、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.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
BigQuery の料金の詳細については、BigQuery の料金をご覧ください。
Vertex AI の料金の詳細については、Vertex AI の料金をご覧ください。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
データセットを作成する
モデルとサンプルデータを保存する BigQuery データセットを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
> [データセットを作成] をクリックします。
「アクションを表示」[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
target_dataset
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。
残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
接続を作成する
クラウド リソース接続を作成し、接続のサービス アカウントを取得します。前の手順で作成したデータセットと同じロケーションに接続を作成します。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続を作成するには、[
追加] をクリックし、続いて [外部データソースへの接続] をクリックします。[接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
[接続 ID] フィールドに接続の名前を入力します。
[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
bq
コマンドライン環境で接続を作成します。
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
パラメータは、デフォルト プロジェクトをオーバーライドします。次のように置き換えます。
REGION
: 接続のリージョンPROJECT_ID
: 実際の Google Cloud プロジェクト IDCONNECTION_ID
: 接続の ID
接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。
トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
後の手順で使用するため、サービス アカウント 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 {} }
CONNECTION_ID
: 接続の IDPROJECT_ID
: 実際の Google Cloud プロジェクト IDREGION
: 接続のリージョン
接続のサービス アカウントに権限を付与する
Cloud Storage サービスと Vertex AI サービスにアクセスするために、接続のサービス アカウントに適切なロールを付与するには、次の操作を行います。
[IAM と管理] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] メニューで、[Vertex AI] > [Vertex AI ユーザー] を選択します。
[保存] をクリックします。
テキスト エンベディング生成モデルを作成する
Vertex AI text-embedding-004
モデルを表すリモートモデルを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
CREATE OR REPLACE MODEL `target_dataset.embedding_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-embedding-004');
次のように置き換えます。
LOCATION
: 接続のロケーション。CONNECTION_ID
: BigQuery 接続の ID。Google Cloud コンソールで接続の詳細を表示する場合、これは [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値です。例:
projects/myproject/locations/connection_location/connections/myconnection
クエリが完了するまでに数秒かかります。完了後、
embedding
モデルが [エクスプローラ] ペインのsample
データセットに表示されます。クエリはCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
サンプル スクリプトを実行する
structured_table_inference_loop_generate_embedding_example
サンプル スクリプトを実行します。このスクリプトは、target_dataset.embedding_model
モデルと bigquery-public-data.bbc_news.fulltext
一般公開データテーブルを使用して ML.GENERATE_EMBEDDING
関数を繰り返し呼び出します。
structured_table_inference_loop_generate_embedding_example
サンプル スクリプトに移動します。- スクリプトの内容をコピーします。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタにスクリプトの内容を貼り付け、[実行] をクリックします。このスクリプトは、
ML.GENERATE_EMBEDDING
関数の出力を含むtarget_dataset.news_body_embeddings
テーブルを作成します。クエリの実行が完了したら、再試行可能なエラーを含む行が
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
を返します。
クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.