次の方法で共有


Mosaic AI Model Serving での外部モデル

重要

この記事のコード例では、パブリック プレビューの MLflow Deployments CRUD API の使用方法を示します。

この記事では、Mosaic AI Model Serving での外部モデルについて説明します。これには、サポートされているモデル プロバイダーと制限事項が含まれます。

外部モデルとは

外部モデルは、Databricks の外部でホストされているサードパーティ モデルです。 Model Serving でサポートされている外部モデルを使用すると、組織内のさまざまな大規模言語モデル (LLM) プロバイダー (OpenAI や Anthropic など) の使用と管理を効率化できます。 プロバイダーとして Mosaic AI Model Serving を使ってカスタム モデルを提供することもでき、これによりそれらのエンドポイントにレート制限が提供されます。 このサポートの一環として、Model Serving では、特定の LLM 関連の要求を処理する統合エンドポイントを提供することで、これらのサービスとの対話を簡略化する高度なインターフェイスが提供されます。

さらに、外部モデルに対する Azure Databricks のサポートにより、一元的な資格情報管理が提供されます。 API キーを 1 つの安全な場所に格納することで、組織はシステム全体で機密性の高い API キーの公開を最小限に抑えることで、セキュリティ体制を強化できます。 また、コード内でこれらのキーを公開したり、エンド ユーザーにキーの安全な管理を要求したりするのを防ぐのにも役立ちます。

MLflow Deployments SDK を使用した外部モデル エンドポイントの作成と、それらのエンドポイントによって提供されるサポート対象モデルへのクエリ実行に関するステップ バイ ステップのガイダンスについては、「チュートリアル: 外部モデル エンドポイントを作成して OpenAI モデルにクエリを実行する」をご参照ください。 Serving UI と REST API の使用方法の手順については、次のガイドをご参照ください。

要件

モデル プロバイダー

Model Serving の外部モデルは、さまざまなモデル プロバイダーをサポートするように設計されています。 プロバイダーは、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: 互換性のあるスキーマを使う Mosaic AI Model Serving エンドポイントの場合。 「エンドポイントの構成」を参照してください。

ここに一覧表示されていないプロバイダーのサポートを要求する場合は、Databricks アカウント チームにお問い合わせください。

サポートされているモデル

選択したモデルは、API 呼び出しから取得した応答の結果に直接影響します。 そのため、ユース ケースの要件に合ったモデルを選択します。 たとえば、会話型の応答を生成する場合、チャット モデルを選択できます。 逆に、テキストの埋め込みを生成する場合は、埋め込みモデルを選択できます。

以下の表は、サポートされているモデルと対応するエンドポイントの種類のリスト (完全なものではない) を示しています。 以下に一覧表示されているモデルの関連付けは、特定のプロバイダーで使用できるようになったときに、新しくリリースされたモデルの種類のエンドポイントを構成する場合に役立つガイドとして使用できます。 お客様は、該当するモデル ライセンスへのコンプライアンスを遵守する責任を負います。

Note

LLM の急速な開発により、このリストが常に最新であるという保証はありません。

モデル プロバイダー llm/v1/completions llm/v1/chat llm/v1/embeddings
OpenAI** * gpt-3.5-turbo-instruct
* babbage-002
* davinci-002
* gpt-3.5-turbo
* gpt-4
* gpt-4o
* gpt-4o-2024-05-13
* gpt-3.5-turbo-0125
* gpt-3.5-turbo-1106
* gpt-4-0125-preview
* gpt-4-turbo-preview
* gpt-4-1106-preview
* gpt-4-vision-preview
* gpt-4-1106-vision-preview
* text-embedding-ada-002
* text-embedding-3-large
* text-embedding-3-small
Azure OpenAI** * text-davinci-003
* gpt-35-turbo-instruct
* gpt-35-turbo
* gpt-35-turbo-16k
* gpt-4
* gpt-4-32k
* text-embedding-ada-002
* text-embedding-3-large
* text-embedding-3-small
Anthropic * claude-1
* claude-1.3-100k
* claude-2
* claude-2.1
* claude-2.0
* claude-instant-1.2
* claude-3-haiku-20240307
* claude-3-opus-20240229
* claude-3-sonnet-20240229
* claude-2.1
* claude-2.0
* claude-instant-1.2
Cohere** * command
* command-light-nightly
* command-light
* command-nightly
* embed-english-v2.0
* embed-multilingual-v2.0
* embed-english-light-v2.0
* embed-english-v3.0
* embed-english-light-v3.0
* embed-multilingual-v3.0
* embed-multilingual-light-v3.0
Mosaic AI Model Serving Databricks serving endpoint Databricks serving endpoint Databricks サービス エンドポイント
Amazon Bedrock アントロピック:

