次の方法で共有


モデル サービング エンドポイントからリソースへのアクセスを構成する

この記事では、モデル サービング エンドポイントから外部およびプライベート リソースへのアクセスを構成する方法について説明します。 モデル提供では、プレーンテキスト環境変数と、Databricks シークレットを使用したシークレットベースの環境変数がサポートされます。

要件

シークレットベースの環境変数の場合

  • エンドポイント作成者は、構成で参照されている Databricks シークレットへの読み取りアクセス権を持っている必要があります。
  • API キーや他のトークンなどの資格情報を Databricks シークレットとして格納する必要があります。

プレーンテキスト環境変数を追加する

プレーンテキスト環境変数を使用して、非表示にする必要のない変数を設定します。 エンドポイントを作成または更新するときに、サービス UI、REST API、または SDK で変数を設定できます。

ユーザーインターフェースの提供

提供 UI から、[高度な構成] で環境変数を追加することができます。

モデル サービング エンドポイントを作成する

REST API

POST /api/2.0/serving-endpoints REST API と environment_vars フィールドを使用してサービス エンドポイントを作成して環境変数を構成する例を以下に示します。

{
  "name": "endpoint-name",
  "config": {
    "served_entities": [
      {
        "entity_name": "model-name",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": "true",
        "environment_vars": {
          "TEXT_ENV_VAR_NAME": "plain-text-env-value"
        }
      }
    ]
  }
}

WorkspaceClient SDK

WorkspaceClient SDK と environment_vars フィールドを使用してサービス エンドポイントを作成し、環境変数を構成する例を次に示します。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType

w = WorkspaceClient()

endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
    name=endpoint_name,
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name = model_name,
                entity_version = "2",
                workload_type = ServingModelWorkloadType("CPU"),
                workload_size = "Small",
                scale_to_zero_enabled = False,
                environment_vars = {
                    "MY_ENV_VAR": "value_to_be_injected",
                    "ADS_TOKEN": "abcdefg-1234"
                }
            )
        ]
    )
)

MLflow デプロイ SDK

Mlflow Deployments SDK と environment_vars フィールドを使用してサービス エンドポイントを作成して環境変数を構成する例を次に示します。

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": True,
                "environment_vars": {
                    "MY_ENV_VAR": "value_to_be_injected",
                    "ADS_TOKEN": "abcdefg-1234"
                }
            }
        ]
    }
)

特徴検索データフレームを推論テーブルに記録する

エンドポイントで推論テーブルが有効になっている場合は、を使用してENABLE_FEATURE_TRACINGをその推論テーブルに記録できます。 これには、MLflow 2.14.0 以降が必要です。

エンドポイントを作成または更新するときに、 ENABLE_FEATURE_TRACING をサービス UI、REST API、または SDK の環境変数として設定します。

ユーザーインターフェースの提供

  1. [詳細設定] で、[** + 環境変数の追加] を選択します。
  2. 環境名として「 ENABLE_FEATURE_TRACING 」と入力します。
  3. 右側のフィールドに「 true」と入力します。

モデル サービング エンドポイントを作成する

REST API

POST /api/2.0/serving-endpoints REST API と environment_vars フィールドを使用してサービス エンドポイントを作成し、ENABLE_FEATURE_TRACING環境変数を構成する例を次に示します。

{
  "name": "endpoint-name",
  "config": {
    "served_entities": [
      {
        "entity_name": "model-name",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": "true",
        "environment_vars": {
          "ENABLE_FEATURE_TRACING": "true"
        }
      }
    ]
  }
}

WorkspaceClient SDK

WorkspaceClient SDK と environment_vars フィールドを使用してサービス エンドポイントを作成し、 ENABLE_FEATURE_TRACING 環境変数を構成する例を次に示します。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType

w = WorkspaceClient()

endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
    name=endpoint_name,
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name = model_name,
                entity_version = "2",
                workload_type = ServingModelWorkloadType("CPU"),
                workload_size = "Small",
                scale_to_zero_enabled = False,
                environment_vars = {
                    "ENABLE_FEATURE_TRACING": "true"
                }
            )
        ]
    )
)

MLflow デプロイ SDK

Mlflow Deployments SDK と environment_vars フィールドを使用してサービス エンドポイントを作成し、 ENABLE_FEATURE_TRACING 環境変数を構成する例を次に示します。

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": True,
                "environment_vars": {
                    "ENABLE_FEATURE_TRACING": "true"
                }
            }
        ]
    }
)

シークレットベースの環境変数を追加する

Databricks シークレットを使って資格情報を安全に格納し、シークレットベースの環境変数を使用してモデル提供でそれらのシークレットを参照できます。 これにより、提供時にモデル サービング エンドポイントから資格情報をフェッチできます。

