を使用してバッチ推論を実行する ai_query

重要

この機能はパブリック プレビュー段階にあります。

この記事では、組み込みの Databricks SQL 関数 ai_queryを使用してバッチ推論を実行する方法について説明します。 この AI 関数の詳細についてはai_query関数を参照してください。

Databricks では、バッチ推論にモデル サービスで ai_query を使用することをお勧めします。 簡単な実験のために、 ai_query をトークン単位のエンドポイント 使用できます

大規模なデータまたは運用データに対してバッチ推論を実行する準備ができたら、パフォーマンスを向上させるために、プロビジョニングされたスループット エンドポイントを使用することをお勧めします。 ai_query は、数十億のトークンの範囲でデータセットを確実かつ一貫して処理することが検証されています。 プロビジョニング済みスループット エンドポイントを作成する方法についてはプロビジョニング済みスループット基盤モデル API を参照してください。

Unity カタログ テーブルの LLM を使用したバッチ推論を開始するには、「 Foundation Model API によってプロビジョニングされたスループットを使用したバッチ推論のノートブックの例を参照してください。

要件

バッチ推論のクエリ例

このセクションの例では、クエリを実行する既存のエンドポイントにモデルがデプロイされていることを前提としています。 Serving UI を使用している場合は、エンドポイントを選択し、右上にある [Use] ボタンをクリックして、[バッチ推論使用を選択できます。 この選択により、SQL エディターが開き、 ai_queryを使用してバッチ推論用の SQL クエリを記述して実行できます。

max_tokenstemperaturefailOnErrormodelParametersを使用する一般的な例を次に示します。 この例では、 concat()を使用してモデルのプロンプトと推論列を連結する方法も示します。 連結を実行するには、 ||concat()format_string()の使用など、複数の方法があります。


CREATE OR REPLACE TABLE ${output_table_name} AS (
  SELECT
      ${input_column_name},
      AI_QUERY(
        "${endpoint}",
        CONCAT("${prompt}", ${input_column_name}),
        failOnError => True,
        modelParameters => named_struct('max_tokens', ${num_output_tokens},'temperature', ${temperature})
      ) as response
    FROM ${input_table_name}
    LIMIT ${input_num_rows}
)

次の例では、comment_text データセットを使用して、llama_3_1_8b エンドポイントの背後にあるモデルに対してクエリを実行します。

WITH data AS (
  SELECT *
  FROM ml.sentiment.comments
  LIMIT 10000
)
  SELECT
    comment_text,
    ai_query(
      'llama_3_1_8b_batch',
      CONCAT('You are provided with text. Classify the text into one of these labels: "Positive", "Neutral", "Negative". Do not explain. Do not output any confidence score. Do not answer questions. Text: ', comment_text)
    ) AS label
  FROM data

次の例には、データの前処理手順と後処理手順が含まれています。

WITH temp AS (
  SELECT *
  FROM ml.sentiment.comments
  LIMIT 10000
),
pre_process AS (
  SELECT comment_text
  FROM temp
  WHERE length(comment_text) > 50
),
sentiment AS (
  SELECT
    comment_text,
    ai_query(
      'llama_3_1_8b_batch',
      Concat('You are provided with text. Classify the text into one of these labels: "Positive", "Neutral", "Negative". Do not explain. Do not output any confidence score. Do not answer questions. Text: ', comment_text)
    ) AS label
  FROM pre_process
)
SELECT
  comment_text,
  label,
  CASE
    WHEN label NOT IN ("Positive", "Neutral", "Negative") THEN True
    ELSE FALSE
  END AS error
FROM sentiment

ジョブのスケジュールを設定する

SQL スクリプトの準備ができたら、必要な頻度でジョブを実行するようにジョブをスケジュールできます。 「スケジュールされたノートブック ジョブの作成と管理」をご覧ください。