* claude-instant-v1
* claude-v1
* claude-v2

Cohere:

* command-text-v14
* command-text-v14:7:4k
* command-light-text-v14
* command-light-text-v14:7:4k

AI21 Labs:

* j2-grande-instruct
* j2-jumbo-instruct
* j2-mid
* j2-mid-v1
* j2-ultra j2-ultra-v1
アントロピック:

* claude-instant-v1:2:100k
* claude-v2
* claude-v2:0:18k
* claude-v2:0:100k
* claude-v2:1
* claude-v2:1:18k
* claude-v2:1:200k
* claude-3-sonnet-20240229-v1:0
Amazon:

* titan-embed-text-v1
* titan-embed-g1-text-02
* titan-embed-text-v1:2:8k
AI21 Labs† * j2-mid
* j2-light
* j2-ultra
Google Cloud Vertex AI text-bison * chat-bison
* gemini-pro
textembedding-gecko

** モデル プロバイダーでは、微調整された完了モデルとチャット モデルがサポートされます。 微調整されたモデルのクエリを実行するには、external model 構成の name フィールドに、微調整されたモデルの名前を設定します。

† モデル プロバイダーでは、カスタム補完モデルがサポートされています。

Mosaic AI Model Serving エンドポイントで提供されるモデルを使用する

プロバイダーとしての Mosaic AI Model Serving エンドポイントは、llm/v1/completionsllm/v1/chatllm/v1/embeddings の各エンドポイントの種類でサポートされています。 これらのエンドポイントは、必須としてマークされている標準クエリ パラメーターを受け入れる必要があります。一方、他のパラメーターは、Mosaic AI 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
  }
}

エンドポイントの構成

外部モデルを提供してクエリを実行するには、サービス エンドポイントを構成する必要があります。 「外部モデル提供エンドポイントを作成する」を参照してください

外部 Model Serving エンドポイントの場合は、external_model フィールドとそのパラメーターを、エンドポイント構成の served_entities セクションに含める必要があります。 Serving エンドポイントで複数の外部モデルを構成する場合は、traffic_config を指定して、各外部モデルのトラフィック ルーティングの割合を定義する必要があります。

external_model フィールドには、このエンドポイントからの要求の転送先となるモデルが定義されます。 モデルを指定する場合、要求するモデルがプロバイダーによってサポートされていることが重要です。 たとえば、プロバイダーとしての openai では text-embedding-ada-002 などのモデルがサポートされますが、他のプロバイダーではサポートされない場合があります。 モデルがプロバイダーによってサポートされていない場合、そのモデルに要求をルーティングしようとすると、Databricks から HTTP 4xx エラーが返されます。

次の表は、external_model フィールド パラメーターをまとめたものです。 エンドポイントの構成パラメーターについては、POST /api/2.0/serving-endpoints を参照してください。

パラメーター 説明
name 使用するモデルの名前。 たとえば、OpenAI の GPT-3.5-Turbo モデルの場合は gpt-3.5-turbo です。
provider このモデルのプロバイダーの名前が指定されます。 この文字列値は、サポートされている外部モデル プロバイダーに対応している必要があります。 たとえば、OpenAI の GPT-3.5 モデルの場合は openai です。
task タスクは、必要な言語モデルの対話の種類に対応します。 サポートされているタスクは、"llm/v1/completions"、"llm/v1/chat"、"llm/v1/embeddings" です。
<provider>_config モデルに必要な追加の構成の詳細が含まれています。 これには、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}}"
                    }
                }
            }
        ]
    }
)

エンドポイントに複数の外部モデルを提供する

また、タスクの種類が同じで、name がモデルごとに一意である限り、1 つの Serving エンドポイントに複数の外部モデルを構成することもできます。 次の例で作成される Serving エンドポイントは、トラフィックの 50% を OpenAI によって提供される gpt-4 にルーティングし、残りの 50% を Anthropic によって提供される claude-3-opus-20240229 にルーティングします。

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

client.create_endpoint(
    name="mix-chat-endpoint",
    config={
        "served_entities": [
            {
                "name": "served_model_name_1",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
                    }
                }
            },
            {
                "name": "served_model_name_2",
                "external_model": {
                    "name": "claude-3-opus-20240229",
                    "provider": "anthropic",
                    "task": "llm/v1/chat",
                    "anthropic_config": {
                        "anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
                    }
                }
            }
        ],
        "traffic_config": {
            "routes": [
                {"served_model_name": "served_model_name_1", "traffic_percentage": 50},
                {"served_model_name": "served_model_name_2", "traffic_percentage": 50}
            ]
        },
    }
)

エンドポイントのプロバイダーを構成する

