Delen via


Model voor eindpunten 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 modelbedieningseindpunten te maken:

De status van het modeleindpunt ophalen

In de gebruikersinterface van de server kunt u de status van een eindpunt controleren via de indicator voor de status van het servereindpunt boven aan de pagina met details van uw eindpunt.

U kunt de status en details van een eindpunt programmatisch controleren met behulp van de REST API of de MLflow Deployments SDK

REST-API

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

In het volgende voorbeeld wordt een eindpunt gemaakt dat fungeert voor de eerste versie van het my-ads-model model dat is geregistreerd in het Unity Catalog-modelregister. U moet de volledige modelnaam opgeven, inclusief bovenliggende catalogus en schema, zoals. catalog.schema.example-model

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

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

Een eindpunt voor het leveren van een model stoppen

U kunt een model voor eindpunten tijdelijk stoppen en later starten. Wanneer een eindpunt wordt gestopt, worden de resources die voor het eindpunt zijn ingericht, afgesloten en kan het eindpunt geen query's uitvoeren totdat het opnieuw is gestart. Alleen eindpunten die aangepaste modellen dienen, zijn niet geoptimaliseerd voor route en hebben geen updates die 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.

U kunt een eindpunt stoppen vanaf de detailpagina van het eindpunt in de gebruikersinterface van de server .

  1. Klik op het eindpunt dat u wilt stoppen.
  2. Klik op Stoppen in de rechterbovenhoek.

U kunt een servereindpunt ook programmatisch stoppen met behulp van de REST API:

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

Wanneer u klaar bent om een gestopt model voor eindpunten te starten, kunt u dit doen vanaf de detailpagina van het eindpunt in de gebruikersinterface van de server .

  1. Klik op het eindpunt dat u wilt starten.
  2. Klik op Start in de rechterbovenhoek.

U kunt ook programmatisch een gestopt eindpunt starten met behulp van de REST API:

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

Een eindpunt voor het leveren van een model verwijderen

Als u het leveren van een model wilt uitschakelen, kunt u het eindpunt verwijderen waarop het wordt geleverd.

U kunt een eindpunt verwijderen van de detailpagina van het eindpunt in de gebruikersinterface van de server .

  1. Klik op Serveren op de zijbalk.
  2. Klik op het eindpunt dat u wilt verwijderen.
  3. Klik bovenaan op het menu van De resource en selecteer Verwijderen.

U kunt ook programmatisch een service-eindpunt verwijderen met behulp van de REST API of de MLflow Deployments SDK

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 uw model voor eindpunten

Als u problemen met het eindpunt wilt opsporen, kunt u het volgende ophalen:

  • Buildlogboeken voor modelservercontainers
  • Modelserverlogboeken

Deze logboeken zijn ook toegankelijk vanuit de gebruikersinterface van Eindpunten op het tabblad Logboeken .

Voor de buildlogboeken voor een geleverd 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
}

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 voor uw model voor eindpunten beheren

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 eindpunt van de service op.

databricks permissions get servingendpoints <endpoint-id>

Verdeel de gebruiker jsmith@example.com de CAN QUERY-machtiging voor het eindpunt van de service.

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

Een model ophalen voor eindpuntschema

Belangrijk

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

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.

Als u het eindpuntschema van het model wilt ophalen, moet voor het opgegeven model een modelhandtekening zijn geregistreerd en moet het eindpunt de READY status hebben.

In de volgende voorbeelden ziet u hoe u programmatisch het eindpuntschema van het model kunt ophalen met behulp van de REST API. Zie Wat is Databricks Feature Serving? voor functie-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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}