Delen via


Eindpunten voor modeldeployment beheren

In dit artikel wordt beschreven hoe u eindpunten voor het leveren van modellen beheert met behulp van de Service-gebruikersinterface en REST API. Zie Service-eindpunten in de REST API-verwijzing.

Gebruik een van de volgende opties om modelserve-eindpunten te maken:

de status van het modeleindpunt ophalen

U kunt de status van een eindpunt controleren met behulp van de Service-gebruikersinterface of programmatisch met behulp van de REST API, Databricks Workspace Client of MLflow Deployments SDK.

Eindpuntstatussen kunnen Readyzijn, Ready (Update failed), Not ready (Updating), of Not ready (Update failed)Not ready (Stopped). Gereedheid verwijst naar of een eindpunt al dan niet kan worden opgevraagd. De update is mislukt en geeft aan dat de meest recente wijziging aan het eindpunt niet succesvol was. Gestopt betekent dat het eindpunt is gestopt.

UI (Gebruikersinterface)

De statusindicator van het operationele eindpunt boven aan de detailpagina:

Controleer de eindpuntstatus met behulp van de eindpuntgegevens van de Serving UI.

Controleer de status van eindpunten met behulp van de Serving UI voor lijst-eindpunten.

REST-API

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

In het volgende voorbeeldantwoord is het state.ready veld 'GEREED', wat betekent dat het eindpunt gereed is voor het ontvangen van verkeer. Het state.update_state veld wordt NOT_UPDATING en pending_config wordt niet meer geretourneerd omdat de update is voltooid.

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

Een model-serving-eindpunt stoppen

U kunt een modelservice-eindpunt tijdelijk stopzetten en later weer starten. Wanneer een eindpunt is gestopt:

  • De middelen die hiervoor beschikbaar zijn gesteld, worden uitgeschakeld.
  • Het eindpunt kan geen query's uitvoeren totdat het opnieuw is gestart.
  • Alleen eindpunten die aangepaste modellen dienen en waarvoor geen updates worden uitgevoerd, kunnen worden gestopt.
  • Gestopte eindpunten tellen niet mee voor het resourcequotum.
  • Query's die naar een gestopt eindpunt worden verzonden, retourneren een 400-fout.

Een eindpunt stoppen

UI (Gebruikersinterface)

Klik op Stoppen in de rechterbovenhoek.

Stop een model serving endpoint met behulp van de Serving UI.

REST-API

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

Een eindpunt starten

Als u een eindpunt start, wordt een nieuwe configuratieversie gemaakt met dezelfde eigenschappen als de bestaande gestopte configuratie.

Wanneer u klaar bent om een gestopt model voor eindpunt te starten:

UI (Gebruikersinterface)

Klik op Start in de rechterbovenhoek.

Start een model serving endpoint met behulp van de Serving UI.

REST-API

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

Een modelserve-eindpunt verwijderen

Als u een eindpunt verwijdert, wordt het gebruik uitgeschakeld en worden alle gegevens verwijderd die aan het eindpunt zijn gekoppeld. U kunt het verwijderen niet ongedaan maken.

UI (Gebruikersinterface)

Klik op het drie-puntjesmenu bovenaan en selecteer Verwijderen.

Verwijder een modelserveerpunt met behulp van de gebruikersinterface van de server.

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

Fouten opsporen in een model dat eindpunt biedt

Er zijn twee typen logboeken beschikbaar om problemen met eindpunten op te sporen:

  • Modelservercontainer-bouwlogboeken: worden gegenereerd tijdens het initialiseren van het eindpunt wanneer de container wordt aangemaakt. Deze logboeken leggen de installatiefase vast, waaronder het downloaden van het model, het installeren van afhankelijkheden en het configureren van de runtime-omgeving. Gebruik deze logboeken om fouten op te sporen waarom een eindpunt niet kon worden gestart of vastgelopen tijdens de implementatie.
  • Modelserverlogboeken: gegenereerd tijdens runtime wanneer het eindpunt actief voorspellingen levert. In deze logboeken worden binnenkomende aanvragen, uitvoering van modeldeductie, runtimefouten en logboekregistratie op toepassingsniveau vastgelegd vanuit uw modelcode. Gebruik deze logboeken om problemen met voorspellingen op te sporen of queryfouten te onderzoeken.

Beide logboektypen zijn ook toegankelijk vanuit de gebruikersinterface van Eindpunten op het tabblad Logboeken .

Buildlogbestanden voor containers ophalen

Voor de build logs van een bediend model kunt u de volgende aanvraag gebruiken. Zie de handleiding voor foutopsporing voor Model serving voor meer informatie.


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

Modelserverlogboeken ophalen

Voor de modelserverlogboeken voor een servicemodel kunt u de volgende aanvraag gebruiken:


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

{
  "config_version": 1  // optional
}

Machtigingen beheren op een bedieningseindpunt van een model

