Freigeben über


Konfigurieren des Zugriffs auf Ressourcen über Modellbereitstellungsendpunkte

In diesem Artikel wird beschrieben, wie Sie den Zugriff auf externe und private Ressourcen über Model Serving-Endpunkte konfigurieren. Model Serving unterstützt Umgebungsvariablen mit Nur-Text sowie auf Geheimnisse basierende Umgebungsvariablen mithilfe von Databricks-Geheimnissen.

Anforderungen

Voraussetzungen für geheimnisbasierte Umgebungsvariablen:

  • Der Endpunktersteller muss über Lesezugriff auf die Databricks-Geheimnisse verfügen, auf die in den Konfigurationen verwiesen wird.
  • Sie müssen Anmeldeinformationen wie Ihren API-Schlüssel oder andere Token als Databricks-Geheimnis speichern.

Hinzufügen von Nur-Text-Umgebungsvariablen

Verwenden Sie Nur-Text-Umgebungsvariablen, um Variablen festzulegen, die nicht ausgeblendet werden müssen. Sie können Variablen in der Dienstbenutzeroberfläche, der REST-API oder dem SDK festlegen, wenn Sie einen Endpunkt erstellen oder aktualisieren.

Serving-Benutzeroberfläche

Über die Model Serving-Benutzeroberfläche können Sie eine Umgebungsvariable über Erweiterte Konfigurationen hinzufügen:

Erstellen eines Modellbereitstellungsendpunkts

REST API

Im Folgenden sehen Sie ein Beispiel zum Erstellen eines Dienstendpunkts mithilfe der POST /api/2.0/serving-endpoints REST-API und des Felds environment_vars zum Konfigurieren Ihrer Umgebungsvariable.

{
  "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

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe des WorkspaceClient SDK und des environment_vars Felds zum Konfigurieren der Umgebungsvariable.

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 Deployments SDK

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe des Mlflow Deployments SDK und des environment_vars Felds zum Konfigurieren der Umgebungsvariable.

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"
                }
            }
        ]
    }
)

Protokollfeature-Lookup von DataFrames zu Inferenztabellen

Wenn Sie Schlussfolgerungstabellen auf Ihrem Endpunkt aktiviert haben, können Sie in der Inferencetabelle protokollieren. Dies erfordert MLflow 2.14.0 oder höher.

Legen Sie ENABLE_FEATURE_TRACING als Umgebungsvariable in der Bereitstellungs-UI, REST-API oder im SDK fest, wenn Sie einen Endpunkt erstellen oder aktualisieren.

Serving-Benutzeroberfläche

  1. Wählen Sie in erweiterten Konfigurationen ** + Umgebungsvariablen hinzufügen** aus.
  2. Geben Sie ENABLE_FEATURE_TRACING den Namen der Umgebung ein.
  3. Geben Sie im Feld rechts true ein.

Erstellen eines Modellbereitstellungsendpunkts

REST API

Im Folgenden sehen Sie ein Beispiel zum Erstellen eines Dienstendpunkts mithilfe der POST /api/2.0/serving-endpoints REST-API und des environment_vars Felds zum Konfigurieren der ENABLE_FEATURE_TRACING Umgebungsvariable.

{
  "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

Im Folgenden finden Sie ein Beispiel zum Erstellen eines dienstenden Endpunkts mithilfe des WorkspaceClient SDK und des environment_vars Felds zum Konfigurieren der ENABLE_FEATURE_TRACING Umgebungsvariable.

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 Deployments SDK

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe des Mlflow Deployments SDK und des environment_vars Felds zum Konfigurieren der ENABLE_FEATURE_TRACING Umgebungsvariable.

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"
                }
            }
        ]
    }
)

Hinzufügen geheimnisbasierter Umgebungsvariablen

Sie können Anmeldeinformationen sicher mithilfe von Databricks-Geheimnissen speichern und bei der Modellbereitstellung mithilfe von geheimnisbasierten Umgebungsvariablen auf diese Geheimnisse verweisen. Dadurch können Anmeldeinformationen zur Bereitstellungszeit von Modellbereitstellungsendpunkten abgerufen werden.

Sie können beispielsweise Anmeldeinformationen übergeben, um OpenAI und andere externe Modellendpunkte aufzurufen oder direkt über die Modellbereitstellung auf externe Datenspeicherorte zuzugreifen.

Databricks empfiehlt dieses Feature für die Bereitstellung von OpenAI- und LangChain-MLflow-Modellvarianten für die Bereitstellung. Es gilt auch für andere SaaS-Modelle, die Anmeldeinformationen erfordern, wobei das Zugriffsmuster auf der Verwendung von Umgebungsvariablen und API-Schlüsseln und Token basiert.

