Freigeben über


Verwalten von Modellbereitstellungsendpunkten

In diesem Artikel wird beschrieben, wie Sie Model Serving-Endpunkte mithilfe der Serving-Benutzeroberfläche und der REST-API verwalten. Weitere Informationen finden Sie unter Bereitstellungsendpunkte in der API-Referenz.

Verwenden Sie zum Erstellen von Endpunkten für die Modellbereitstellung eine der folgenden Optionen:

Abrufen des Status des Modellendpunkts

Sie können den Status eines Endpunkts mithilfe der Dienstbenutzeroberfläche oder programmgesteuert mithilfe der REST-API, des Databricks Workspace Client oder des MLflow Deployments SDK überprüfen.

Endpunktstatus können sein Ready, , Ready (Update failed), Not ready (Updating), , Not ready (Update failed)oder Not ready (Stopped). Die Bereitschaft bezieht sich darauf, ob ein Endpunkt abgefragt werden kann. Update fehlgeschlagen: Die letzte Änderung am Endpunkt war nicht erfolgreich. Gestoppt bedeutet, dass der Endpunkt gestoppt wurde.

Benutzeroberfläche

Die Statusanzeige für den Dienstendpunkt am oberen Rand der Detailseite eines Endpunkts:

Überprüfen Sie den Status des Endpunkts über die Endpunktdetails in der Serving-Benutzeroberfläche.

Überprüfen Sie den Status des Endpunkts mit der Liste der Endpunkte in der Serving-UI.

REST-API

GET /api/2.0/serving-endpoints/{name}

In der folgenden Beispielantwort ist das state.ready Feld "READY", was bedeutet, dass der Endpunkt bereit für den Empfang von Datenverkehr ist. Das Feld state.update_state ist NOT_UPDATING und pending_config wird nicht mehr zurückgegeben, da das Update erfolgreich abgeschlossen wurde.

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

Databricks Workspace-Client

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
endpoint = w.serving_endpoints.get(name="my-endpoint")
print(f"Endpoint state: {endpoint.state.ready}")
print(f"Update state: {endpoint.state.config_update}")

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="my-endpoint")
print(f"Endpoint state: {endpoint['state']}")
print(f"Endpoint config: {endpoint['config']}")

Stoppen eines Modellbereitstellungsendpunkts

Sie können einen Modellbereitstellungsendpunkt vorübergehend stoppen und später wieder starten. Wenn ein Endpunkt beendet wird:

  • Die dafür bereitgestellten Ressourcen wurden abgeschaltet.
  • Der Endpunkt kann Abfragen erst bereitstellen, wenn er erneut gestartet wird.
  • Nur Endpunkte, die benutzerdefinierte Modelle bedienen und keine laufenden Updates haben, können beendet werden.
  • Gestoppte Endpunkte werden nicht auf das Ressourcenkontingent angerechnet.
  • Wenn Anfragen an einen gestoppten Endpunkt gesendet werden, wird ein 400-Fehler zurückgegeben.

Beenden eines Endpunkts

Benutzeroberfläche

Klicken Sie oben rechts auf Stoppen.

Stoppen Sie einen Modell-Serving-Endpunkt mithilfe der Benutzeroberfläche.

REST-API

POST /api/2.0/serving-endpoints/{name}/config:stop

Starten eines Endpunkts

Das Starten eines Endpunkts erstellt eine neue Konfigurationsversion mit den gleichen Eigenschaften wie die vorhandene beendete Konfiguration.

Wenn Sie bereit sind, ein beendetes Modell zu starten, das den Endpunkt bedient:

Benutzeroberfläche

Klicken Sie oben rechts auf Starten.

Starten Sie einen Modell-Serving-Endpunkt mit der Serving-Benutzeroberfläche.

REST-API

POST /api/2.0/serving-endpoints/{name}/config:start

Löschen eines Modellbereitstellungsendpunkts

Das Löschen eines Endpunkts deaktiviert die Verwendung und löscht alle dem Endpunkt zugeordneten Daten. Sie können das Löschen nicht rückgängigmachen.

Benutzeroberfläche

Klicken Sie oben auf das Optionsmenü, und wählen Sie Löschen aus.

