0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini API Flex/Priority Inference入門 — コストと信頼性をservice_tierで制御する

0
Last updated at Posted at 2026-04-05

はじめに

2026年4月、Google は Gemini API に Flex InferencePriority Inference の2つの新しい推論ティアを追加しました。これにより、アプリケーションの特性に応じてコストと信頼性のトレードオフを service_tier パラメータ1つで制御できるようになりました。

この記事では、3つの推論ティア(Flex・Standard・Priority)の仕組みと使い分け、Python での実装例を解説します。

この記事で解説すること

  • Flex Inference と Priority Inference の技術的な違い
  • service_tier パラメータの使い方
  • ユースケース別の選定ガイド
  • エラーハンドリングとリトライ実装

対象読者

  • Gemini API を本番環境で運用しているエンジニア
  • APIコストを最適化したい開発者
  • SLO(サービスレベル目標)を設定したいチーム

前提環境

  • Python 3.10 以上
  • google-genai ライブラリ(pip install google-genai
  • Gemini API キー(Tier 2/3 プロジェクトは Priority Inference を利用可能)

TL;DR

  • service_tier: "flex" → コスト50%削減、レイテンシ最大15分、バッチ処理向け
  • service_tier: "priority" → コスト75〜100%増、超低レイテンシ、本番リアルタイム向け
  • デフォルト(省略)は Standard 相当
  • エンドポイントは同一、パラメータ変更のみで切り替え可能

3つの推論ティアの全体像

Gemini API の推論ティアは以下の3段階に整理されます。

ティア service_tier コスト レイテンシ 信頼性
Flex "flex" Standard × 50% ベストエフォート(最大15分) シェダブル(503/429あり)
Standard 省略(デフォルト) 基準 1〜10秒程度 高信頼性
Priority "priority" Standard比 +75〜100%(1.75〜2.0倍) ミリ秒〜数秒 非シェダブル

Flex Inference の仕組み

Flex は「シェダブルキャパシティ」を活用します。Googleのデータセンターでは、通常トラフィックが少ない時間帯に余剰リソースが発生します。Flex リクエストはこの余剰リソースを使用するため、トラフィックスパイク時にはリクエストが保留または棄却(503/429エラー)されます。

自動的なアップグレードは行われないため、クライアント側でエクスポネンシャルバックオフによるリトライが必須です。

Priority Inference の仕組み

Priority は「非シェダブルトラフィック」として扱われ、他のリクエストに先んじて処理されます。動的な制限を超過した場合でも、サービスが失敗するのではなく、Standard ティアへグレースフルダウングレードされます。この場合の請求は Standard 料金(プレミアムではなく)になります。

なお、Priority Inference は Tier 2/3 の有料プロジェクトのみ利用可能です。

Python 実装例

google-genai ライブラリ(2024年末以降の推奨SDK)を使用します。

基本的な使い方(Standard)

from google import genai

# クライアントの初期化
client = genai.Client(api_key="YOUR_API_KEY")

# Standard(デフォルト)
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Pythonでフィボナッチ数列を生成するコードを書いて",
)
print(response.text)

Flex Inference の実装

公式ドキュメントでは、Flex 利用時はクライアント側のタイムアウトを 600秒(10分)以上に設定することが推奨されています。

from google import genai
import time

client = genai.Client(api_key="YOUR_API_KEY")

def generate_with_flex(prompt: str, max_retries: int = 5) -> str:
    """Flex Inference でリクエストを送信し、エラー時にリトライする"""
    for attempt in range(max_retries):
        try:
            response = client.models.generate_content(
                model="gemini-2.5-flash",
                contents=prompt,
                config={"service_tier": "flex"},  # Flex ティアを指定
                # タイムアウトは600秒以上推奨(ここでは余裕を持って900秒)
                http_options={"timeout": 900_000},  # ミリ秒指定
            )
            return response.text
        except Exception as e:
            error_str = str(e)
            if "503" in error_str or "429" in error_str:
                wait_time = 2 ** attempt  # エクスポネンシャルバックオフ
                print(f"リトライ {attempt + 1}/{max_retries}{wait_time}秒後に再試行...")
                time.sleep(wait_time)
            else:
                raise
    raise RuntimeError("最大リトライ回数に達しました")

# バッチ処理の例
prompts = [
    "製品レビューを要約してください: ...",
    "このコードのバグを修正してください: ...",
    "以下のデータを分析してください: ...",
]

results = [generate_with_flex(p) for p in prompts]

Priority Inference の実装

from google import genai

