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

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

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

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

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

必要な権限

  • データセットを作成するには、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.

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい 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] に「sample」と入力します。

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

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

接続を作成する

クラウド リソース接続を作成し、接続のサービス アカウントを取得します。前の手順で作成したデータセットと同じロケーションに接続を作成します。

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

コンソール

  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 {}
}        
次のように置き換えます。

接続のサービス アカウントに権限を付与する

Cloud Storage サービスと Vertex AI サービスにアクセスするために、接続のサービス アカウントに適切なロールを付与するには、次の操作を行います。

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

    [IAM と管理] に移動

  2. [アクセスを許可] をクリックします。

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

  4. [ロールを選択] メニューで、[Vertex AI] > [Vertex AI ユーザー] を選択します。

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

テキスト生成モデルを作成する

Vertex AI gemini-1.5-flash-002 モデルを表すリモートモデルを作成します。

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

    [BigQuery] に移動

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

    CREATE OR REPLACE MODEL `sample.generate_text`
      REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID`
      OPTIONS (ENDPOINT = 'gemini-1.5-flash-002');

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

    • LOCATION: 接続のロケーション。
    • CONNECTION_ID: BigQuery 接続の ID。

      Google Cloud コンソールで接続の詳細を表示する場合、これは [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値です。例: projects/myproject/locations/connection_location/connections/myconnection

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

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

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

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

    [BigQuery] に移動

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

    CALL `bqutil.procedure.bqml_generate_text`(
        "bigquery-public-data.bbc_news.fulltext",   -- source table
        "PROJECT_ID.sample.news_generated_text",  -- destination table
        "PROJECT_ID.sample.generate_text",        -- model
        "body",                                     -- content column
        ["filename"],                               -- key columns
        '{}'                                        -- optional arguments
    );

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

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

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

    SELECT *
    FROM `sample.news_generated_text`
    WHERE ml_generate_text_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.