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 .
- Klicka på den slutpunkt som du vill stoppa.
- 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 .
- Klicka på den slutpunkt som du vill starta.
- 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 .
- Klicka på Servering i sidopanelen.
- Klicka på den slutpunkt som du vill ta bort.
- 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 slutpunkter på fliken 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.
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.
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
, info
servers
och 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älteturl
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 ochpath
en kan ha stöd för flera format för indata. Dessa indata visas i fältetoneOf
.
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"
}
}
}
}
}
}
}
}
}
}
}
}