Löschen Sie einen Modell-Servierungsendpunkt mithilfe der Serving-Benutzeroberfläche.

REST-API

DELETE /api/2.0/serving-endpoints/{name}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

Debuggen eines Modellbereitstellungsendpunkts

Zwei Arten von Protokollen stehen zur Verfügung, um Probleme mit Endpunkten zu debuggen:

  • Modellservercontainer-Buildprotokolle: Generiert während der Endpunktinitialisierung, wenn der Container erstellt wird. Diese Protokolle erfassen die Setupphase, einschließlich herunterladen des Modells, Installieren von Abhängigkeiten und Konfigurieren der Laufzeitumgebung. Verwenden Sie diese Protokolle, um zu debuggen, warum ein Endpunkt nicht gestartet oder während der Bereitstellung hängen geblieben ist.
  • Modellserverprotokolle: Generiert während der Laufzeit, wenn der Endpunkt aktiv Vorhersagen bedient. Diese Protokolle erfassen eingehende Anforderungen, Modellableitungsausführung, Laufzeitfehler und Protokollierung auf Anwendungsebene aus Dem Modellcode. Verwenden Sie diese Protokolle, um Probleme mit Vorhersagen zu debuggen oder Abfragefehler zu untersuchen.

Auf beide Protokolltypen kann auch über die Endpunkt-Benutzeroberfläche auf der Registerkarte "Protokolle " zugegriffen werden.

Abrufen von Containerbuildprotokollen

Für die Buildprotokolle für ein bereitgestelltes Modell können Sie die folgende Anforderung verwenden. Weitere Informationen finden Sie im Debughandbuch für die Modellbereitstellung .


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  "config_version": 1  // optional
}

Abrufen der Modellserverprotokolle

Für die Modellserverprotokolle für ein bereitgestelltes Modell können Sie die folgende Anforderung verwenden:


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  "config_version": 1  // optional
}

Verwalten von Berechtigungen an einem Modellbereitstellungs-Endpunkt

Sie müssen mindestens über die Berechtigung KANN VERWALTEN für einen Bereitstellungsendpunkt verfügen, um Berechtigungen zu ändern. Weitere Informationen zu den Berechtigungsstufen finden Sie unter Zugriffssteuerungslisten für Bereitstellungsendpunkte.

Rufen Sie die Liste der Berechtigungen für den Bereitstellungsendpunkt ab.

Benutzeroberfläche

Klicken Sie oben rechts auf der Benutzeroberfläche auf die Schaltfläche "Berechtigungen".

Verwalten von Berechtigungen eines Modellbereitstellungsendpunkts über die Bereitstellungs-UI.

Databricks-Befehlszeilenschnittstelle

databricks permissions get serving-endpoints <endpoint-id>

Weisen Sie dem Benutzer jsmith@example.com die KANN ABFRAGEN-Berechtigung für den Bereitstellungsendpunkt zu.

databricks permissions update serving-endpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

Sie können die Berechtigungen für Bereitstellungsendpunkte auch mithilfe der Permissions-API ändern.

Eine serverlose Budgetrichtlinie für einen Modellbereitstellungsendpunkt hinzufügen

Wichtig

Dieses Feature befindet sich in der Public Preview und ist nicht für die Bereitstellung von Endpunkten verfügbar, die externe Modelle bereitstellen.

Richtlinien für serverlose Budgets ermöglichen Ihrer Organisation, benutzerdefinierte Tags auf die serverlose Nutzung zur präzisen Zuordnung von Abrechnungen anzuwenden. Wenn Ihr Arbeitsbereich serverlose Budgetrichtlinien verwendet, um serverlose Verwendung zu attributieren, können Sie Ihrem Modell, das Endpunkte bedient, eine serverlose Budgetrichtlinie hinzufügen. Siehe Attributverwendung mit serverlosen Budgetrichtlinien.

Während des Modells, das die Endpunkterstellung bedient, können Sie die serverlose Budgetrichtlinie Ihres Endpunkts im Menü " Budgetrichtlinie " auf der Benutzeroberfläche auswählen. Wenn Ihnen eine serverlose Budgetrichtlinie zugewiesen ist, werden allen von Ihnen erstellten Endpunkten die Serverlose Budgetrichtlinie zugewiesen, auch wenn Sie im Menü " Budgetrichtlinie " keine Richtlinie auswählen.

