Zarządzanie punktami końcowymi obsługującymi model
W tym artykule opisano sposób zarządzania punktami końcowymi obsługującymi model przy użyciu interfejsu użytkownika obsługującego i interfejsu API REST. Zobacz Obsługa punktów końcowych w dokumentacji interfejsu API REST.
Aby utworzyć model obsługujący punkty końcowe, użyj jednego z następujących elementów:
- Tworzenie niestandardowych punktów końcowych obsługujących model.
- Tworzenie generowania modelu sztucznej inteligencji obsługującego punkty końcowe.
Pobieranie stanu punktu końcowego modelu
W interfejsie użytkownika obsługującego można sprawdzić stan punktu końcowego ze wskaźnika Stanu punktu końcowego obsługującego w górnej części strony szczegółów punktu końcowego.
Możesz użyć sprawdzania stanu i szczegółów punktu końcowego programowo przy użyciu interfejsu API REST lub zestawu SDK wdrożeń MLflow
Interfejs API REST
GET /api/2.0/serving-endpoints/{name}
Poniższy przykład tworzy punkt końcowy, który obsługuje pierwszą wersję modelu zarejestrowanego my-ads-model
w rejestrze modeli wykazu aparatu Unity. Musisz podać pełną nazwę modelu, w tym katalog nadrzędny i schemat, catalog.schema.example-model
taki jak .
W poniższej przykładowej odpowiedzi state.ready
pole jest "GOTOWE", co oznacza, że punkt końcowy jest gotowy do odbierania ruchu. Pole state.update_state
jest NOT_UPDATING
i pending_config
nie jest już zwracane, ponieważ aktualizacja została zakończona pomyślnie.
{
"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"
}
Zestaw SDK wdrożeń 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",
}
Zatrzymywanie punktu końcowego obsługującego model
Możesz tymczasowo zatrzymać punkt końcowy obsługujący model i uruchomić go później. Po zatrzymaniu punktu końcowego zasoby aprowizowane dla niego są zamykane, a punkt końcowy nie może obsługiwać zapytań, dopóki nie zostanie uruchomiony ponownie. Tylko punkty końcowe obsługujące modele niestandardowe, nie są zoptymalizowane pod kątem tras i nie mogą zostać zatrzymane żadne aktualizacje w toku. Zatrzymane punkty końcowe nie są liczone względem limitu przydziału zasobów. Zapytania wysyłane do zatrzymanego punktu końcowego zwracają błąd 400.
Punkt końcowy można zatrzymać na stronie szczegółów punktu końcowego w interfejsie użytkownika obsługującego.
- Kliknij punkt końcowy, który chcesz zatrzymać.
- Kliknij przycisk Zatrzymaj w prawym górnym rogu.
Alternatywnie można programowo zatrzymać obsługujący punkt końcowy przy użyciu interfejsu API REST w następujący sposób:
POST /api/2.0/serving-endpoints/{name}/config:stop
Gdy wszystko będzie gotowe do uruchomienia punktu końcowego obsługującego zatrzymany model, możesz to zrobić na stronie szczegółów punktu końcowego w interfejsie użytkownika obsługującego.
- Kliknij punkt końcowy, który chcesz uruchomić.
- Kliknij przycisk Start w prawym górnym rogu.
Alternatywnie można programowo uruchomić zatrzymany punkt końcowy obsługujący przy użyciu interfejsu API REST w następujący sposób:
POST /api/2.0/serving-endpoints/{name}/config:start
Usuwanie punktu końcowego obsługującego model
Aby wyłączyć obsługę modelu, możesz usunąć obsługiwany punkt końcowy.
Punkt końcowy można usunąć ze strony szczegółów punktu końcowego w interfejsie użytkownika obsługującego.
- Kliknij pozycję Obsługa na pasku bocznym.
- Kliknij punkt końcowy, który chcesz usunąć.
- Kliknij menu kebab u góry i wybierz pozycję Usuń.
Alternatywnie można programowo usunąć obsługujący punkt końcowy przy użyciu interfejsu API REST lub zestawu SDK wdrożeń MLflow
Interfejs API REST
DELETE /api/2.0/serving-endpoints/{name}
Zestaw SDK wdrożeń MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")
Debugowanie punktu końcowego obsługującego model
Aby debugować wszelkie problemy z punktem końcowym, możesz pobrać:
- Dzienniki kompilacji kontenera serwera modelu
- Dzienniki serwera modelu
Te dzienniki są również dostępne z poziomu interfejsu użytkownika punktów końcowych na karcie Dzienniki .
W przypadku dzienników kompilacji dla obsługiwanego modelu można użyć następującego żądania. Aby uzyskać więcej informacji, zobacz Przewodnik debugowania obsługi modeli.
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
“config_version”: 1 // optional
}
W przypadku dzienników serwera modelu dla modelu obsługującego można użyć następującego żądania:
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs
{
“config_version”: 1 // optional
}
Zarządzanie uprawnieniami do punktu końcowego obsługującego model
Aby zmodyfikować uprawnienia, musisz mieć co najmniej uprawnienie CAN MANAGE w punkcie końcowym obsługującym. Aby uzyskać więcej informacji na temat poziomów uprawnień, zobacz Obsługa list ACL punktów końcowych.
Pobierz listę uprawnień w punkcie końcowym obsługującym.
databricks permissions get servingendpoints <endpoint-id>
Udziel użytkownikowi jsmith@example.com
uprawnienia CAN QUERY w punkcie końcowym obsługującym.
databricks permissions update servingendpoints <endpoint-id> --json '{
"access_control_list": [
{
"user_name": "jsmith@example.com",
"permission_level": "CAN_QUERY"
}
]
}'
Możesz również zmodyfikować uprawnienia obsługujące punkty końcowe przy użyciu interfejsu API uprawnień.
Pobieranie schematu punktu końcowego obsługującego model
Ważne
Obsługa schematów zapytań punktu końcowego jest dostępna w publicznej wersji zapoznawczej. Ta funkcja jest dostępna w regionach obsługa modeli.
Schemat zapytania obsługującego punkt końcowy jest formalnym opisem punktu końcowego obsługującego przy użyciu standardowej specyfikacji interfejsu OpenAPI w formacie JSON. Zawiera on informacje o punkcie końcowym, w tym ścieżkę punktu końcowego, szczegóły dotyczące wykonywania zapytań dotyczących punktu końcowego, takiego jak format treści żądania i odpowiedzi, oraz typ danych dla każdego pola. Te informacje mogą być przydatne w scenariuszach powtarzalności lub gdy potrzebujesz informacji o punkcie końcowym, ale nie jesteś oryginalnym twórcą ani właścicielem punktu końcowego.
Aby uzyskać schemat punktu końcowego obsługującego model, obsługiwany model musi mieć zarejestrowany podpis modelu, a punkt końcowy musi być w READY
stanie.
W poniższych przykładach pokazano, jak programowo pobrać schemat punktu końcowego obsługującego model przy użyciu interfejsu API REST. Aby uzyskać informacje na temat schematów punktów końcowych obsługujących funkcje, zobacz Co to jest obsługa funkcji usługi Databricks?.
Schemat zwracany przez interfejs API jest w formacie obiektu JSON zgodnego ze specyfikacją interfejsu 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"
Szczegóły odpowiedzi schematu
Odpowiedź jest specyfikacją interfejsu OpenAPI w formacie JSON, zazwyczaj obejmującą pola, takie jak openapi
, info
servers
i paths
. Ponieważ odpowiedź schematu jest obiektem JSON, możesz przeanalizować go przy użyciu typowych języków programowania i wygenerować kod klienta ze specyfikacji przy użyciu narzędzi innych firm.
Można również wizualizować specyfikację interfejsu OpenAPI przy użyciu narzędzi innych firm, takich jak Edytor struktury Swagger.
Główne pola odpowiedzi to:
- Pole
info.title
zawiera nazwę punktu końcowego obsługującego. - Pole
servers
zawsze zawiera jeden obiekt, zazwyczajurl
pole, które jest podstawowym adresem URL punktu końcowego. - Obiekt
paths
w odpowiedzi zawiera wszystkie obsługiwane ścieżki dla punktu końcowego. Klucze w obiekcie są adresem URL ścieżki. Każdypath
może obsługiwać wiele formatów danych wejściowych. Te dane wejściowe są wyświetlane woneOf
polu.
Poniżej przedstawiono przykładową odpowiedź schematu punktu końcowego:
{
"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"
}
}
}
}
}
}
}
}
}
}
}
}