Správa koncových bodů obsluhy modelu
Tento článek popisuje, jak spravovat koncové body obsluhující modely pomocí uživatelského rozhraní obsluhy a rozhraní REST API. Viz Poskytování koncových bodů v referenčních informacích k rozhraní REST API.
K vytvoření koncových bodů obsluhy modelu použijte jednu z následujících možností:
- Vytvořte vlastní model obsluhující koncové body.
- Vytvořit základní model pro obsluhu koncových bodů.
Získání stavu koncového bodu modelu
V uživatelském rozhraní obsluhy můžete zkontrolovat stav koncového bodu pomocí indikátoru stavu obsluhy v horní části stránky podrobností koncového bodu.
Pomocí rozhraní REST API nebo sady SDK pro nasazení MLflow zkontrolujte stav a podrobnosti o koncovém bodu prostřednictvím kódu programu:
REST API
GET /api/2.0/serving-endpoints/{name}
Následující příklad vytvoří koncový bod, který slouží první verzi modelu my-ads-model
, který je zaregistrovaný v registru modelu Katalogu Unity. Je nutné zadat úplný název modelu včetně nadřazeného katalogu a schématu, například catalog.schema.example-model
.
V následující ukázkové odpovědi je pole PŘIPRAVENO, což znamená, state.ready
že koncový bod je připravený přijímat provoz. Pole state.update_state
je NOT_UPDATING
a pending_config
se už nevrátí, protože aktualizace byla úspěšně dokončena.
{
"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"
}
Sada SDK pro nasazení MLflow
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",
}
Zastavení koncového bodu obsluhy modelu
Dočasně můžete zastavit koncový bod obsluhující model a spustit ho později. Když je koncový bod zastavený, prostředky zřízené pro něj jsou vypnuté a koncový bod nemůže obsluhovat dotazy, dokud se znovu neskončí. Pouze koncové body, které obsluhují vlastní modely, nejsou optimalizované pro směrování a nedají se zastavit žádné probíhající aktualizace. Zastavené koncové body se do kvóty prostředků nezapočítávají. Dotazy odeslané do zastaveného koncového bodu vrátí chybu 400.
Koncový bod můžete zastavit na stránce podrobností koncového bodu v uživatelském rozhraní obsluhy.
- Klikněte na koncový bod, který chcete zastavit.
- V pravém horním rohu klikněte na Zastavit .
Alternativně můžete prostřednictvím kódu programu zastavit obsluhu koncového bodu pomocí rozhraní REST API:
POST /api/2.0/serving-endpoints/{name}/config:stop
Až budete připraveni spustit koncový bod obsluhy zastaveného modelu, můžete to udělat na stránce podrobností koncového bodu v uživatelském rozhraní obsluhy.
- Klikněte na koncový bod, který chcete spustit.
- V pravém horním rohu klikněte na Start .
Alternativně můžete pomocí rozhraní REST API spustit programově zastavenou obsluhu koncového bodu:
POST /api/2.0/serving-endpoints/{name}/config:start
Odstranění koncového bodu obsluhy modelu
Pokud chcete zakázat poskytování pro model, můžete odstranit koncový bod, na který se obsluhuje.
Koncový bod můžete odstranit ze stránky podrobností koncového bodu v uživatelském rozhraní obsluhy.
- Klikněte na obsluhu na bočním panelu.
- Klikněte na koncový bod, který chcete odstranit.
- Klikněte na nabídku kebab v horní části a vyberte Odstranit.
Alternativně můžete prostřednictvím kódu programu odstranit obslužný koncový bod pomocí rozhraní REST API nebo sady SDK pro nasazení MLflow.
REST API
DELETE /api/2.0/serving-endpoints/{name}
Sada SDK pro nasazení MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")
Ladění koncového bodu obsluhy modelu
Pokud chcete ladit všechny problémy s koncovým bodem, můžete načíst:
- Protokoly sestavení kontejneru modelu serveru
- Protokoly serveru modelu
Tyto protokoly jsou také přístupné z uživatelského rozhraní koncových bodů na kartě Protokoly.
Pro protokoly sestavení pro obsluha modelu můžete použít následující požadavek. Další informace najdete v průvodci laděním pro obsluhu modelů.
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
“config_version”: 1 // optional
}
Pro protokoly serveru modelu pro obsluhu modelu můžete použít následující požadavek:
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs
{
“config_version”: 1 // optional
}
Správa oprávnění pro koncový bod obsluhující model
K úpravě oprávnění musíte mít alespoň oprávnění CAN MANAGE u obslužného koncového bodu. Další informace o úrovních oprávnění najdete v tématu Obsluha seznamů ACL koncového bodu.
Získejte seznam oprávnění pro koncový bod obsluhy.
databricks permissions get servingendpoints <endpoint-id>
Udělte uživateli jsmith@example.com
přístup CAN QUERY na obslužný koncový bod.
databricks permissions update servingendpoints <endpoint-id> --json '{
"access_control_list": [
{
"user_name": "jsmith@example.com",
"permission_level": "CAN_QUERY"
}
]
}'
Oprávnění koncového bodu můžete také upravit pomocí rozhraní API pro oprávnění.
Přidání zásad rozpočtu pro koncový bod obsluhy modelu
Důležité
Tato funkce je v Public Preview a není k dispozici pro obsluhu koncových bodů, které obsluhují externí modely.
Zásady rozpočtu umožňují vaší organizaci používat vlastní značky na využití bezserverových řešení pro podrobné přisuzování fakturace. Pokud váš pracovní prostor používá zásady rozpočtu k přiřazení bezserverového využití, můžete do modelu obsluhující koncové body přidat zásady rozpočtu. Viz Přiřaďte využití bez serveru se zásadami rozpočtu.
Během vytváření koncového bodu, který obsluhuje model, můžete v uživatelském rozhraní obsluhy vybrat zásady rozpočtu koncového bodu v nabídce Zásady rozpočtu. Pokud máte přiřazenou zásadu rozpočtu, bude tato zásada rozpočtu přiřazena všem koncovým bodům, které vytvoříte, a to platí i v případě, že nevyberete žádnou zásadu z nabídky Zásady rozpočtu.
Pokud máte oprávnění MANAGE
pro existující koncový bod, můžete upravit a přidat do daného koncového bodu zásady rozpočtu ze stránky podrobností o koncovém bodu v uživatelském rozhraní.
Poznámka
Pokud vám byly přiřazeny zásady rozpočtu, vaše stávající koncové body nejsou automaticky označeny vašimi zásadami. Pokud k nim chcete připojit zásady rozpočtu, musíte stávající koncové body aktualizovat ručně.
Získání schématu koncového bodu obsluhy modelu
Důležité
Podpora obsluhy schémat dotazů koncového bodu je ve verzi Public Preview. Tato funkce je dostupná v oblastech obsluhy modelů.
Obslužné schéma dotazu koncového bodu je formální popis koncového bodu obsluhy pomocí standardní specifikace OpenAPI ve formátu JSON. Obsahuje informace o koncovém bodu, včetně cesty ke koncovému bodu, podrobností pro dotazování koncového bodu, jako je formát textu požadavku a odpovědi, a datový typ pro každé pole. Tyto informace můžou být užitečné pro scénáře reprodukovatelnosti nebo v případě, že potřebujete informace o koncovém bodu, ale nejste původním tvůrcem ani vlastníkem koncového bodu.
Aby bylo možné získat schéma koncového bodu obsluhovaného modelu, musí mít obsluhovaný model protokolovaný podpis modelu a koncový bod musí být v READY
stavu.
Následující příklady ukazují, jak programově získat model obsluhující schéma koncového bodu pomocí rozhraní REST API. Informace o funkcích obsluhujících schémata koncových bodů najdete v tématu Co je služba funkcí Databricks?.
Schéma vrácené rozhraním API je ve formátu objektu JSON, který se řídí specifikací OpenAPI.
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"
Podrobnosti schématu odpovědi
Odpověď je specifikace OpenAPI ve formátu JSON, obvykle včetně polí jako openapi
, info
servers
a paths
. Vzhledem k tomu, že odpověď schématu je objekt JSON, můžete ji analyzovat pomocí běžných programovacích jazyků a vygenerovat kód klienta ze specifikace pomocí nástrojů třetích stran.
Specifikaci OpenAPI můžete vizualizovat také pomocí nástrojů třetích stran, jako je Swagger Editor.
Mezi hlavní pole odpovědi patří:
- Pole
info.title
zobrazuje název obsluhujícího koncového bodu. - Pole
servers
vždy obsahuje jeden objekt, obvykleurl
pole, které je základní adresou URL koncového bodu. - Objekt
paths
v odpovědi obsahuje všechny podporované cesty pro koncový bod. Klíče v objektu jsou adresa URL cesty. Každý z nichpath
může podporovat více formátů vstupů. Tyto vstupy jsou uvedeny voneOf
poli.
Následuje příklad odpovědi schématu koncového bodu:
{
"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"
}
}
}
}
}
}
}
}
}
}
}
}