BigQuery MLでgemini-proのリモートモデルを呼び出してみる

2024.02.25

Google Cloudデータエンジニアのはんざわです。
2024年の2月15日に gemini-pro のリモートモデルがGAになりました。
今回の記事では、BigQuery MLでML.GENERATE_TEXT関数と gemini-pro を利用したモデルを活用し、BigQueryのテキストデータに自然言語タスクを実行してみたいと思います。

・Creating a remote model based on the gemini-pro Vertex AI large language model (LLM).
・Using the ML.GENERATE_TEXT function with a remote model based upon gemini-pro to perform generative natural language tasks on text stored in BigQuery tables.

https://cloud.google.com/release-notes#February_15_2024

Gemini とは

Geminiとは、Googleの最新の生成AIモデルです。
文章、画像、音声、コーディングなどの様々なタスクにおいて、高いパフォーマンスを出すと評価されているようです。
Geminiには、Gemini Ultra、Gemini Pro、Gemini Nanoの3つのサイズがあり、それぞれ以下のような特性を持つようです。

  • Gemini Ultra — 非常に複雑なタスクに対応する、高性能かつ最大のモデル
  • Gemini Pro — 幅広いタスクに対応する最良のモデル
  • Gemini Nano — デバイス上のタスクに最も効率的なモデル

触ってみる

基本的な構築の流れは以下のドキュメントとほとんど同じです。
異なる点としては、リモートモデルのエンドポイントをGemini Proに設定するくらいです。

また、リモートモデルを呼び出す際のパラメータなどは以下のドキュメントを確認してみてください。

それではさっそく触ってみましょう

Vertex AIのコネクションを作成する

BigQuery Studioのコンソール画面から + 追加 -> 外部データソースへの接続を選択します。
接続タイプにVertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)を選択し、接続IDとリージョンを入力します。
今回の検証では、接続IDをvertex-ai-testとし、東京リージョンに設定しました。

接続を作成を選択し、以下のようなコネクションが作成されました。

Vertex AIのコネクションに権限を付与する

次にVertex AIのコネクションのサービスアカウントに必要な権限を付与します。
コネクションのサービスアカウントは、以下の画像の赤枠の部分になります。

今回の例だとbqcx-868908576898-78f0@gcp-sa-bigquery-condel.iam.gserviceaccount.comのサービスアカウントに権限を割り当てます。

IAMと管理 -> IAM -> アクセス権を付与を選択します。
以下の画像のように前述したサービスアカウントにVertex AI ユーザーの権限を付与します。

BigQuery MLでモデルを作成する

まずはモデルを格納するデータセットを作成します。

次に下記のクエリでGemini Proを利用したモデルを作成します。

CREATE OR REPLACE MODEL sample_model.gemini_pro
REMOTE WITH CONNECTION 'asia-northeast1.vertex-ai-test'
OPTIONS(
  ENDPOINT = 'gemini-pro'
)

簡単な質問を投げて、モデルを呼び出してみる

さっそく作成したモデルを呼び出してみます。
まずはテーブルを使用せずに簡単な質問を投げてみます。

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL sample_model.gemini_pro,
    (
      SELECT '大谷翔平について教えてください' AS prompt
    ),
    STRUCT(
      1000 AS max_output_tokens
    )
  );

このままだと見づらいので少し整形してみます。

SELECT
  STRING(_ml_generate_text_result_candidates.content.parts[0].text) AS content_text,
  ml_generate_text_result.usage_metadata.candidates_token_count AS candidates_token_count,
  ml_generate_text_result.usage_metadata.prompt_token_count AS prompt_token_count,
  ml_generate_text_result.usage_metadata.total_token_count AS total_token_count
FROM
  ML.GENERATE_TEXT(
    MODEL sample_model.gemini_pro,
    (
      SELECT '大谷翔平について教えてください' AS prompt
    ),
    STRUCT(
      1000 AS max_output_tokens
    )
  )