client = genai.Client(api_key="YOUR_API_KEY")

def generate_with_priority(prompt: str) -> str:
    """Priority Inference でリクエストを送信する(本番リアルタイム向け)"""
    response = client.models.generate_content(
        model="gemini-2.5-pro",
        contents=prompt,
        config={"service_tier": "priority"},  # Priority ティアを指定
        http_options={"timeout": 30_000},  # タイムアウト例(30秒)
    )
    return response.text

# カスタマーサポートチャットボットの例
def customer_support_response(user_message: str) -> str:
    system_prompt = "あなたは親切なカスタマーサポート担当者です。"
    full_prompt = f"{system_prompt}\n\nユーザーの質問: {user_message}"
    return generate_with_priority(full_prompt)

REST API でのティア指定

Python ライブラリを使用しない場合は、リクエストボディのトップレベルに serviceTier フィールドを追加します(generationConfig の中ではありません)。

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=$API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "こんにちは"}]}],
    "serviceTier": "FLEX"
  }'

REST API では serviceTier フィールドの値は大文字("FLEX""PRIORITY")を使用します。

ユースケース別の選定ガイド

Flex Inference が適するケース

コスト削減が優先で、レイテンシの揺れが許容できる処理に適しています。

  • 大規模バッチ処理: 数千〜数百万件のテキスト変換・要約
  • オフライン評価: LLMベンチマーク、回帰テスト、データセット生成
  • バックグラウンド処理: CRMデータの自動更新、メタデータ生成
  • コスト感度の高い研究: 大量トークンを消費するシミュレーション
  • マルチステップエージェント: 中間ステップのレイテンシが許容できる場合

Priority Inference が適するケース

低レイテンシと高信頼性が必要な本番アプリケーションに適しています。

  • リアルタイムチャットボット: ユーザーが応答を待つインタラクティブなUI
  • リアルタイム不正検知: ミリ秒単位での判定が必要なシステム
  • ビジネスクリティカルなCopilot: SLO要件のある企業向けアプリ
  • プレミアムユーザー向け機能: 一般ユーザーと差別化されたサービス

Standard(デフォルト)が適するケース

バランスの取れた汎用ワークロードに適しています。

  • 開発・テスト: コスト効率と安定性のバランス
  • 社内ツール: 多少のレイテンシが許容される業務アプリ
  • 中規模バッチ: 即日完了が必要なデータ処理

対応モデル一覧

以下のモデルで Flex / Priority Inference が利用可能です(公式ドキュメント参照)。

モデル Flex Priority
Gemini 3.1 Pro Preview
Gemini 3.1 Flash-Lite Preview
Gemini 3 Flash Preview
Gemini 2.5 Pro
Gemini 2.5 Flash
Gemini 2.5 Flash-Lite
Gemini 3.1 Flash-Lite

注意点

Priority Inference の利用条件

Priority Inference は Tier 2/3 の有料プロジェクトのみ利用可能です。無料プランや Tier 1 のプロジェクトでは使用できません。Tier の確認・アップグレードはGoogle AI Studioから行えます。

Flex の 503/429 エラー対策

Flex は標準トラフィックが増加するとリクエストが棄却されます。本番環境での Flex 利用には、適切なリトライロジックが不可欠です。エクスポネンシャルバックオフ(2秒→4秒→8秒…)を実装し、最終的なフォールバックとして Standard ティアへの切り替えも検討してください。

Priority のレート制限

Priority ティアはレート制限が Standard の約0.3倍と厳しくなっています。高スループットが必要な場合は Standard または Flex との組み合わせを検討してください。

料金の確認

各ティアの正確な料金はGemini API 公式料金ページで確認してください。料金はモデルやリージョンによって異なります。Priority でグレースフルダウングレードが発生した場合、その分は Standard 料金で請求されます。

まとめ

Gemini API の Flex/Priority Inference は、service_tier パラメータ1つでコストと信頼性のトレードオフを制御できるシンプルな仕組みです。

  • Flex: コスト50%削減。大量バッチ処理や研究用途に最適
  • Standard: バランス型。開発・一般業務に適する
  • Priority: 超低レイテンシ・高信頼性。本番リアルタイムアプリ向け

同一エンドポイント・同一コードベースで切り替えられるため、環境変数で制御してステージングと本番で異なるティアを使い分けるアーキテクチャが効果的です。

import os
from google import genai

client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
service_tier = os.environ.get("GEMINI_SERVICE_TIER", "standard")  # flex / standard / priority

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="テストプロンプト",
    config={"service_tier": service_tier},
)

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?