Dela via


Hantera modell som betjänar slutpunkter

Den här artikeln beskriver hur du hanterar modellserverslutpunkter med hjälp av servergränssnittet och REST-API:et. Se Serveringsslutpunkter i REST API-referensen.

Om du vill skapa modell som betjänar slutpunkter använder du något av följande:

Hämta status för modellslutpunkten

I användargränssnittet för servering kan du kontrollera statusen för en slutpunkt från indikatorn serveringsslutpunktstillstånd högst upp på slutpunktens informationssida.

Du kan använda kontrollera status och information om en slutpunkt programmatiskt med hjälp av REST-API:et eller SDK:n för MLflow-distributioner

REST-API

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

I följande exempel hämtas information om en slutpunkt som hanterar den första versionen av ads1 modellen som är registrerad i modellregistret. Ange en modell från Unity Catalog genom att ange det fullständiga modellnamnet inklusive den överordnade katalogen och schemat, till exempel . catalog.schema.example-model

I följande exempelsvar är fältet state.ready "READY", vilket innebär att slutpunkten är redo att ta emot trafik. Fältet state.update_state returneras NOT_UPDATING och pending_config returneras inte längre eftersom uppdateringen har slutförts.

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

SDK för MLflow-distributioner

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

Ta bort en modell som betjänar slutpunkten

Om du vill inaktivera servering för en modell kan du ta bort slutpunkten som den hanteras på.

Du kan ta bort en slutpunkt från slutpunktens informationssida i användargränssnittet för servering .

  1. Klicka på Servering i sidopanelen.
  2. Klicka på den slutpunkt som du vill ta bort.
  3. Klicka på menyn för kebab längst upp och välj Ta bort.

Du kan också ta bort en serverslutpunkt programmatiskt med hjälp av REST-API:et eller MLflow Deployments SDK

REST-API

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

SDK för MLflow-distributioner

from mlflow.deployments import get_deploy_client

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

Felsöka modellserverslutpunkten

Om du vill felsöka eventuella problem med slutpunkten kan du hämta:

  • Modellserver för containerbyggloggar
  • Modellserverloggar

Dessa loggar är också tillgängliga från användargränssnittet för slutpunkterfliken Loggar .

För byggloggarna för en hanterad modell kan du använda följande begäran:


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

För modellserverloggarna för en tjänstmodell kan du använda följande begäran:


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

{
  “config_version”: 1  // optional
}

Hantera behörigheter för din modell som betjänar slutpunkten

Du måste ha behörigheten CAN MANAGE på en serverdelsslutpunkt för att kunna ändra behörigheter. Mer information om behörighetsnivåer finns i Serveringsslutpunkts-ACL:er.

Hämta listan över behörigheter på serverdelsslutpunkten.

databricks permissions get servingendpoints <endpoint-id>

Ge användaren jsmith@example.com behörigheten CAN QUERY på serverdelsslutpunkten.

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

Du kan också ändra serverdelsslutpunktsbehörigheter med hjälp av API:et Behörigheter.

Hämta ett modellserverslutpunktsschema

Viktigt!

Stöd för servering av slutpunktsfrågescheman finns i offentlig förhandsversion. Den här funktionen är tillgänglig i modellserveringsregioner.

Ett serverslutpunktsfrågeschema är en formell beskrivning av serverdelsslutpunkten med hjälp av Standard OpenAPI-specifikationen i JSON-format. Den innehåller information om slutpunkten, inklusive slutpunktssökvägen, information om hur du kör frågor mot slutpunkten som formatet för begäran och svarstext och datatypen för varje fält. Den här informationen kan vara användbar för reproducerbarhetsscenarier eller när du behöver information om slutpunkten, men inte är den ursprungliga slutpunktens skapare eller ägare.

För att få modellen som betjänar slutpunktsschemat måste den betjänade modellen ha en modellsignatur loggad och slutpunkten måste vara i ett READY tillstånd.

Följande exempel visar hur du programmatiskt hämtar modellen som betjänar slutpunktsschemat med hjälp av REST-API:et. Information om funktioner som betjänar slutpunktsscheman finns i Vad är Databricks-funktionsserver?.

Schemat som returneras av API:et är i formatet för ett JSON-objekt som följer OpenAPI-specifikationen.


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"

Schemasvarsinformation

Svaret är en OpenAPI-specifikation i JSON-format, vanligtvis inklusive fält som openapi, servers infooch paths. Eftersom schemasvaret är ett JSON-objekt kan du parsa det med hjälp av vanliga programmeringsspråk och generera klientkod från specifikationen med hjälp av verktyg från tredje part. Du kan också visualisera OpenAPI-specifikationen med hjälp av verktyg från tredje part, till exempel Swagger Editor.

Huvudfälten i svaret är:

  • Fältet info.title visar namnet på serverdelsslutpunkten.
  • Fältet servers innehåller alltid ett objekt, vanligtvis fältet url som är slutpunktens bas-URL.
  • Objektet paths i svaret innehåller alla sökvägar som stöds för en slutpunkt. Nycklarna i objektet är sökvägens URL. Var och path en kan ha stöd för flera format för indata. Dessa indata visas i fältet oneOf .

Följande är ett exempel på svar på slutpunktsschema:


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