Fügen Sie eine serverlose Budgetrichtlinie während der Erstellung von Endpunkten zur Bereitstellung von Modellen mithilfe der Serving-Benutzeroberfläche hinzu.

Wenn Sie über Berechtigungen für einen vorhandenen Endpunkt verfügen MANAGE , können Sie eine serverlose Budgetrichtlinie auf der Seite "Endpunktdetails " auf der Benutzeroberfläche bearbeiten und diesem hinzufügen.

Bearbeiten Sie die serverlose Budgetrichtlinie für einen vorhandenen Modellbereitstellungsendpunkt mithilfe der Bereitstellungs-UI.

Anmerkung

Wenn Ihnen eine serverlose Budgetrichtlinie zugewiesen wurde, werden Ihre vorhandenen Endpunkte nicht automatisch mit Ihrer Richtlinie kategorisiert. Sie müssen vorhandene Endpunkte manuell aktualisieren, wenn Sie eine serverlose Budgetrichtlinie an sie anfügen möchten.

Abrufen eines Schemas für Modellbereitstellungsendpunkte

Wichtig

Die Unterstützung für die Bereitstellung von Abfrageschemas für Endpunkte befindet sich in der Public Preview. Diese Funktionalität ist in den Modellbereitstellungsregionen verfügbar.

Ein Abfrageschema für Bereitstellungsendpunkte ist eine formale Beschreibung des Bereitstellungsendpunkts mithilfe der standardmäßigen OpenAPI-Spezifikation im JSON-Format. Es enthält Informationen zum Endpunkt, einschließlich Endpunktpfad, Details zum Abfragen des Endpunkts wie das Format von Anforderungs- und Antworttext und des Datentyps für jedes Feld. Diese Informationen können in Reproduktionsszenarien hilfreich sein oder wenn Sie Informationen zum Endpunkt benötigen, aber den Endpunkt ursprünglich nicht erstellt haben und nicht in seinem Besitz sind.

Um das Schema für den Modellbereitstellungsendpunkt abzurufen, muss für das bereitgestellte Modell eine Modellsignatur protokolliert sein, und der Endpunkt muss sich im Zustand READY befinden.

Die folgenden Beispiele veranschaulichen, wie Sie das Schema des Modellbereitstellungsendpunkts programmgesteuert mithilfe der REST-API abrufen. Informationen zu Schemas für Feature-Serving-Endpunkte finden Sie unter Feature Serving Endpoints.

Das von der API zurückgegebene Schema weist das Format eines JSON-Objekts auf, das der OpenAPI-Spezifikation entspricht.


ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

Schemaantwortdetails

Die Antwort ist eine OpenAPI-Spezifikation im JSON-Format, die in der Regel Felder wie openapi, info, servers und paths enthält. Da es sich bei der Schemaantwort um ein JSON-Objekt handelt, können Sie sie mithilfe gängiger Programmiersprachen analysieren und Clientcode aus der Spezifikation mithilfe von Drittanbietertools generieren. Sie können die OpenAPI-Spezifikation auch mithilfe von Drittanbietertools wie dem Swagger-Editor visualisieren.

Wichtige Felder in der Antwort:

  • Das Feld info.title zeigt den Namen des Bereitstellungsendpunkts an.
  • Das Feld servers enthält immer genau ein Objekt, in der Regel das Feld url , das die Basis-URL des Endpunkts ist.
  • Das paths-Objekt in der Antwort enthält alle unterstützten Pfade für einen Endpunkt. Die Schlüssel im Objekt sind die Pfad-URL. Jeder path kann Eingaben in mehreren Formaten unterstützen. Diese Eingaben werden im Feld oneOf aufgeführt.

Nachfolgend sehen Sie ein Beispiel für eine Endpunktschemaantwort:

{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint" }],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": ["int_col", "float_col", "string_col"]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": ["int_col", "float_col", "string_col"],
                        "data": [
                          [3, 10.4, "abc"],
                          [2, 20.4, "xyz"]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": ["int_col", "float_col", "string_col"],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}