Model Servingにおける外部モデル
新しい Unity AI ゲートウェイ ベータ版をお試しください
新しいUnity AI Gatewayエクスペリエンスがベータ版で利用可能です。新しいUnity AI Gatewayは、拡張された機能を持つLLMエンドポイントとコーディングエージェントを管理するためのエンタープライズコントロールプレーンです。Unity AI GatewayでのAIガバナンスを参照してください。
プレビュー
この機能はパブリック プレビュー段階です。サポートされているリージョンについては、機能リージョンサポートを参照してください。
この記事のコード例では、 パブリック プレビューである MLflow Deployments CRUD API の使用方法を示します。
この記事では、Model Servingにおける外部モデルについて、サポートされるモデルプロバイダーと制限事項を含めて説明します。
外部モデルとは何ですか?
外部モデルを提供するモデルサービングエンドポイントで、AI Gateway を構成できるようになりました。AI Gateway は、ガバナンス、モニタリング、および本番運用の準備をこれらのモデルサービングエンドポイントにもたらします。Unity AI GatewayでのAIガバナンスを参照してください。
外部モデルとは、Databricks の外部でホストされているサードパーティのモデルです。Model Servingによってサポートされている外部モデルを使用すると、組織内でOpenAIやAnthropicなどの様々な大規模言語モデル(LLM)プロバイダーの利用と管理を効率化できます。Model Servingをプロバイダーとして使用してカスタムモデルを提供することもできます。これにより、これらのエンドポイントのレート制限が提供されます。このサポートの一環として、Model Servingは、特定のLLM関連のリクエストを処理するための統合エンドポイントを提供することにより、これらのサービスとの対話を簡素化する高レベルのインターフェイスを提供します。
さらに、Databricksの外部モデルサポートは、一元化された資格情報管理を提供します。APIキーを1つの安全な場所に保存することで、組織はシステム全体での機密性の高いAPIキーの公開を最小限に抑え、セキュリティ体制を強化できます。また、コード内でこれらのキーが公開されるのを防ぎ、エンドユーザーがキーを安全に管理する必要がなくなります。
外部モデルエンドポイントの作成と、MLflow Deployments SDK を使用したそれらのエンドポイントが提供するサポートされているモデルのクエリーに関するステップバイステップのガイダンスについては、「チュートリアル:OpenAI モデルをクエリーするための外部モデルエンドポイントを作成する」を参照してください。Serving UI と REST API の使用方法については、以下のガイドを参照してください。
要件
- モデルプロバイダーのAPIキーまたは認証フィールド。
- 外部モデルがサポートされているリージョンの Databricks ワークスペース。
モデルプロバイダー
Model Servingにおける外部モデルは、さまざまなモデルプロバイダーをサポートするように設計されています。プロバイダーは、OpenAI、Anthropicなどの機械学習モデルのソースを表します。各プロバイダーには固有の特性と構成があり、これらは外部モデルエンドポイント構成のexternal_modelフィールド内にカプセル化されています。
以下のプロバイダーがサポートされています。
- openai : OpenAI によって提供されるモデルと、AAD を使用した Azure OpenAI の Azure インテグレーションによって提供されるモデル。
- anthropic : Anthropic が提供するモデル向け。
- cohere : Cohere が提供するモデル用。
- **amazon-bedrock**: Amazon Bedrock が提供するモデルの場合。
- **google-cloud-vertex-ai**: Google クラウド Vertex AI によって提供されるモデルの場合。
- databricks-model-serving :互換性のあるスキーマを持つモデルサービングエンドポイントの場合。エンドポイントの構成を参照してください。
- カスタム :Databricks では直接サポートされていないものの、OpenAI APIと互換性のあるカスタムプロキシの背後にある代替プロバイダーまたはモデル向け。
ここに記載されていないプロバイダーのサポートをリクエストするには、**カスタム**プロバイダーオプションを使用するか、Databricksアカウントチームにお問い合わせください。
サポートされているモデル
選択するモデルは、API呼び出しから得られる応答の結果に直接影響します。そのため、ユースケースの要件に合ったモデルを選択してください。たとえば、会話応答を生成するには、チャットモデルを選択できます。逆に、テキストの埋め込みを生成するには、埋め込みモデルを選択できます。
サポートされているモデルをご覧ください。
Model Servingエンドポイントで提供されるモデルを使用する
Model Servingエンドポイントは、プロバイダーとしてllm/v1/completions、llm/v1/chat、およびllm/v1/embeddingsのエンドポイントタイプでサポートされています。これらのエンドポイントは、必須としてマークされた標準のクエリパラメーターを受け入れる必要がありますが、他のパラメーターはModel Servingエンドポイントがそれらをサポートするかどうかに応じて無視される可能性があります。
標準クエリパラメーターについては、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
}
}
エンドポイント構成
外部モデルを提供し、クエリを実行するには、サービングエンドポイントを設定する必要があります。外部モデルサービングエンドポイントの作成を参照してください。
外部モデルサービングエンドポイントの場合、エンドポイント構成のserved_entitiesセクションにexternal_modelフィールドとそのパラメーターを含める必要があります。サービングエンドポイントで複数の外部モデルを構成する場合は、各外部モデルのトラフィックルーティングの割合を定義するためにtraffic_configを提供する必要があります。
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}}"
}
}
}
]
}
)
エンドポイントのプロバイダーを構成します
エンドポイントを作成する際は、指定されたモデルプロバイダーに必要な構成を提供する必要があります。以下のセクションでは、各モデルプロバイダーで利用可能なエンドポイント構成パラメーターを要約します。
Databricksは、各モデルプロバイダーに提供された資格情報を暗号化して安全に保存します。これらの資格情報は、関連付けられたエンドポイントが削除されると自動的に削除されます。
OpenAI
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| OpenAIサービスを使用した OpenAI API キーのDatabricksシークレットキーのリファレンス。API キーを直接貼り付ける場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| OpenAIサービスを使用したOpenAI APIキーは、プレーンテキスト文字列として提供されます。Databricks Secretsを使用してキーを参照する場合は、 | 次のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| 使用する OpenAI API のタイプを指定するためのオプションのフィールドです。 | No |
|
| OpenAI APIのベースURL。 | No |
|
| OpenAI APIバージョンを指定するオプションフィールドです。 | No | |
| OpenAIで組織を指定するオプションフィールド。 | No |
Cohere
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| Cohere APIキーのDatabricksシークレットキー リファレンス。APIキーを直接貼り付けることを希望する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| プレーンテキスト文字列として提供されるCohere APIキー。Databricks Secrets を使用してキーを参照する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| CohereサービスのベースURL | No |
Anthropic
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| Anthropic APIキーのDatabricks シークレットキー リファレンス。API キーを直接貼り付ける場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| プレーンテキストの文字列として提供されるAnthropic APIキー。Databricks Secrets を使用してキーを参照する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: |
Azure OpenAI
Azure OpenAIは、直接的なOpenAIサービスと比較して異なる特徴があります。概要については、比較ドキュメントをご覧ください。
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| Azureサービスを使用した OpenAI API キーのDatabricksシークレットキー リファレンス。API キーを直接貼り付ける場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| Azureサービスを使用し、プレーンテキスト文字列として提供されるOpenAI APIキー。Databricks Secrets を使用してキーを参照する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| アクセストークンの検証に | はい | |
| Azure が提供する Azure OpenAI API サービスのベース URL。 | はい | |
| 日付で指定された、利用するAzure OpenAIサービスのバージョン。 | はい | |
| Azure OpenAIサービスのデプロイリソースの名前。 | はい | |
| OpenAIで組織を指定するオプションフィールド。 | No |
Microsoft Entra ID で Azure OpenAI を使用している場合は、エンドポイント設定で以下のパラメーターを使用してください。Databricks は、Microsoft Entra ID トークンのデフォルト スコープとして https://cognitiveservices.azure.com/ を渡します。
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| Microsoft Entra ID認証用のテナントID。 | はい | |
| Microsoft Entra ID認証のクライアントID。 | はい | |
| Microsoft Entra ID 認証に使用されるクライアント シークレットのDatabricks シークレットキー リファレンス。クライアントシークレットを直接貼り付ける場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| Microsoft Entra ID認証に使用されるクライアントシークレットは、プレーンテキスト文字列として提供されます。Databricks Secrets を使用してキーを参照する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| Microsoft Entra IDを使用した認証には | はい | |
| Azure が提供する Azure OpenAI API サービスのベース URL。 | はい | |
| 日付で指定された、利用するAzure OpenAIサービスのバージョン。 | はい | |
| Azure OpenAIサービスのデプロイリソースの名前。 | はい | |
| OpenAIで組織を指定するオプションフィールド。 | No |
次の例は、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 クラウド Vertex AI
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| Google Cloud Vertex AI サービスにアクセスできるサービスアカウントの、完全なサービスアカウントキー JSON ファイルに関する Databricks シークレットキーのリファレンス。これは、Google クラウドからダウンロードされた JSON キーファイルの全内容であり、 | キーは、次のいずれかのフィールド( | |
| Google Cloud Vertex AI Service にアクセスできるサービスアカウントの完全なサービスアカウントキーJSON。プレーンテキストシークレットとして提供されます。これは、 | キーは、次のいずれかのフィールド( | |
| これはGoogle クラウド Vertex AIサービスのリージョンです。詳細については、サポートされているリージョンを参照してください。一部のモデルは特定のリージョンでのみ利用可能です。 | はい | |
| これは、サービス アカウントが関連付けられている Google Cloud プロジェクト ID です。 | はい |
Amazon Bedrock
Amazon Bedrockを外部モデルプロバイダーとして使用するには、顧客は、指定したAWSリージョンでBedrockが有効になっていること、および指定したAWSキー ペアにBedrockサービスとやり取りするための適切な権限があることを確認する必要があります。詳細については、AWS Identity and Access Managementを参照してください。
既存の Amazon Bedrock ガードレールを AI Gateway 経由で Amazon Bedrock モデルとともに使用するには、X-Amzn-Bedrock-GuardrailIdentifier ヘッダーを任意のガードレール ARN に設定し、必要に応じて X-Amzn-Bedrock-GuardrailVersion を設定してください。これらのヘッダーは Amazon Bedrock に転送されます。
AWSのアクセス許可に問題がある場合は、Databricksは、Amazon Bedrock APIで資格情報を直接確認することを推奨します。
AI21 Labs
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| AI21 Labs APIキーのDatabricksシークレットキー参照。APIキーを直接貼り付けることを希望する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| プレーンテキスト文字列として提供されるAI21 Labs APIキー。Databricks Secrets を使用してキーを参照する場合は、 | 以下のいずれかのフィールドを使用してAPIキーを指定する必要があります: |
カスタムプロバイダー
カスタムプロバイダーモデルを使用するには、OpenAI API互換である必要があります。
構成パラメーター | 説明 | 必須 | デフォルト |
|---|---|---|---|
| カスタムプロバイダーのモデルが存在するURL。URLは特定のAPIエンドポイントを指している必要があります。たとえば、 | はい | |
| カスタムプロバイダーがベアラートークン認証を利用している場合、必要なフィールドを指定してください。 | 以下のいずれかのフィールドを使用して認証方法を指定する必要があります: | |
| bearer認証用のトークンに関するDatabricksシークレットキーリファレンス。このパラメーターは | ベアラー認証を使用する場合は、次のいずれかのフィールド( | |
| プレーンテキスト文字列として提供されるベアラー認証用のトークン。このパラメーターは | ベアラー認証を使用する場合は、次のいずれかのフィールド( | |
| カスタムプロバイダーがAPIキー認証を利用する場合、必要なフィールドを指定します。 | 以下のいずれかのフィールドを使用して認証方法を指定する必要があります: | |
| APIキー認証のキー。このパラメーターは以下にネストする必要があります。 | はい、APIキー認証を使用する場合。 | |
| APIキー認証の値に関するDatabricksシークレットキーのリファレンス。APIキーを直接貼り付けたい場合は、 | APIキー認証を使用する場合は、次のいずれかのフィールドを使用してAPIキーを指定する必要があります: | |
| APIキー認証の値は、プレーンテキスト文字列として提供されます。Databricksシークレットを使用してキーを参照したい場合は、 | APIキー認証を使用する場合は、次のいずれかのフィールドを使用してAPIキーを指定する必要があります: |
次の例は、**ベアラー認証**を使用してカスタムプロバイダーでエンドポイントを作成する方法を示しています。
client.create_endpoint(
name="custom-provider-completions-endpoint",
config={
"served_entities": [
{
"external_model": {
"name": "custom-provider-model",
"provider": "custom",
"task": "llm/v1/chat",
"custom_provider_config": {
"custom_provider_url": "https://api.provider.com/chat/completions",
"bearer_token_auth": {
"token": "{{secrets/my_custom_provider_secret_scope/custom_provider_token}}"
}
}
}
}
]
},
)
以下の例は、 API キー認証 を使用してカスタムプロバイダーでエンドポイントを作成する方法を示しています:
client.create_endpoint(
name="custom-provider-completions-endpoint",
config={
"served_entities": [
{
"external_model": {
"name": "custom-provider-model",
"provider": "custom",
"task": "llm/v1/chat",
"custom_provider_config": {
"custom_provider_url": "https://my-custom-provider.com",
"api_key_auth": {
"key": "X-API-KEY",
"value": "{{secrets/my_custom_provider_secret_scope/custom_provider_api_key}}"
}
}
}
}
]
},
)
エンドポイントでAIゲートウェイを構成してください。
レート制限、使用状況の追跡、ログ記録などのAI Gateway機能を有効にするようにエンドポイントを構成することもできます。
モデルサービング エンドポイントでのAIゲートウェイの構成を参照してください。
外部モデルエンドポイントをクエリします
外部モデルエンドポイントを作成すると、ユーザーからのトラフィックを受信する準備が整います。
OpenAI クライアント、REST API、または MLflow Deployments SDK を使用して、エンドポイントにスコアリングリクエストを送信できます。
- スコアリングリクエストの標準のクエリパラメーターについては、POST /serving-endpoints/{name}/invocationsを参照してください。
- 基盤モデルを使用する
以下の例は、OpenAI クライアントを使用して Anthropic がホストする claude-2 完了モデルをクエリします。OpenAI クライアントを使用するには、クエリするモデルをホストするモデルサービング エンドポイントの名前を model フィールドに入力します。
この例では、Anthropic モデル プロバイダーから外部モデルにアクセスするために構成された、以前に作成したエンドポイント anthropic-completions-endpointを使用します。 外部モデルのエンドポイントを作成する方法を参照してください。
クエリできる追加のモデルとそのプロバイダーについては、「サポートされているモデル」を参照してください。
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によってサポートされています。)これは、チャットおよび完了のリクエストでのみ利用可能です。
制限事項
選択した外部モデルによっては、構成によって、データが元のリージョン外で処理される場合があります。Model Servingの制限と地域を参照してください。
その他のリソース
- チュートリアル:OpenAIモデルをクエリーする外部モデルエンドポイントの作成。
- 基盤モデルの使用を参照してください。