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.

Kontrollera status och information om en slutpunkt programmatiskt med hjälp av REST API eller MLflow Deployments SDK:

REST-API

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

I följande exempel skapas en slutpunkt som hanterar den första versionen av my-ads-model-modellen som är registrerad i Unity Catalog-modellregistret. Du måste ange det fullständiga modellnamnet inklusive överordnad katalog och schema, 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 är NOT_UPDATING och pending_config returneras inte längre eftersom uppdateringen har slutförts.

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

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

Stoppa en modell som betjänar slutpunkten

Du kan tillfälligt stoppa en modell som betjänar slutpunkten och starta den senare. När en slutpunkt stoppas stängs de resurser som har etablerats för den av och slutpunkten kan inte hantera frågor förrän den startas igen. Det är bara slutpunkter som hanterar anpassade modeller, som inte är routningsoptimerade och som inte har några pågående uppdateringar som kan stoppas. Stoppade slutpunkter räknas inte mot resurskvoten. Frågor som skickas till en stoppad slutpunkt returnerar ett 400-fel.

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

  1. Klicka på den slutpunkt som du vill stoppa.
  2. Klicka på Stoppa i det övre högra hörnet.

Du kan också stoppa en serverslutpunkt programmatiskt med hjälp av REST-API:et på följande sätt:

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

När du är redo att starta en stoppad modell som betjänar slutpunkten kan du göra det från slutpunktens informationssida i användargränssnittet för servering .

  1. Klicka på den slutpunkt som du vill starta.
  2. Klicka på Starta i det övre högra hörnet.

Du kan också starta en stoppad serverdelsslutpunkt programmatiskt med hjälp av REST-API:et på följande sätt:

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

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. Mer information finns i felsökningsguiden för modellservering .


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å serving-slutpunkten.

databricks permissions get servingendpoints <endpoint-id>

Bevilja användare 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.

Lägg till en budgetprincip för en modell som betjänar slutpunkten

Viktigt!

Den här funktionen finns i offentliga förhandsversionen och är inte tillgänglig för serverslutpunkter som hanterar externa modeller eller Foundation Model API:er för betalning per token-arbetsbelastningar.

Med budgetpolitik kan din organisation tillämpa anpassade taggar på serverlös drift för detaljerad faktureringsattribution. Om din arbetsyta använder budgetprinciper för att tillskriva serverlös användning kan du lägga till en budgetprincip i din modell som betjänar slutpunkter. Se Attribut för serverlös användning med budgetprinciper.

När du skapar en modellserveringsslutpunkt kan du välja budgetprincip för slutpunkten från menyn Budgetprincip i användargränssnittet för modellservering. Om du har tilldelats en budgetprincip, tilldelas alla slutpunkter som du skapar denna budgetprincip, även om du inte väljer en från menyn Budgetprincip.

Lägg till en budgetpolicy under skapandet av serveringsslutpunkten med hjälp av användargränssnittet för servering.

Om du har MANAGE behörigheter för en befintlig slutpunkt kan du redigera och lägga till en budgetprincip för slutpunkten från sidan för slutpunktsdetaljer i användargränssnittet.

Redigera budgetprincip på en befintlig modell som betjänar slutpunkten med hjälp av användargränssnittet för servering.

Obs

Om du har tilldelats en budgetprincip taggas inte dina befintliga slutpunkter automatiskt med din princip. Du måste uppdatera befintliga slutpunkter manuellt om du vill koppla en budgetprincip till dem.

Hämta en modell som betjänar slutpunktsschema

Viktigt!

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

Ett frågeschema för serverslutpunkter är en formell beskrivning av serverslutpunkten med OpenAPI-standardens specifikation 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 du inte är den ursprungliga slutpunktens skapare eller ägare.

För att få schemat för modelltjänstens slutpunkt måste den hanterade 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"

Detaljer om schemasvar

Svaret är en OpenAPI-specifikation i JSON-format, vanligtvis inklusive fält som openapi, infoserversoch 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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}