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 werden die Details eines Endpunkts abgerufen, der die erste Version des ads1-Modells bereitstellt, das in der Modellregistrierung registriert ist. Um ein Modell aus Unity Catalog anzugeben, geben Sie den vollständigen Modellnamen an, einschließlich des übergeordneten Katalogs und des Schemas, etwa catalog.schema.example-model.

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": "workspace-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads1-1",
        "entity_name": "ads1",
        "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": "ads1-1",
          "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",
}

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:


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