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文字 |
リージョン
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プロダクトが追加されることが予想されます。
新たにアップデートがあれば、随時ブログ化したいと思います。