Databricks の外部モデル モデルサービング
重要
この記事のコード例では、 パブリック プレビューの MLflow デプロイ CRUD API の使用方法を示します。
この記事では、Databricks モデルサービングの外部モデルと、サポートされているモデル プロバイダーと制限事項について説明します。
外部モデルとは
外部モデルは、Databricks の外部でホストされているサードパーティ モデルです。 モデルサービングでサポートされている外部モデルを使用すると、OpenAI や Anthropic などのさまざまな大規模言語モデル (LLM) プロバイダーの使用と管理を組織内で合理化できます。 また、Databricks モデルサービングをプロバイダーとして使用してカスタム モデルを提供し、それらのエンドポイントにレート制限を提供することもできます。 このサポートの一環として、モデルサービングは、特定の LLM 関連の要求を処理するための統合エンドポイントを提供することで、これらのサービスとの対話を簡素化する高レベルのインターフェイスを提供します。
さらに、Databricks の外部モデルのサポートにより、資格情報の一元管理が提供されます。 APIキーを1つの安全な場所に保存することで、組織はシステム全体で機密性の高いAPIキーの露出を最小限に抑え、セキュリティ体制を強化できます。 また、これらのキーがコード内で公開されるのを防ぐのにも役立ち、エンド ユーザーにキーの安全な管理を要求します。
MLflow Deployments SDK を使用して外部モデル エンドポイントを作成し、それらのエンドポイントによって提供されるサポートされているモデルをクエリする手順については、「チュートリアル: OpenAI モデルをクエリする外部モデル エンドポイントの作成」を参照してください。 サービス提供 UI と REST API の使用方法については、次のガイドを参照してください。
要件
モデルプロバイダーの API キー。
外部モデルがサポートするリージョンの Databricks ワークスペース。
モデル プロバイダー
モデルサービングの外部モデルは、さまざまなモデルプロバイダーをサポートするように設計されています。 プロバイダーは、OpenAI、Anthropic などの機械学習モデルのソースを表します。 各プロバイダーには、外部モデル エンドポイント構成の external_model
フィールド内にカプセル化された特定の特性と構成があります。
次のプロバイダーがサポートされています。
openai: OpenAI によって提供されるモデルと、Azure OpenAI と Azure OpenAI と AAD の Azure 統合用。
anthropic: Anthropicが提供するモデル用。
cohere: Cohere が提供するモデルの場合。
Amazon -bedrock : Amazon Bedrockによって提供されるモデルの場合。
ai21labs: AI21Labs が提供するモデルの場合。
google-Cloud-vertex- AI : Google Cloud Vertex AIによって提供されるモデルの場合。
databricks-model-serving: 互換性のあるスキーマを持つ Databricks モデルサービング エンドポイントの場合。 「 エンドポイントの構成」を参照してください。
ここに記載されていないプロバイダーのサポートをリクエストするには、Databricks アカウント チームにお問い合わせください。
サポートされるモデル
選択したモデルは、API 呼び出しから得られる応答の結果に直接影響します。 したがって、ユースケースの要件に合ったモデルを選択してください。 たとえば、会話形式の応答を生成するには、チャット モデルを選択できます。 逆に、テキストの埋め込みを生成する場合は、埋め込みモデルを選択できます。
次の表は、サポートされているモデルと対応する エンドポイントの種類の非網羅的なリストを示しています。 以下に示すモデルの関連付けは、特定のプロバイダーで使用可能になったときに、新しくリリースされたモデルの種類のエンドポイントを構成するときに役立つガイドとして使用できます。 お客様は、該当するモデルライセンスへの準拠を確保する責任があります。
注:
LLMの急速な発展に伴い、このリストが常に最新であるという保証はありません。
モデル プロバイダー |
llm/v1/completions |
llm/v1/chat |
llm/v1/embeddings |
---|---|---|---|
OpenAI** (英語) |
|
|
|
Azure OpenAI** |
|
|
|
Anthropic |
|
|
|
コヒール** |
|
|
|
Databricks モデルサービング |
Databricks サービングエンドポイント |
Databricks サービングエンドポイント |
Databricks サービングエンドポイント |
Amazon Bedrock |
Anthropic :
Cohere :
AI21 Labs :
|
Anthropic :
|
Amazon :
|
AI21ラボ† |
|
||
Google Cloud Vertex AI |
text-bison |
|
textembedding-gecko |
**
モデル プロバイダーは、微調整された補完モデルとチャット モデルをサポートしています。 微調整されたモデルをクエリするには、external model
構成の name
フィールドに微調整されたモデルの名前を入力します。
† モデル プロバイダーは、カスタム補完モデルをサポートしています。
Databricks モデルサービングエンドポイントで提供されるモデルを使用する
プロバイダーとしての Databricks モデルサービング エンドポイントは、llm/v1/completions
、llm/v1/chat
、llm/v1/embeddings
のエンドポイントの種類でサポートされています。これらのエンドポイントは、必須としてマークされた標準クエリーパラメーターを受け入れる必要がありますが、Databricks モデルサービング エンドポイントがサポートしているかどうかによっては、他のパラメーターが無視される場合があります。
標準クエリー パラメーターの API リファレンスの 「POST /serving-endpoints/{name}/invocations 」を参照してください。
これらのエンドポイントは、次の OpenAI 形式で応答を生成する必要があります。
完了タスクの場合:
{
"id": "123", # Not Required
"model": "test_databricks_model",
"choices": [
{
"text": "Hello World!",
"index": 0,
"logprobs": null, # Not Required
"finish_reason": "length" # Not Required
}
],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
チャットタスクの場合:
{
"id": "123", # Not Required
"model": "test_chat_model",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
},
{
"index": 1,
"message": {
"role": "human",
"content": "\n\nWhat is the weather in San Francisco?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
埋め込みタスクの場合:
{
"data": [
{
"embedding": [
0.0023064255,
-0.009327292,
.... # (1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
},
{
"embedding": [
0.0023064255,
-0.009327292,
.... #(1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
}
],
"model": "test_embedding_model",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
エンドポイントの構成
外部モデルを提供し、クエリを実行するには、提供エンドポイントを設定する必要があります。 「カスタム モデルビング エンドポイントの作成」を参照してください。
外部モデルサービング エンドポイントの場合は、 external_model
フィールドとそのパラメーターをエンドポイント構成の served_entities
セクションに含める必要があります。
external_model
フィールドは、このエンドポイントが要求を転送するモデルを定義します。モデルを指定するときは、要求しているモデルをプロバイダーがサポートしていることが重要です。 たとえば、プロバイダーとしての openai
は text-embedding-ada-002
のようなモデルをサポートしていますが、他のプロバイダーはサポートしていない場合があります。 モデルがプロバイダーでサポートされていない場合、Databricks は、そのモデルに要求をルーティングしようとすると、HTTP 4xx エラーを返します。
次の表は、 external_model
フィールドのパラメーターをまとめたものです。 POST /api/2.0/serving-endpoints を参照してください。 エンドポイント構成パラメーターの場合。
パラメーター |
説明 |
---|---|
|
使用するモデルの名前。 たとえば、OpenAI の |
|
このモデルのプロバイダーの名前を指定します。 この文字列値は、サポートされている外部モデル プロバイダーに対応している必要があります。 たとえば、OpenAI の |
|
このタスクは、必要な言語モデルの対話の種類に対応しています。 サポートされているタスクは、"llm/v1/completions"、"llm/v1/chat"、"llm/v1/embeddings" です。 |
|
モデルに必要な追加の構成の詳細が含まれます。 これには、API ベース URL と API キーの指定が含まれます。 「 エンドポイントのプロバイダーを構成する」を参照してください。 |
以下は、 create_endpoint()
API を使用して外部モデルエンドポイントを作成する例です。 この例では、完了エンドポイントに送信された要求は、anthropic
によって提供されるclaude-2
モデルに転送されます。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="anthropic-completions-endpoint",
config={
"served_entities": [
{
"name": "test",
"external_model": {
"name": "claude-2",
"provider": "anthropic",
"task": "llm/v1/completions",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
}
}
}
]
}
)
エンドポイントのプロバイダーを構成する
エンドポイントを作成するときは、指定したモデル プロバイダーに必要な構成を指定する必要があります。 次のセクションでは、各モデル プロバイダーで使用可能なエンドポイント構成パラメーターをまとめます。
OpenAI
構成パラメーター |
説明 |
*必須 |
デフォルト |
---|---|---|---|
|
OpenAI サービスの API キー。 |
あり |
|
|
使用する OpenAI API のタイプを指定するオプションのフィールド。 |
なし |
|
|
OpenAI API のベース URL。 |
なし |
|
|
OpenAI API のバージョンを指定するオプションのフィールド。 |
なし |
|
|
OpenAI で組織を指定するオプションのフィールド。 |
なし |
Azure OpenAI (英語)
Azure OpenAI には、直接の OpenAI サービスとは異なる機能があります。 概要については、 比較のドキュメントを参照してください。
構成パラメーター |
説明 |
*必須 |
デフォルト |
---|---|---|---|
|
Azure OpenAI サービスの API キー。 |
あり |
|
|
このパラメーターを調整して、優先されるセキュリティー・アクセス検証プロトコルを表します。 アクセストークンの検証には、 |
あり |
|
|
Azure によって提供される Azure OpenAI API サービスのベース URL。 |
あり |
|
|
使用する Azure OpenAI サービスのバージョン (日付で指定)。 |
あり |
|
|
Azure OpenAI サービスのデプロイ リソースの名前。 |
あり |
|
|
OpenAI で組織を指定するオプションのフィールド。 |
なし |
次の例は、Azure OpenAI を使用してエンドポイントを作成する方法を示しています。
client.create_endpoint(
name="openai-chat-endpoint",
config={
"served_entities": [{
"external_model": {
"name": "gpt-3.5-turbo",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
"openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
"openai_deployment_name": "my-gpt-35-turbo-deployment",
"openai_api_version": "2023-05-15"
}
}
}]
}
)
Google Cloud Vertex AI
構成パラメーター |
説明 |
*必須 |
デフォルト |
---|---|---|---|
|
これは、Google Cloud Vertex AIサービスにアクセスできるサービス アカウントの秘密キーです。 「サービス アカウント キーを管理するためのベスト プラクティス」を参照してください。 |
あり |
|
|
これは、Google Cloud Vertex AIサービスのリージョンです。 詳細については、「 サポートされているリージョン 」を参照してください。 一部のモデルは、特定の地域でのみ利用できます。 |
あり |
|
|
これは、サービス アカウントが関連付けられている Google クラウド プロジェクト ID です。 |
あり |
Amazon Bedrock
Amazon Bedrock を外部モデルプロバイダーとして使用するには、顧客は指定された AWS リージョンで Bedrock が有効になっていること、および指定された AWS キーペアが Bedrock サービスと対話するための適切なアクセス許可を持っていることを確認する必要があります。 詳細については、 「AWS Identity and Access Management」を参照してください。
構成パラメーター |
説明 |
*必須 |
デフォルト |
---|---|---|---|
|
使用する AWS リージョン。 そこで Bedrock を有効にする必要があります。 |
あり |
|
|
Bedrock サービスと対話するためのアクセス許可を持つ AWS アクセスキー ID。 |
あり |
|
|
アクセスキー ID とペアになった AWS シークレットアクセスキーで、Bedrock サービスと対話するためのアクセス許可。 |
あり |
|
|
Amazon Bedrock の基盤となるプロバイダー。 サポートされている値 (大文字と小文字は区別されません) は次のとおりです: Anthropic、Cohere、AI21Labs、Amazon |
あり |
次の例は、Amazon Bedrock でエンドポイントを作成する方法を示しています。
client.create_endpoint(
name="bedrock-anthropic-completions-endpoint",
config={
"served_entities": [
{
"external_model": {
"name": "claude-v2",
"provider": "amazon-bedrock",
"task": "llm/v1/completions",
"amazon_bedrock_config": {
"aws_region": "<YOUR_AWS_REGION>",
"aws_access_key_id": "{{secrets/my_amazon_bedrock_secret_scope/aws_access_key_id}}",
"aws_secret_access_key": "{{secrets/my_amazon_bedrock_secret_scope/aws_secret_access_key}}",
"bedrock_provider": "anthropic",
},
}
}
]
},
)
AWS のアクセス許可に問題がある場合、Databricks ではAmazon Bedrock APIを使用して認証情報を直接確認することをお勧めします。
外部モデルエンドポイントをクエリーする
外部モデルエンドポイントを作成すると、ユーザーからのトラフィックを受信する準備が整います。
OpenAI クライアント、REST API、または MLflow Deployments SDK を使用して、スコアリング リクエストをエンドポイントに送信できます。
POST /serving-endpoints/{name}/invocations のスコアリング要求の標準クエリー パラメーターを参照してください。
次の例では、OpenAI クライアントを使用して、Anthropic によってホストされている claude-2
入力候補モデルに対してクエリを実行します。 OpenAI クライアントを使用するには、クエリするモデルをホストするモデルサービング エンドポイントの名前をmodel
フィールドに入力します。
この例では、以前に作成したエンドポイント anthropic-completions-endpoint
を使用して、Anthropic モデル プロバイダーから外部モデルにアクセスするように構成します。 外部モデルエンドポイントの作成方法を参照してください。
クエリできる追加のモデルとそのプロバイダーについては 、「サポートされているモデル 」を参照してください。
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="anthropic-completions-endpoint",
prompt="what is databricks",
temperature=1.0
)
print(completion)
想定される出力応答形式:
{
"id": "123", # Not Required
"model": "anthropic-completions-endpoint",
"choices": [
{
"text": "Hello World!",
"index": 0,
"logprobs": null, # Not Required
"finish_reason": "length" # Not Required
}
],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
追加のクエリーパラメーター
エンドポイントのプロバイダーがサポートする追加のパラメーターをクエリーの一部として渡すことができます。
例:
logit_bias
(OpenAI、Cohereによってサポートされています)。top_k
(Anthropic、Cohereによるサポート)。frequency_penalty
(OpenAI、Cohereによってサポートされています)。presence_penalty
(OpenAI、Cohereによってサポートされています)。stream
(OpenAI、Anthropic、Cohere、Amazon Bedrock for Anthropic によってサポートされています)。 これは、チャットと完了リクエストでのみ使用できます。