U moet ten minste de machtiging CAN MANAGE voor een dienend eindpunt hebben om machtigingen te wijzigen. Zie Toegangsbeheerlijsten voor eindpunten voor meer informatie over de machtigingsniveaus.

Haal de lijst met machtigingen op het server-eindpunt op.

UI (Gebruikersinterface)

Klik op de knop Machtigingen rechtsboven in de gebruikersinterface.

Machtigingen van een model-serving eindpunt beheren via de Serving-UI.

Databricks-CLI

databricks permissions get serving-endpoints <endpoint-id>

Geef gebruiker jsmith@example.com de toestemming CAN QUERY op het endpoint.

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

U kunt ook de servicemachtigingen voor eindpunten wijzigen met behulp van de Machtigingen-API.

Voeg een serverloos budgetbeleid toe voor een modelbedieningsendpoint

Belangrijk

Deze functie bevindt zich in openbare preview en is niet beschikbaar voor het bedienen van eindpunten die externe modellen.

Met serverloze budgetbeleidsregels kan uw organisatie aangepaste tags toepassen op serverloos gebruik voor gedetailleerde factureringstoewijzing. Als uw werkruimte gebruikmaakt van serverloos budgetbeleid om serverloos gebruik toe te passen, kunt u een serverloos budgetbeleid toevoegen aan uw model dat eindpunten bedient. Zie Gebruik van attributen met serverloze budgetregels.

Tijdens het creëren van een model serving-eindpunt kunt u het serverless budgetbeleid van uw eindpunt selecteren in het menu Budgetbeleid in de Serving-UI. Als u een serverloos budgetbeleid hebt toegewezen, worden alle eindpunten die u maakt toegewezen aan dat serverloze budgetbeleid, zelfs als u geen beleid selecteert in het menu Budgetbeleid .

Voeg serverloze budgetregels toe tijdens het aanmaken van een model-eindpunt met behulp van de bediening UI.

Als u machtigingen hebt MANAGE voor een bestaand eindpunt, kunt u een serverloos budgetbeleid bewerken en toevoegen aan dat eindpunt vanaf de pagina Eindpuntgegevens in de gebruikersinterface.

Bewerk serverless budgetbeleid op een bestaand model serving endpoint met behulp van de Serving UI.

Notitie

Als u een serverloos budgetbeleid hebt toegewezen, worden uw bestaande eindpunten niet automatisch gelabeld met uw beleid. U moet bestaande eindpunten handmatig bijwerken als u een serverloos budgetbeleid aan deze eindpunten wilt koppelen.

Een schema voor een modelserveer-eindpunt ophalen

Belangrijk

Ondersteuning voor het leveren van eindpuntqueryschema's bevindt zich in openbare preview. Deze functionaliteit is beschikbaar in Model Serving-regio's.

Een service-eindpuntqueryschema is een formele beschrijving van het servereindpunt met behulp van de standaard OpenAPI-specificatie in JSON-indeling. Het bevat informatie over het eindpunt, inclusief het eindpuntpad, details voor het uitvoeren van query's op het eindpunt, zoals de indeling van de aanvraag- en antwoordtekst en het gegevenstype voor elk veld. Deze informatie kan nuttig zijn voor reproduceerbaarheidsscenario's of wanneer u informatie nodig hebt over het eindpunt, maar u niet de oorspronkelijke maker of eigenaar van het eindpunt bent.

Om het eindpuntschema van het model te verkrijgen, moet het geserveerde model een modelhandtekening hebben en moet het eindpunt de status READY hebben.

In de volgende voorbeelden ziet u hoe u programmatisch het eindpuntschema van het model kunt ophalen met behulp van de REST API. Zie Feature Serving-eindpunten voor functies voor eindpuntschema's.

Het schema dat door de API wordt geretourneerd, heeft de indeling van een JSON-object dat volgt op de OpenAPI-specificatie.


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"

Details van schemaantwoord

Het antwoord is een OpenAPI-specificatie in JSON-indeling, meestal inclusief velden zoals openapi, infoservers en paths. Omdat het schemaantwoord een JSON-object is, kunt u het parseren met behulp van algemene programmeertalen en clientcode genereren op basis van de specificatie met behulp van hulpprogramma's van derden. U kunt de OpenAPI-specificatie ook visualiseren met behulp van hulpprogramma's van derden, zoals Swagger Editor.

De hoofdvelden van het antwoord zijn:

  • In info.title het veld wordt de naam van het servereindpunt weergegeven.
  • Het servers veld bevat altijd één object, meestal het url veld dat de basis-URL van het eindpunt is.
  • Het paths object in het antwoord bevat alle ondersteunde paden voor een eindpunt. De sleutels in het object zijn de pad-URL. Elk path kan meerdere indelingen van invoer ondersteunen. Deze invoer wordt weergegeven in het oneOf veld.

Hier volgt een voorbeeld van een eindpuntschemaantwoord:

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