何を言っているんだ?
Geminiに大量のリクエストを送りたいときに、いい感じにバッチ処理してくれるサービスがあるのですが、実は似たようなサービスがVertex AIにもあり、これらは似て非なるものなので注意が必要、という話です。
「Geminiを使ってバッチ予測をしたい」と思ったときに「Gemini バッチ」で調べたり、はたまたそのように生成AIに尋ねると最初にここでコケる可能性がありますので、どちらを使うべきか判断してから調べるとよいでしょう。
本記事では、具体的に両者の違いについて説明し、使い分けのアイデアをご紹介します。
先に結論
| Gemini Batch API | Vertex AIのGeminiを用いたバッチ予測 | |
|---|---|---|
| 管理UI | Google AI Studio (ai.google.dev) | Google Cloud Console (Vertex AI) |
| 提供元 | Gemini Developer API | Vertex AI |
| ターゲット | 個人開発・小規模アプリ・PoC | エンタープライズシステム・大規模データ処理 |
| 認証方式 | API Key | Google Cloud IAM(サービスアカウント等) |
| 課金 | Gemini APIの従量トークン課金 | GCP課金(SLAも対応) |
| 入力 | File APIでJSONLアップロード or インライン(20MB以下) | GCS または BigQuery |
| 出力 | APIからダウンロード | GCS または BigQuery |
なぜ2つあるの?
そもそも、Gemini APIとVertex AIが別物であることはご存知かと思います。
- Gemini API
- Google AI Studio で利用できる、Googleの汎用AI API
- Vertex AI
- Google Cloud上にある、エンタープライズ向けのフルマネージドな統合AI開発プラットフォーム
- 基盤モデルとしてGeminiが利用できる
こう考えれば、同じGeminiでも利用するルートが違う、ということがわかるかと思います。しかし、この前提をすっ飛ばしていざ「Geminiでバッチ予測」をしようとすると、出てくる情報はGemini APIを利用したものが多く「とりあえず実装し始めてるけど……これもしかしてVertex AIで実行できないのでは?」となってしまった、というのがこの記事を書くことになったきっかけです。
では、タイトルで言及している両者の違いについて、より詳しく見てみましょう。
Gemini バッチAPI
Gemini APIにはレート制限があり、大量のリクエストを送るとエラーが返されてしまいます。例えば、Gemini 2.5 FlashのRequest Per Minute (RPM) は10ですので、1分以内に11回のリクエストを送ると制限されてしまいます。
ですが、LLMの性能が格段に向上した今、LLMを用いて大量のデータを分析したい需要があるでしょう。そんな時、Gemini APIの制限はかなり厳しいものと言えます。そこで利用できるのがバッチAPIです。
バッチAPIは大量のリクエストを非同期で処理してくれるだけでなく、なんと標準料金が半額です。ドキュメントにもあるように、データの前処理や評価の実行など、すぐにレスポンスを必要としない大規模で緊急性のないタスクを想定しているようです。
というわけで、GeminiのバッチAPIは「Gemini APIで大量の処理をさせたいときはこれを使ってね!」というものであることがわかります。
Vertex AIのGeminiを用いたバッチ予測
そもそもVertex AIには、Geminiの登場以前から、"Batch Prediction"という共通の仕組みが存在しました。そして、AutoMLのバッチ推論、カスタムモデルを用いたバッチ推論などがこの仕組みを利用していました。
実際に、現在もコンソールからバッチ推論のジョブを作成しようとすると、Model Registryにデプロイされたカスタムモデルを選択できることがわかります。
つまり、「Geminiでバッチ推論できるサービスが追加された」のではなく、「バッチ推論できる仕組みにGeminiが対応した」 のです。
また、Gemini バッチAPI同様、こちらも通常料金の半額となります。
どう使い分ける?
至ってシンプルな話です……もし普段からGoogle Cloudを利用しているのであればVertex AIを使えば良いし、そうでないならGemini バッチAPIを使えば良いのです。
また、Vertex AIはGCSやBQのリソースを直接アクセスできるので、それらのリソースを使いたい場合は便利です。BQのリソースをGeminiで分析してBQやGCPに書き出す、ということができて非常にスマートですね。
料金については……どちらも半額になりますので、選ぶポイントにはならないかと思います。
おまけ:実際にVertex AIのGeminiでバッチ予測してみたときに得た知見
以上の理解をしたうえで、ドキュメントを参考にしながら実際にVertex AIのGeminiを用いてバッチ予測をしてみました。
やはり速い!
Gemini 2.5 Flashを用いて愚直に1プロンプトずつ処理していたら5秒/プロンプトかかるところを、バッチ予測であれば35万件の処理がわずか30分で完了しました。20件や1000件など小規模セットでもテストしていましたが、その時は4〜5分くらいと件数に比例しなかったため、おそらくVertex AI Pipelinesのようにマシンリソースを掴んだり、非同期でパラレル処理するためにシャーディングしたり、等で時間がかかっているものだと推測しています。
リクエストには何を入れてもエコーされるらしい
リクエストはJSONで書くのですが、どうやらrequestフィールド外であれば何を入れても出力時にエコーされるようです。
例えば、"key": "0"のようにindexを入れておくのも良いですし、こちらが必要な情報を埋めておくことで、結果の確認が非常に容易になります。
余談ですが、Gemini バッチAPIでは、このkeyは必須となっています(参照)。一方で、Vertex AIのGeminiバッチ予測ではドキュメントに以下のように書かれているため、どうやら必須ではないようです(Gemini APIのリクエストとGemini バッチAPIのリクエストは異なるフォーマットです)。
Gemini モデルのバッチ推論は、Cloud Storage に保存されている 1 つの JSON Lines(JSONL)ファイルを入力データとして受け入れます。バッチ入力データの各行は、Gemini API と同じ形式に沿ったモデルへのリクエストです。
ということは、response_schemaを用いた構造化出力にも対応している可能性があります。これは検証していません……
短時間でかなりの料金が発生する
いくら半額になっているとはいえ、短い時間で大量のトークンを消費することになるため、その分課金額もえげつないです。
例えば、今回は35万件の処理を実施しましたが
- 入力トークン数: 約2.7億
- 100万トークンあたり0.15ドル
- 合計40.5ドル
- 出力トークン数: 約1.75億
- 100万トークンあたり1.25ドル
- 合計218.75ドル
……と、それなりのお金が30分で課金されます。使用前に発生金額を見積もっておくことを強くおすすめします。10件程度の小さいデータでバッチ予測を実行してみて、出力されたJSONを確認すると実際に消費されたトークン数が確認できます。
また、Thinkingをオフにできるモデルを利用する場合は、オフにしておくと安心です。Thinkingは出力トークンを消費して実行されるため、もし出力トークンを使い切ってしまうとそのリクエストはエラーとなって何も出力できなくなります。もちろん、出力トークンの制限をゆるめにすることもできると思いますが、そうなると予算がかなり心配なことになります。Gemini API同様に動的思考も使えると思いますので(未検証)、そちらも活用してみてください。
おわりに
LLMの性能が格段に向上し、学習済みモデルが完全に民主化した今、LLMを用いた大量のデータ分析の方法を知っておくと便利かもしれません。モデルをデプロイすることなくプロンプトを書けば良いだけです……すごい時代になりました。
メイン業務が研究から開発寄りに移行したことで、すっかり最新のAI事情についていけなくなってしまいましたが、そんな中でも遅れを取り戻して、再び論文をガツガツ読んでいきたいですね。そんな話はZOZO Advent Calendar シリーズ6の明日の記事にて!
