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

Auf der Serving-Benutzeroberfläche können Sie den Status eines Endpunkts über den Statusindikator für den Bereitstellungsendpunkt oben auf der Detailseite Ihres Endpunkts überprüfen.

Sie können den Status und die Details eines Endpunkts programmgesteuert mithilfe der REST-API oder des MLflow Deployments SDK überprüfen.

REST-API

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

Im folgenden Beispiel wird ein Endpunkt erstellt, der der ersten Version des my-ads-model Modells dient, das in der Unity Catalog-Modellregistrierung registriert ist. Sie müssen den vollständigen Modellnamen einschließlich übergeordnetem Katalog und Schema angeben, catalog.schema.example-modelz. B. .

In der folgenden Beispielantwort lautet ist „READY“ im Feld state.ready angegeben. Das bedeutet, dass der Endpunkt bereit ist, Datenverkehr zu empfangen. 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"
}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Stoppen eines Modellbereitstellungsendpunkts

Sie können einen Modellbereitstellungsendpunkt vorübergehend stoppen und später wieder starten. Wenn ein Endpunkt gestoppt wird, werden die dafür bereitgestellten Ressourcen heruntergefahren, und der Endpunkt kann so lange keine Abfragen bearbeiten, bis er wieder gestartet wird. Nur die für benutzerdefinierte Modelle dienenden Endpunkte sind nicht routenoptimiert und haben keine laufenden Updates, die gestoppt werden können. Gestoppte Endpunkte werden nicht auf das Ressourcenkontingent angerechnet. Wenn Anfragen an einen gestoppten Endpunkt gesendet werden, wird ein 400-Fehler zurückgegeben.

Sie können einen Endpunkt auf der Serving-Benutzeroberfläche auf der Detailseite des Endpunkts stoppen.

  1. Klicken Sie auf den Endpunkt, den Sie stoppen möchten.
  2. Klicken Sie oben rechts auf Stoppen.

Alternativ können Sie einen Bereitstellungsendpunkt auch wie folgt programmgesteuert über die REST-API stoppen:

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

Wenn Sie bereit sind, einen gestoppten Modellbereitstellungsendpunkt wieder zu starten, können Sie dies über die Detailseite des Endpunkts in der Serving-Benutzeroberfläche tun.

  1. Klicken Sie auf den Endpunkt, den Sie starten möchten.
  2. Klicken Sie oben rechts auf Starten.

Alternativ können Sie einen gestoppten Bereitstellungsendpunkt auch wie folgt programmgesteuert über die REST-API starten:

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

Löschen eines Modellbereitstellungsendpunkts

Um die Bereitstellung für ein Modell zu deaktivieren, können Sie den Endpunkt löschen, für den es bereitgestellt wird.

Sie können einen Endpunkt auf der Serving-Benutzeroberfläche auf der Detailseite des Endpunkts löschen.

  1. Klicken Sie auf der Seitenleiste auf Bereitstellen.
  2. Klicken Sie auf den zu löschenden Endpunkt.
  3. Klicken Sie oben auf das Optionsmenü, und wählen Sie Löschen aus.

Alternativ können Sie einen Bereitstelllungsendpunkt programmgesteuert mithilfe der REST-API oder des MLflow Deployments SDK löschen.

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 des Modellbereitstellungsendpunkts

Zum Debuggen von Problemen mit dem Endpunkt können Sie Folgendes abrufen:

  • Buildprotokolle für die Modellservercontainer
  • Modellserverprotokolle

Auf diese Protokolle kann auch über die Benutzeroberfläche Endpunkte auf der Registerkarte Protokolle zugegriffen werden.

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
}

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 für Ihren Modellbereitstellungsendpunkt

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.

databricks permissions get servingendpoints <endpoint-id>

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

databricks permissions update servingendpoints <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.

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. Weitere Informationen zu Endpunktschemas finden Sie unter Was ist Databricks Feature Serving?.

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