たとえば、OpenAI やその他の外部モデル エンドポイントを呼び出したり、モデル サービスから直接外部データ ストレージの場所にアクセスしたりするために、認証情報を渡すことができます。

Databricks では、 OpenAILangChain MLflow モデルのフレーバーをサービスにデプロイするために、この機能を推奨しています。 また、アクセス パターンが環境変数と API キーとトークンの使用に基づいていることを理解した上で、資格情報を必要とする他の SaaS モデルにも適用できます。

手順 1: シークレット スコープを作成する

モデル サービス中に、シークレットはシークレット スコープとキーによって Databricks シークレットから取得されます。 これらは、モデル内で使用できるシークレット環境変数名に割り当てられます。

まず、シークレット スコープを作成します。 管理シークレット スコープを参照してください。

CLI コマンドを次に示します。


databricks secrets create-scope my_secret_scope

次に示すように、目的のシークレット スコープとキーにシークレットを追加できます。


databricks secrets put-secret my_secret_scope my_secret_key

シークレット情報と環境変数名は、エンドポイント作成時や既存のエンドポイントの設定更新時に、エンドポイント構成に渡すことができます。

手順 2: エンドポイント構成にシークレット スコープを追加する

エンドポイントの作成または構成の更新中に、シークレット スコープを環境変数に追加し、その変数をエンドポイントに渡すことができます。 「カスタム モデル サービング エンドポイントを作成する」を参照してください。

ユーザーインターフェースの提供

提供 UI から、[高度な構成] で環境変数を追加することができます。 シークレット ベースの環境変数は、{{secrets/scope/key}} 構文を使用して指定する必要があります。 それ以外の場合、環境変数はプレーンテキスト環境変数と見なされます。

モデル サービング エンドポイントを作成する

REST API

REST API を使用してサービス エンドポイントを作成する例を以下に示します。 エンドポイントを提供するモデルの作成と構成の更新中に、environment_vars フィールドを使用して API 要求内で提供される各モデルのシークレット環境変数の仕様の一覧を提供できます。

次の例では、指定されたコードで作成されたシークレットの値を環境変数 OPENAI_API_KEYに割り当てます。

{
  "name": "endpoint-name",
  "config": {
    "served_entities": [
      {
        "entity_name": "model-name",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": "true",
        "environment_vars": {
          "OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
        }
      }
    ]
  }
}

次の PUT /api/2.0/serving-endpoints/{name}/config REST API の例のように、提供エンドポイントを更新することもできます。

{
  "served_entities": [
    {
      "entity_name": "model-name",
      "entity_version": "2",
      "workload_size": "Small",
      "scale_to_zero_enabled": "true",
      "environment_vars": {
        "OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
      }
    }
  ]
}

WorkspaceClient SDK

WorkspaceClient SDK を使用してサービス エンドポイントを作成する例を次に示します。 エンドポイントを提供するモデルの作成と構成の更新中に、environment_vars フィールドを使用して API 要求内で提供される各モデルのシークレット環境変数の仕様の一覧を提供できます。

次の例では、指定されたコードで作成されたシークレットの値を環境変数 OPENAI_API_KEYに割り当てます。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ServedEntityInput, EndpointCoreConfigInput, ServingModelWorkloadType

w = WorkspaceClient()

endpoint_name = "example-add-model"
model_name = "main.default.addmodel"
w.serving_endpoints.create_and_wait(
    name=endpoint_name,
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name = model_name,
                entity_version = "2",
                workload_type = ServingModelWorkloadType("CPU"),
                workload_size = "Small",
                scale_to_zero_enabled = False,
                environment_vars = {
                    "OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
                }
            )
        ]
    )
)

MLflow デプロイ SDK

Mlflow Deployments SDK を使用してサービス エンドポイントを作成する例を次に示します。 エンドポイントを提供するモデルの作成と構成の更新中に、environment_vars フィールドを使用して API 要求内で提供される各モデルのシークレット環境変数の仕様の一覧を提供できます。

次の例では、指定されたコードで作成されたシークレットの値を環境変数 OPENAI_API_KEYに割り当てます。

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": True,
                "environment_vars": {
                    "OPENAI_API_KEY": "{{secrets/my_secret_scope/my_secret_key}}"
                }
            }
        ]
    }
)

エンドポイントが作成または更新されると、モデル サービスは自動的に Databricks シークレット スコープからシークレット キーを取得し、使用するモデル推論コードの環境変数を設定します。

ノートブックの例

シークレットベースの環境変数を使用して、エンドポイントを提供するモデルの背後にデプロイされた LangChain Retrieval QA チェーンの OpenAI API キーを構成する方法の例については、次のノートブックを参照してください。

モデル サービング エンドポイントからリソースへのアクセスを構成するノートブック

ノートブックを入手