基盤モデルと外部モデルのクエリ
この記事では、基盤モデルと外部モデルのクエリ要求を書式設定し、それらをモデルサービングエンドポイントに送信する方法について説明します。
従来の機械学習または Python モデルのクエリ リクエストについては、 「カスタムモデルのサービングエンドポイントをクエリする」を参照してください。
Mosaic AI Model Servingでは、生成AIモデルにアクセスするための 基盤モデルAPIや 外部モデル をサポートします。モデルサービングは、クエリを実行するために、統合された OpenAI 互換のAPIとSDKを使用します。 これにより、サポートされているクラウドとプロバイダー全体で本番運用用の生成AIモデルを実験およびカスタマイズすることが可能になります。
Mosaic AI Model Serving は、基盤モデルまたは外部モデルを提供するエンドポイントにスコアリング リクエストを送信するための次のオプションを提供します。
手法 |
詳細 |
---|---|
OpenAI クライアント |
OpenAI クライアントを使用して、 Mosaic AI Model Servingエンドポイントによってホストされているモデルをクエリします。 |
UI の提供 |
[サービス エンドポイント] ページから [クエリ エンドポイント] を選択します。JSON 形式のモデル入力データを挿入し、 「リクエストの送信」をクリックします。 モデルに入力例がログに記録されている場合は、[ 例を表示 ]を使用して読み込みます。 |
REST API |
REST API を使用してモデルを呼び出し、クエリを実行します。 詳細は、 POST /serving-endpoints/{name}/invocations を参照してください。 複数のモデルを提供するエンドポイントへの要求のスコアリングについては、「 エンドポイントの背後にある個々のモデルをクエリする」を参照してください。 |
MLflow デプロイメント SDK |
MLflow Deployments SDK のdetect()関数を使用してモデルをクエリします。 |
Databricks Python SDK |
Databricks Python SDK は、REST API の上位レイヤーです。 認証などの低レベルの詳細を処理するため、モデルとの対話が容易になります。 |
SQL関数 |
|
要件
サポートされているリージョンの Databricks ワークスペース。
OpenAI クライアント、REST API、または MLflow デプロイメント SDK を介してスコアリング要求を送信するには、Databricks API トークンが必要です。
重要
オンプレミス運用シナリオのセキュリティのベスト プラクティスとして、 Databricksでは、オンプレミス運用中の認証にマシン間OAuthトークンを使用することをお勧めします。
テストと開発の場合、 Databricksでは、ワークスペース ユーザーではなく、サービスプリンシパルに属する個人用アクセストークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、 「サービスプリンシパルのトークンの管理」を参照してください。
パッケージのインストール
クエリ方法を選択したら、まず適切なパッケージをクラスターにインストールする必要があります。
OpenAI クライアントを使用するには、 openai
パッケージをクラスターにインストールする必要があります。 ノートブックまたはローカル ターミナルで次のコマンドを実行します。
!pip install openai
以下は、Databricks ノートブックにパッケージをインストールする場合にのみ必要です
dbutils.library.restartPython()
Serving REST API へのアクセスは、Databricks Runtime for Machine Learning で利用できます。
!pip install mlflow
以下は、Databricks ノートブックにパッケージをインストールする場合にのみ必要です
dbutils.library.restartPython()
Databricks Runtime 13.3 LTS以降を使用するすべての Databricksクラスターには、Databricks SDK for Python が既にインストールされています。Databricks Runtime 12.2 LTS以下を使用するDatabricksクラスターの場合は、まずDatabricks SDK for Pythonをインストールする必要があります。「ステップ1: Databricks SDK for Pythonをインストールまたはアップグレードする」を参照してください。
チャット補完モデルのクエリー
チャット モデルに対してクエリを実行する例を次に示します。 この例は、モデル サービス機能 (基盤モデルAPIまたは外部モデル) のいずれかを使用して使用可能になったチャット モデルのクエリに適用されます。
バッチ推論の例については、 「基盤モデルAPIを使用したバッチ推論」を参照してください。
以下は、ワークスペースのトークン単位の従量課金の基盤モデルAPIのエンドポイント databricks-dbrx-instruct
によって利用可能になる DBRX Instruct モデルに対するチャット リクエストです。
OpenAI クライアントを使用するには、モデルサービングのエンドポイント名をmodel
入力として指定します。 次の例では、コンピュート上にDatabricks APIと openai
がインストールされていることを前提としています。 OpenAI クライアントを Databricks に接続するには、Databricks ワークスペース インスタンスも必要です。
import os
import openai
from openai import OpenAI
client = OpenAI(
api_key="dapi-your-databricks-token",
base_url="https://example.staging.cloud.databricks.com/serving-endpoints"
)
response = client.chat.completions.create(
model="databricks-dbrx-instruct",
messages=[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is a mixture of experts model?",
}
],
max_tokens=256
)
重要
次の例では、REST API パラメーターを使用して、基盤モデルにサービスを提供するサービス エンドポイントをクエリします。 これらのパラメーターはパブリック プレビューであり、定義は変更される可能性があります。 POST /serving-endpoints/{name}/invocations を参照してください。
以下は、ワークスペースのトークン単位の従量課金の基盤モデルAPIのエンドポイント databricks-dbrx-instruct
によって利用可能になる DBRX Instruct モデルに対するチャット リクエストです。
curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": " What is a mixture of experts model?"
}
]
}' \
https://<workspace_host>.databricks.com/serving-endpoints/databricks-dbrx-instruct/invocations \
重要
次の例では、 MLflow Deployments SDKのpredict()
API を使用します。
以下は、ワークスペースのトークン単位の従量課金の基盤モデルAPIのエンドポイント databricks-dbrx-instruct
によって利用可能になる DBRX Instruct モデルに対するチャット リクエストです。
import mlflow.deployments
# Only required when running this example outside of a Databricks Notebook
export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"
client = mlflow.deployments.get_deploy_client("databricks")
chat_response = client.predict(
endpoint="databricks-dbrx-instruct",
inputs={
"messages": [
{
"role": "user",
"content": "Hello!"
},
{
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
{
"role": "user",
"content": "What is a mixture of experts model??"
}
],
"temperature": 0.1,
"max_tokens": 20
}
)
以下は、ワークスペースのトークン単位の従量課金の基盤モデルAPIのエンドポイント databricks-dbrx-instruct
によって利用可能になる DBRX Instruct モデルに対するチャット リクエストです。
このコードはワークスペース内のノートブックで実行する必要があります。 「Databricks ノートブックから Databricks SDK for Python を使用する」を参照してください。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="databricks-dbrx-instruct",
messages=[
ChatMessage(
role=ChatMessageRole.SYSTEM, content="You are a helpful assistant."
),
ChatMessage(
role=ChatMessageRole.USER, content="What is a mixture of experts model?"
),
],
max_tokens=128,
)
print(f"RESPONSE:\n{response.choices[0].message.content}")
LangChain を使用して基盤モデル エンドポイントにクエリを実行するには、次のいずれかを実行できます。
Databricks
LLM クラスをインポートし、endpoint_name
とtransform_input_fn
を指定します。ChatDatabricks
ChatModel クラスをインポートし、endpoint
を指定します。
次の例では、LangChain の Databricks
LLM クラスを使用して、トークン単位の従量課金の基盤モデルAPIエンドポイント databricks-dbrx-instruct
をクエリします。 基盤モデルAPIリクエスト ディクショナリに messages
を必要としますが、LangChain Databricks LLM はデフォルトでリクエスト ディクショナリに prompt
を提供します。 transform_input
関数を使用して、要求ディクショナリを必要な形式に準備します。
from langchain.llms import Databricks
from langchain_core.messages import HumanMessage, SystemMessage
def transform_input(**request):
request["messages"] = [
{
"role": "user",
"content": request["prompt"]
}
]
del request["prompt"]
return request
llm = Databricks(endpoint_name="databricks-dbrx-instruct", transform_input_fn=transform_input)
llm("What is a mixture of experts model?")
次の例では、 ChatDatabricks
ChatModel クラスを使用し、 endpoint
を指定します。
from langchain.chat_models import ChatDatabricks
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="You're a helpful assistant"),
HumanMessage(content="What is a mixture of experts model?"),
]
chat_model = ChatDatabricks(endpoint="databricks-dbrx-instruct", max_tokens=500)
chat_model.invoke(messages)
重要
次の例では、組み込み SQL 関数AIを使用します。 この関数は パブリック プレビューであり 、定義は変更される可能性があります。 「 サーブされたモデルをai_query()を使ってクエリーする」を参照してください。
以下は、ワークスペースのトークン単位の従量課金の基盤モデルAPIエンドポイント databricks-llama-2-70b-chat
によって利用可能になる、llama-2-70b-chat
へのチャット リクエストです。
注:
ai_query()
関数は、DBRX または DBRX Instruct モデルを提供するクエリ エンドポイントをサポートしません。
SELECT ai_query(
"databricks-llama-2-70b-chat",
"Can you explain AI in ten words?"
)
例として、REST API を使用する場合のチャット モデルの予想されるリクエスト形式を次に示します。 外部モデルの場合、特定のプロバイダーおよびエンドポイント構成に有効な追加の を含めることもできます。 追加クエリを参照してください。
{
"messages": [
{
"role": "user",
"content": "What is a mixture of experts model?"
}
],
"max_tokens": 100,
"temperature": 0.1
}
REST API を使用して行われたリクエストに対する予想される応答形式は次のとおりです。
{
"model": "databricks-dbrx-instruct",
"choices": [
{
"message": {},
"index": 0,
"finish_reason": null
}
],
"usage": {
"prompt_tokens": 7,
"completion_tokens": 74,
"total_tokens": 81
},
"object": "chat.completion",
"id": null,
"created": 1698824353
}
エンべディングモデルのクエリー
以下は、基盤モデルAPIによって利用可能になった bge-large-en
モデルの埋め込みリクエストです。 この例は、モデルサービング機能 (基盤モデルAPIまたは外部モデル) のいずれかを使用して使用可能になった埋め込みモデルのクエリに適用されます。
OpenAI クライアントを使用するには、モデルサービング エンドポイント名をmodel
入力として指定します。 次の例では、Databricks API トークンとopenai
がクラスターにインストールされていることを前提としています。
import os
import openai
from openai import OpenAI
client = OpenAI(
api_key="dapi-your-databricks-token",
base_url="https://example.staging.cloud.databricks.com/serving-endpoints"
)
response = client.embeddings.create(
model="databricks-bge-large-en",
input="what is databricks"
)
重要
次の例では、基盤モデルまたは外部モデルを提供するサービス エンドポイントを照会するためにREST APIヘッダーを使用します。 これらはパブリックプレビューであり、定義は変更される可能性があります。 POST /serving-endpoints/{name}/invocationsを参照してください。
curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '{ "input": "Embed this sentence!"}' \
https://<workspace_host>.databricks.com/serving-endpoints/databricks-bge-large-en/invocations
重要
次の例では、 MLflow Deployments SDKのpredict()
API を使用します。
import mlflow.deployments
export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"
client = mlflow.deployments.get_deploy_client("databricks")
embeddings_response = client.predict(
endpoint="databricks-bge-large-en",
inputs={
"input": "Here is some text to embed"
}
)
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="databricks-bge-large-en",
input="Embed this sentence!"
)
print(response.data[0].embedding)
LangChain で Databricks 基盤モデルAPIモデルを埋め込みモデルとして使用するには、DatabricksEmbeddings
クラスをインポートし、次のように endpoint
を指定します。
from langchain.embeddings import DatabricksEmbeddings
embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")
embeddings.embed_query("Can you explain AI in ten words?")
重要
次の例では、組み込み SQL 関数AIを使用します。 この関数は パブリック プレビューであり 、定義は変更される可能性があります。 「 サーブされたモデルをai_query()を使ってクエリーする」を参照してください。
SELECT ai_query(
"databricks-bge-large-en",
"Can you explain AI in ten words?"
)
以下は、エンべディングモデルで想定される要求形式です。 外部モデルの場合、特定のプロバイダーおよびエンドポイント構成に有効な追加パラメーターを含めることができます。 「追加のクエリ」を参照してください。
{
"input": [
"embedding text"
]
}
想定される応答形式は次のとおりです。
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": []
}
],
"model": "text-embedding-ada-002-v2",
"usage": {
"prompt_tokens": 2,
"total_tokens": 2
}
}
テキスト補完モデルのクエリー
以下は、基盤モデルAPIによって利用可能になった databricks-mixtral-8x7b-instruct
モデルの補完リクエストです。 この例は、モデル サービス機能 (基盤モデルAPIまたは外部モデル) のいずれかを使用して使用可能になったチャット モデルのクエリに適用されます。 引数と構文については、 「Completion タスク」を参照してください。
OpenAI クライアントを使用するには、モデルサービング エンドポイント名をmodel
入力として指定します。 次の例では、Databricks API トークンとopenai
がクラスターにインストールされていることを前提としています。
import os
import openai
from openai import OpenAI
client = OpenAI(
api_key="dapi-your-databricks-token",
base_url="https://example.staging.cloud.databricks.com/serving-endpoints"
)
completion = client.completions.create(
model="databricks-mixtral-8x7b-instruct",
prompt="what is databricks",
temperature=1.0
)
重要
次の例では、基盤モデルまたは外部モデルを提供するサービス エンドポイントを照会するためにREST APIヘッダーを使用します。 これらはパブリックプレビューであり、定義は変更される可能性があります。 POST /serving-endpoints/{name}/invocationsを参照してください。
curl \
-u token:$DATABRICKS_TOKEN \
-X POST \
-H "Content-Type: application/json" \
-d '{"prompt": "What is a quoll?", "max_tokens": 64}' \
https://<workspace_host>.databricks.com/serving-endpoints/databricks-mixtral-8x7b-instruct/invocations
重要
次の例では、 MLflow Deployments SDKのpredict()
API を使用します。
import os
import mlflow.deployments
# Only required when running this example outside of a Databricks Notebook
os.environ['DATABRICKS_HOST'] = "https://<workspace_host>.databricks.com"
os.environ['DATABRICKS_TOKEN'] = "dapi-your-databricks-token"
client = mlflow.deployments.get_deploy_client("databricks")
completions_response = client.predict(
endpoint="databricks-mixtral-8x7b-instruct",
inputs={
"prompt": "What is the capital of France?",
"temperature": 0.1,
"max_tokens": 10,
"n": 2
}
)
# Print the response
print(completions_response)
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="databricks-mixtral-8x7b-instruct",
prompt="Write 3 reasons why you should train an AI model on domain specific data sets."
)
print(response.choices[0].text)
重要
次の例では、組み込み SQL 関数AIを使用します。 この関数は パブリック プレビューであり 、定義は変更される可能性があります。 「 サーブされたモデルをai_query()を使ってクエリーする」を参照してください。
SELECT ai_query(
"databricks-mpt-30b-instruct",
"Can you explain AI in ten words?"
)
以下は、入力候補モデルで想定される要求形式です。 外部モデルの場合、特定のプロバイダーおよびエンドポイント構成に有効な追加パラメーターを含めることができます。 「追加のクエリ」を参照してください。
{
"prompt": "What is mlflow?",
"max_tokens": 100,
"temperature": 0.1,
"stop": [
"Human:"
],
"n": 1,
"stream": false,
"extra_params":{
"top_p": 0.9
}
}
想定される応答形式は次のとおりです。
{
"id": "cmpl-8FwDGc22M13XMnRuessZ15dG622BH",
"object": "text_completion",
"created": 1698809382,
"model": "gpt-3.5-turbo-instruct",
"choices": [
{
"text": "MLflow is an open-source platform for managing the end-to-end machine learning lifecycle. It provides tools for tracking experiments, managing and deploying models, and collaborating on projects. MLflow also supports various machine learning frameworks and languages, making it easier to work with different tools and environments. It is designed to help data scientists and machine learning engineers streamline their workflows and improve the reproducibility and scalability of their models.",
"index": 0,
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 5,
"completion_tokens": 83,
"total_tokens": 88
}
}
AI Playground を使用してサポートされている LLM とチャットする
AI Playgroundを使用して、サポートされている大規模言語モデルと対話できます。 AI Playground Databricks ワークスペースから LLM をテスト、プロンプト、比較できるチャットのような環境です。