3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Databricksのai_query関数を用いたLLMのバッチ推論

Last updated at Posted at 2024-10-12

こちらのアップデートです。

Mosaic AIでバッチ推論をサポートしました

Mosaic AIモデルサービングで、ai_queryを用いたバッチLLM推論をサポートしました。ai_queryを使用したバッチ推論の実行をご覧ください。

ai_query関数とは

名前の通り、AI(LLM)にクエリーを行うことができる関数です。SQLで使えるところがミソです。

これまでは、トークン単位の従量課金(Pay per token) が必要なFoundation Model APIのモデルしか呼び出せなかったので、日本リージョンでは使えないなーと思っていたのですが、プロビジョン済みスループットのモデルサービングエンドポイントも呼び出せるようになったので、日本リージョンでも活用できます。

準備

プレビューAI Query for Custom Models and External Modelsがオンになっていることを確認します。

Screenshot 2024-10-12 at 9.55.29.png

また、LLMに入力するデータがある場合、テーブルとして作成しておきます。

Screenshot 2024-10-12 at 9.57.05.png

ウォークスルー

system.ai配下のモデルを用いて、プロビジョン済みスループットモデルサービングエンドポイントを作成します。

Screenshot 2024-10-12 at 9.19.58.png

Screenshot 2024-10-12 at 9.52.26.png

これで、ai_functionを用いてSQLからLLMを呼び出せるようになりました。シンプルなものから試します。

SELECT
    ai_query(
      'taka_llama_3_2_8b_instruct',
      "こんにちは"
    ) AS response

返ってきました!

Screenshot 2024-10-12 at 9.54.03.png

事前に自分のブログ記事をテーブルに登録しておいたので、こちらを使います。

Screenshot 2024-10-12 at 9.54.59.png

WITH data AS (
  SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
  FROM takaakiyayoi_catalog.ai_functions.blog
  LIMIT 1
)
  SELECT
    text,
    ai_query(
      'taka_llama_3_2_8b_instruct',
      CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。テキスト: ', text)
    ) AS summary
  FROM data

ここでハマったのはプロンプト長超過によるエラーでした。クエリーが返ってこないなーと思っていたら、モデルサービングエンドポイントのログにprompt token count (8800) cannot exceed 8191. Please reduce the length of your prompt.のエラーが出ていました。

Screenshot 2024-10-12 at 9.58.19.png

なので、substrを使って入力文字列を制限しています。

要約が返ってきました!

Screenshot 2024-10-12 at 10.04.55.png

ただ、余計なテキストも含まれています。ここからはプロンプトエンジニアリングの世界ですね。前振りは不要です。要約テキストだけを返してください。を追加します。

WITH data AS (
  SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
  FROM takaakiyayoi_catalog.ai_functions.blog
  LIMIT 1
)
  SELECT
    text,
    ai_query(
      'taka_llama_3_2_8b_instruct',
      CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ', text)
    ) AS summary
  FROM data

いい感じです。

Screenshot 2024-10-12 at 10.07.13.png

ここまでは、1行のレコードのみを処理していましたが、SQLなので容易に複数行を処理できます。LIMIT 10に変更します。

WITH data AS (
  SELECT substr(text, 1, 1000) AS text -- プロンプト長の制限を超えないように
  FROM takaakiyayoi_catalog.ai_functions.blog
  LIMIT 10
)
  SELECT
    text,
    ai_query(
      'taka_llama_3_2_8b_instruct',
      CONCAT('提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ', text)
    ) AS summary
  FROM data

これは楽です。

Screenshot 2024-10-12 at 10.10.05.png

そして、LLMのレスポンスを用いてテーブルの作成も簡単にできてしまうわけです。CTE(Common Table Expression)でCREATE TABLE使えないので書き直してます)

CREATE TABLE takaakiyayoi_catalog.ai_functions.blog_summaries AS
SELECT
  title,
  text,
  ai_query(
    'taka_llama_3_2_8b_instruct',
    CONCAT(
      '提供されたテキストから50字程度の日本語の要約を作成してください。前振りは不要です。要約テキストだけを返してください。テキスト: ',
      text
    )
  ) AS summary
FROM
  (
    SELECT
      title,
      substr(text, 1, 1000) AS text
    FROM
      takaakiyayoi_catalog.ai_functions.blog
    LIMIT
      10
  )

これで要約のカラムが追加されたテーブルを作成できました。

Screenshot 2024-10-12 at 10.18.27.png

SQL一本で要約の生成、テーブルの作成ができるのでジョブ化も簡単です。個人的にはバッチ処理も重要なLLMのユースケースになると思っています。ぜひご活用ください!

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?