LEFT JOIN
  UNNEST(JSON_EXTRACT_ARRAY(ml_generate_text_result.candidates)) AS _ml_generate_text_result_candidates

肝心のレスポンスの内容は以下の通りでした。

**大谷翔平**

**プロフィール**

* 生年月日:1994年7月5日
* 出身地:岩手県奥州市
* 身長:193cm
* 体重:95kg
* ポジション:投手、指名打者

**経歴**

* 花巻東高校時代は投手として活躍し、甲子園大会で準優勝。
* 2012年、北海道日本ハムファイターズに入団。
* 2013年、一軍デビュー。
* 2016年、投手として10勝4敗、打者として10本塁打を記録し、パ・リーグの最優秀選手(MVP)に選出。
* 2018年、ロサンゼルス・エンゼルスに移籍。
* 2021年、投手として9勝2敗、打者として46本塁打を記録し、ア・リーグのMVPに選出。

**特徴**

* **二刀流:** 投手と指名打者の両方で活躍する稀有な選手。
* **投手:** 160km/hを超える速球と鋭いスライダーを武器とする。
* **打者:** 長打力に優れ、本塁打を量産する。
* **走塁:** 足も速く、盗塁も得意。

**受賞歴**

* パ・リーグMVP(2016年)
* ア・リーグMVP(2021年)
* サイ・ヤング賞(2021年)
* シルバースラッガー賞(2021年)
* ゴールドグラブ賞(2021年)

**その他**

* 日本人選手として初めてア・リーグのMVPを受賞。
* 2021年には、投手として10勝以上、打者として40本塁打以上を記録した史上初の選手となった。
* 2023年シーズンは、エンゼルスと11年2億1000万ドルの契約を結んだ。

各項目について、とてもわかりやすく説明してくれました。
次はBigQueryのテーブルに対して、モデルを使用してみます。

BigQueryのテーブルにモデルを使用する

検証に使用するテーブルはサンプルテーブルの github_timeline を東京リージョンに移動させてものを使用します。

以下のクエリのように、最初の5行だけを和訳する自然言語タスクを与えてみます。

SELECT
  STRING(_ml_generate_text_result_candidates.content.parts[0].text) AS content_text,
  repository_description
FROM
  ML.GENERATE_TEXT(
    MODEL `sample_model.gemini_pro`,
    (
      SELECT
        CONCAT('次の文章を和訳してください: ',
          repository_description
        ) AS prompt,
        repository_description
      FROM
        samples_dataset.github_timeline
      LIMIT 5
    )
  )
LEFT JOIN
  UNNEST(JSON_EXTRACT_ARRAY(ml_generate_text_result.candidates)) AS _ml_generate_text_result_candidates

特に違和感もなく和訳されていそうです。

料金

BigQuery MLのリモートモデルでGemini Proを利用した場合、料金の算出は以下のようになります。

BigQueryのスキャン料金 + Gemini Proの料金

BigQueryのスキャン料金はBigQueryの契約プランで異なります。

Gemini Proの料金は下記の表の通りです。

インプット 料金
画像 $0.0025 / 枚数
動画 $0.002 / 秒
文章 $0.000125 / 1000文字


アウトプット 料金
文章 $0.000375 / 1000文字

BigQueryの料金
Gemini Proの料金

リージョン

2024年2月25日時点で対応しているリージョンは以下の通りです。
日本だと東京リージョン(asia-northeast1)で対応しています。

  • Americas
    • us-central1
    • northamerica-northeast1
    • us-east4
    • us-west1
    • us-west4
  • Europe
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west9
  • Asia
    • asia-northeast1
    • asia-northeast3
    • asia-southeast1

まとめ

今回はBigQuery MLでGemini Proのリモートモデルを触ってみました。
今年の4月には、ラスベガスでGoogle Cloud Nextが開催される予定です。そのため、他のモデルや新しいAIプロダクトが追加されることが予想されます。
新たにアップデートがあれば、随時ブログ化したいと思います。