エンドポイントを作成するときは、指定されたモデル プロバイダーに必要な構成を指定する必要があります。 次のセクションでは、各モデル プロバイダーで使用できるエンドポイント構成パラメーターの概要を示します。

OpenAI

構成パラメーター 説明 必要 Default
openai_api_key OpenAI サービスの API キー。 はい
openai_api_type 使用する OpenAI API の種類を指定する省略可能なフィールド。 いいえ
openai_api_base OpenAI API のベース URL。 いいえ https://api.openai.com/v1
openai_api_version OpenAI API バージョンを指定する省略可能なフィールド。 いいえ
openai_organization OpenAI で組織を指定する省略可能なフィールド。 いいえ

Cohere

構成パラメーター 説明 必要 Default
cohere_api_key Cohere サービスの API キー。 はい

Anthropic

構成パラメーター 説明 必要 Default
anthropic_api_key Anthropic サービスの API キー。 はい

Azure OpenAI

Azure OpenAI には、直接の OpenAI サービスと比較して異なる機能があります。 概要については、比較に関するドキュメントを参照してください。

構成パラメーター 説明 必要 Default
openai_api_key Azure OpenAI サービスの API キー。 はい
openai_api_type アクセス トークンの検証には azure を使用します。 はい
openai_api_base Azure によって提供される Azure OpenAI API サービスのベース URL。 はい
openai_api_version 日付で指定された、利用する Azure OpenAI サービスのバージョン。 はい
openai_deployment_name Azure OpenAI サービスのデプロイ リソースの名前。 はい
openai_organization OpenAI で組織を指定する省略可能なフィールド。 いいえ

Microsoft Entra ID で Azure OpenAI を使っている場合は、エンドポイント構成で次のパラメーターを使用します。

構成パラメーター 説明 必要 Default
microsoft_entra_tenant_id Microsoft Entra ID 認証のテナント ID。 はい
microsoft_entra_client_id Microsoft Entra ID 認証のクライアント ID。 はい
microsoft_entra_client_secret Microsoft Entra ID 認証のクライアント シークレット。 はい
openai_api_type Microsoft Entra ID を使用した認証には azuread を使用します。 はい
openai_api_base Azure によって提供される Azure OpenAI API サービスのベース URL。 はい
openai_api_version 日付で指定された、利用する Azure OpenAI サービスのバージョン。 はい
openai_deployment_name Azure OpenAI サービスのデプロイ リソースの名前。 はい
openai_organization 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

構成パラメーター 説明 必要 Default
private_key これは、Google Cloud Vertex AI サービスにアクセスできるサービス アカウントの秘密キーです。 「サービス アカウント キー を管理するためのベスト プラクティス」参照してください。 はい
region これは、Google Cloud Vertex AI サービスのリージョンです。 詳細については、「サポートされるリージョン」を参照してください。 一部のモデルは、特定のリージョンでのみ使用できます。 はい
project_id これは、サービス アカウントが関連付けられている Google Cloud プロジェクト ID です。 はい

Amazon Bedrock

Amazon Bedrock を外部モデル プロバイダーとして使用するには、お客様は指定された AWS リージョン内で Bedrock が有効になっており、指定された AWS キー ペアが Bedrock サービスとやり取りするのに適切なアクセス許可を持っていることを確認する必要があります。 詳細については、AWS の ID とアクセス管理に関するページをご覧ください。

構成パラメーター 説明 必要 Default
aws_region 使用する AWS リージョン。 Bedrock をそこで有効にする必要があります。 はい
aws_access_key_id Bedrock サービスと対話するためのアクセス許可を持つ AWS アクセス キー ID。 はい
aws_secret_access_key Bedrock サービスと対話するためのアクセス許可を持つ、アクセス キー ID とペアになっている AWS シークレット アクセス キー。 はい
bedrock_provider 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 を使用して資格情報を直接確認することをお勧めします。

AI21 Labs

構成パラメーター 説明 必要 Default
ai21labs_api_key これは AI21 Labs サービスの API キーです。 はい

外部モデル エンドポイントにクエリを実行する

外部モデル エンドポイントを作成すると、ユーザーからのトラフィックを受信できるようになります。

OpenAI クライアント、REST API、または MLflow Deployments SDK を使用して、エンドポイントにスコアリング要求を送信できます。

次の例では、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 でサポートされています)。 これは、チャットと入力候補の要求にのみ使用できます。

制限事項

選択した外部モデルによっては、構成により、データの発生元リージョンの外部でデータが処理される場合があります。 「モデル提供の制限とリージョン」をご参照ください。

1 つの Serving エンドポイントに複数の外部モデルを構成する場合は、すべての外部モデルが同じタスクの種類で、name がモデルごとに一意である必要があります。 同じ Serving エンドポイントで外部モデルと非外部モデルの両方を使うことはできません。

その他のリソース