モデル蒸留で AI 関数の費用を最適化する

このドキュメントでは、BigQuery のマネージド AI 関数の最適化モードを使用する方法について説明します。最適化モードを使用すると、標準の行ごとの LLM 推論と比較して、大規模言語モデル(LLM)のトークン消費量とクエリ レイテンシを大幅に削減して、数千行、さらには数十億行を含む大規模なデータセットを処理できます。この最適化は、AI.IF 関数と AI.CLASSIFY 関数にのみ適用されます。

クエリのトークン効率を最適化するのではなく、 予算超過を防ぐためにトークン消費量の合計に上限を設定する場合は、 トークン割り当てで費用を管理するをご覧ください。

トークン消費量を把握するには、 Google Cloud コンソールでクエリで使用されたトークンの数を確認します。クエリを実行する前にこの使用量を推定するには、 AI.COUNT_TOKENS 関数を使用します。

次の例は、最適化モードで AI.IF 関数 を使用して、自然災害に関するニュース記事を特定する方法を示していますtext-embedding-005

SELECT
  title,
  body,
  AI.IF(
    ('The following news story is about a natural disaster: ', body),
    embeddings => AI.EMBED(body, endpoint => 'text-embedding-005', task_type => 'CLASSIFICATION').result,
    -- Optional, 'MINIMIZE_COST' is the default when embeddings are provided.
    optimization_mode => 'MINIMIZE_COST'
   ) AS is_natural_disaster
FROM
  `bigquery-public-data.bbc_news.fulltext`;

optimization_mode => 'MINIMIZE_COST' 引数を指定すると、最適化 モードが有効になります。エンベディングが指定されている場合はこれがデフォルトの設定であるため、この引数は省略できます。

この例では、エンベディングはオンザフライで生成されます。実際には、エンベディングをマテリアライズして再利用できるようにすることをおすすめします。

最適化モードの仕組み

マネージド AI 関数 AI.IFAI.CLASSIFY は、通常、データセットの各行に対して リモート LLM を呼び出します。最適化モードを使用すると、クエリの実行中に軽量で蒸留されたモデルが BigQuery によって自動的にトレーニングされます。

このプロセスは次のように動作します。

最適化モードが有効な場合の AI 関数のワークフロー

  • サンプリングとラベリング: BigQuery はデータの代表的なサンプルをいくつか選択し、Gemini を呼び出してラベルを提供します。
  • 蒸留モデルのトレーニング: LLM ラベルとデータ エンベディングを特徴として使用して、ローカルの蒸留モデルがジャストインタイムでトレーニングされます。
  • 品質チェック: BigQuery は、蒸留モデルの 精度を LLM の結果と比較して評価します。デフォルトでは、蒸留モデルが必要な品質しきい値を満たしていない場合、モデルが破棄された理由を示すエラーでクエリが失敗します。モデルの品質が許容できる場合でも、一貫した品質を維持するため、または有効なエンベディングがない行に対して、BigQuery が特定行のリモート LLM にフォールバックすることがあります。
  • 推論: 蒸留モデルはほとんどの行を処理するため、 Gemini の呼び出し回数が大幅に削減されます。

制限事項

最適化モードには次の制限があります。

  • 最小行数: モデルのトレーニングに十分なデータを確保するには、AI 関数への入力に 約 3,000 行を含める必要があります。
  • データ型: 複数の列を参照するプロンプトの場合、最適化でサポートされるのは文字列 列のみです。
  • マルチラベル分類: AI.CLASSIFYoutput_mode => 'multi' は最適化モードではサポートされていません。
  • 関数のサポート: 最適化モードをサポートしているのは AI.IF 関数と AI.CLASSIFY 関数のみです。ただし、AI.CLASSIFY で最適化モードを使用する場合、蒸留モデルの品質が不十分だとクエリが失敗する可能性があります。
  • エラー率: max_error_ratio 引数は 最適化モードではサポートされていません。

始める前に

BigQuery でマネージド AI 関数を実行するために必要な権限を取得するには、Gemini Enterprise Agent Platform LLM を呼び出す生成 AI 関数の権限を設定するをご覧ください。

エンベディング モデルを選択する

最適化モードを使用するには、データの エンベディングを計算して AI 関数に提供する必要があります 。入力列に関連付けられたエンベディングを使用するには、すべての行のエンベディング ディメンションが同じで、同じエンベディング モデルによって生成されている必要があります。

費用対効果とスケーラビリティを最大限に高めるには、 エンベディング モデル( text-embedding-005など)または Gemini エンベディング を使用して、データのエンベディングを計算することをおすすめします。マルチモーダル データ(テキストと画像)の場合は、マルチモーダル エンベディング モデル(Gemini Embedding 2(gemini-embedding-2など)を使用することをおすすめします。

エンベディングを生成する

データのエンベディングは、BigQuery が管理する自律型生成を使用して計算するか、エンベディング列を手動で作成して計算できます。 以降のセクションでは、AI.CLASSIFY 関数と AI.IF 関数で両方の方法を使用する方法について説明します。

自律型エンベディング生成

自律型エンベディング生成を使用する場合、 または が呼び出されると、BigQuery はエンベディングを自動的に使用します。AI.IFAI.CLASSIFYこの方法をおすすめしますが、テーブルごとに 1 つのエンベディング列に制限されます。

次の例では、text-embedding-005 をエンベディング モデルとして使用して、自律的に生成されたエンベディング列を含むテーブルを作成し、AI.CLASSIFY 関数を使用してデータを分類します。

-- Create a table with an autonomously generated embedding column
CREATE TABLE my_dataset.bbc_news (
  title STRING,
  body STRING,
  body_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS AS (
      AI.EMBED(
        body,
        connection_id => '<my_connection_id>',
        task_type => 'CLASSIFICATION',
        endpoint => 'text-embedding-005')
    ) STORED
    OPTIONS(asynchronous = TRUE)
);

-- Insert data into the table
INSERT INTO my_dataset.bbc_news (title, body)
SELECT title, body FROM `bigquery-public-data.bbc_news.fulltext`;

-- Run the optimized query.
-- Wait for the background job to finish generating embeddings before running.
SELECT
  title,
  body,
  AI.