Schritt 1: Erstellen eines Geheimnisbereichs

Während der Modellbereitstellung werden die Geheimnisse aus Databricks-Geheimnissen durch den Geheimnisbereich und -Schlüssel abgerufen. Diese werden den Namen der geheimen Umgebungsvariablen zugewiesen, die innerhalb des Modells verwendet werden können.

Erstellen Sie zunächst einen Geheimnisbereich. Siehe "Geheime Bereiche verwalten".

Im Folgenden sind CLI-Befehle aufgeführt:


databricks secrets create-scope my_secret_scope

Anschließend können Sie Ihr Geheimnis einem gewünschten Geheimnisbereich und Schlüssel hinzufügen, wie unten gezeigt:


databricks secrets put-secret my_secret_scope my_secret_key

Die Geheimnisinformationen und der Name der Umgebungsvariablen können dann während der Endpunkterstellung oder als Aktualisierung der Konfiguration eines vorhandenen Endpunkts an Ihre Endpunktkonfiguration übergeben werden.

Schritt 2: Hinzufügen von Geheimnisbereichen zur Endpunktkonfiguration

Sie können den Geheimnisbereich einer Umgebungsvariable hinzufügen und diese Variable während der Endpunkterstellung oder Konfigurationsupdates an Ihren Endpunkt übergeben. Weitere Informationen finden Sie unter Erstellen von benutzerdefinierten Model Serving-Endpunkten.

Serving-Benutzeroberfläche

Über die Model Serving-Benutzeroberfläche können Sie eine Umgebungsvariable über Erweiterte Konfigurationen hinzufügen. Die geheimnisbasierte Umgebungsvariable muss mithilfe der folgenden Syntax bereitgestellt werden: {{secrets/scope/key}}. Andernfalls wird die Umgebungsvariable als Nur-Text-Umgebungsvariable betrachtet.

Erstellen eines Modellbereitstellungsendpunkts

REST API

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe der REST-API. Während des Modells, das Endpunkterstellung und Konfigurationsupdates bereitstellt, können Sie eine Liste der Spezifikationen für geheime Umgebungsvariablen für jedes bereitgestellte Modell innerhalb der API-Anforderung mithilfe des Felds environment_vars bereitstellen.

Im folgenden Beispiel wird der Wert aus dem im bereitgestellten Code erstellten Geheimnis der Umgebungsvariablen OPENAI_API_KEY zugewiesen.

{
  "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}}"
        }
      }
    ]
  }
}

Sie können auch einen Bereitstellungsendpunkt aktualisieren, wie im folgenden Beispiel mit PUT /api/2.0/serving-endpoints/{name}/config REST-API gezeigt:

{
  "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

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe des WorkspaceClient SDK. Während des Modells, das Endpunkterstellung und Konfigurationsupdates bereitstellt, können Sie eine Liste der Spezifikationen für geheime Umgebungsvariablen für jedes bereitgestellte Modell innerhalb der API-Anforderung mithilfe des Felds environment_vars bereitstellen.

Im folgenden Beispiel wird der Wert aus dem im bereitgestellten Code erstellten Geheimnis der Umgebungsvariablen OPENAI_API_KEY zugewiesen.

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 Deployments SDK

Im Folgenden finden Sie ein Beispiel zum Erstellen eines Bereitstellungsendpunkts mithilfe des Mlflow Deployments SDK. Während des Modells, das Endpunkterstellung und Konfigurationsupdates bereitstellt, können Sie eine Liste der Spezifikationen für geheime Umgebungsvariablen für jedes bereitgestellte Modell innerhalb der API-Anforderung mithilfe des Felds environment_vars bereitstellen.

Im folgenden Beispiel wird der Wert aus dem im bereitgestellten Code erstellten Geheimnis der Umgebungsvariablen OPENAI_API_KEY zugewiesen.

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}}"
                }
            }
        ]
    }
)

Nachdem der Endpunkt erstellt oder aktualisiert wurde, ruft die Modellbereitstellung automatisch den geheimen Schlüssel aus dem Databricks-Geheimnisbereich ab und füllt die Umgebungsvariable für den zu verwendenden Modellrückschlusscode auf.

Notebookbeispiel

Im folgenden Notebook sehen Sie ein Beispiel für das Konfigurieren eines OpenAI-API-Schlüssels für eine LangChain-Abruf-QA-Kette, die hinter dem Modell bereitgestellt wird und Endpunkte mit Geheimnis-basierten Umgebungsvariablen bedient.

Notebook: Konfigurieren des Zugriffs auf Ressourcen über Modellbereitstellungsendpunkte

Notebook abrufen