を使用してバッチ推論を実行する ai_query
重要
この機能はパブリック プレビュー段階にあります。
この記事では、組み込みの Databricks SQL 関数 ai_query
を使用してバッチ推論を実行する方法について説明します。 この AI 関数の詳細についてはai_query関数を参照してください。
Databricks では、バッチ推論にモデル サービスで ai_query
を使用することをお勧めします。 簡単な実験のために、 ai_query
をトークン単位のエンドポイント 使用できます。
大規模なデータまたは運用データに対してバッチ推論を実行する準備ができたら、パフォーマンスを向上させるために、プロビジョニングされたスループット エンドポイントを使用することをお勧めします。 ai_query
は、数十億のトークンの範囲でデータセットを確実かつ一貫して処理することが検証されています。 プロビジョニング済みスループット エンドポイントを作成する方法についてはプロビジョニング済みスループット基盤モデル API を参照してください。
Unity カタログ テーブルの LLM を使用したバッチ推論を開始するには、「 Foundation Model API によってプロビジョニングされたスループットを使用したバッチ推論のノートブックの例を参照してください。
要件
- ai_query関数の要件を参照してください。
- 使用するデータを含む Unity カタログの Delta テーブルに対するクエリアクセス許可。
バッチ推論のクエリ例
このセクションの例では、クエリを実行する既存のエンドポイントにモデルがデプロイされていることを前提としています。 Serving UI を使用している場合は、エンドポイントを選択し、右上にある [Use] ボタンをクリックして、[バッチ推論使用を選択できます。 この選択により、SQL エディターが開き、 ai_query
を使用してバッチ推論用の SQL クエリを記述して実行できます。
max_tokens
とtemperature
でfailOnError
とmodelParameters
を使用する一般的な例を次に示します。 この例では、 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 スクリプトの準備ができたら、必要な頻度でジョブを実行するようにジョブをスケジュールできます。 「スケジュールされたノートブック ジョブの作成と管理」をご覧ください。