Tworzenie niestandardowych punktów końcowych obsługujących model
W tym artykule opisano sposób tworzenia punktów końcowych obsługujących model obsługujących modele niestandardowe przy użyciu usługi Databricks Model Serving.
Obsługa modelu udostępnia następujące opcje obsługi tworzenia punktu końcowego:
- Interfejs użytkownika obsługującego
- Interfejs API REST
- Zestaw SDK wdrożeń MLflow
Aby uzyskać informacje na temat tworzenia punktów końcowych obsługujących generowanie modeli sztucznej inteligencji, zobacz Tworzenie modelu podstawowego obsługującego punkty końcowe.
Wymagania
- Obszar roboczy musi znajdować się w obsługiwanym regionie.
- Jeśli używasz niestandardowych bibliotek lub bibliotek z prywatnego serwera dublowania z modelem, zobacz Używanie niestandardowych bibliotek języka Python z obsługą modelu przed utworzeniem punktu końcowego modelu.
- Aby utworzyć punkty końcowe przy użyciu zestawu SDK wdrożeń MLflow, należy zainstalować klienta wdrażania MLflow. Aby go zainstalować, uruchom polecenie:
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
Kontrola dostępu
Aby poznać opcje kontroli dostępu dla punktów końcowych obsługujących model na potrzeby zarządzania punktami końcowymi, zobacz Zarządzanie uprawnieniami w punkcie końcowym obsługującym model.
Możesz również dodać zmienne środowiskowe, aby przechowywać credentials na potrzeby obsługi modelu. Zobacz Konfigurowanie dostępu do zasobów z punktów końcowych obsługujących model
Tworzenie punktu końcowego
Obsługa interfejsu użytkownika
Możesz utworzyć punkt końcowy dla modelu obsługującego interfejs użytkownika.
Kliknij pozycję Obsługa na pasku bocznym, aby wyświetlić interfejs użytkownika obsługującego.
Kliknij pozycję Utwórz obsługujący punkt końcowy.
W przypadku modeli zarejestrowanych w rejestrze modeli obszaru roboczego lub modelach w środowisku Unity Catalog:
W polu Nazwa podaj nazwę punktu końcowego.
W sekcji Obsługiwane jednostki
- Kliknij w pole Entity, aby otworzyć formularz Select obsługiwana jednostka.
- Select typ modelu, który chciałbyś obsłużyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru.
- Select jaki model i wersję modelu chcesz obsłużyć.
- Select odsetek ruchu przekierowanego do obsługiwanego modelu.
- Select rozmiar obliczeniowy do użycia. Na potrzeby obciążeń można użyć procesora CPU lub procesora GPU. Aby uzyskać więcej informacji na temat dostępnych obliczeń procesora GPU, zobacz Typy obciążeń procesora GPU.
- Select rozmiar obliczeniowy do użycia. Na potrzeby obciążeń można użyć procesora CPU lub procesora GPU. Aby uzyskać więcej informacji na temat dostępnych obliczeń procesora GPU, zobacz Typy obciążeń procesora GPU.
- W sekcji , pod, dotyczącej skalowania zasobów obliczeniowych w poziomie, wybierz select rozmiar skalowania, który odpowiada liczbie żądań, które ten obsługiwany model może przetwarzać jednocześnie. Ta liczba powinna być w przybliżeniu równa czasowi wykonywania modelu QPS x.
- Dostępne rozmiary są małe dla 0–4 żądań, średnich 8-16 żądań i dużych dla 16-64 żądań.
- Określ, czy punkt końcowy powinien być skalowany do zera, gdy nie jest używany.
Kliknij pozycję Utwórz. Zostanie wyświetlona strona Obsługa punktów końcowych z stanem obsługującym punkt końcowy wyświetlany jako Nie wszystko gotowe.
Interfejs API REST
Punkty końcowe można tworzyć przy użyciu interfejsu API REST. Zobacz POST /api/2.0/serving-endpoints dotyczące konfiguracji punktu końcowego parameters.
Poniższy przykład tworzy punkt końcowy, który obsługuje pierwszą wersję modelu ads1
zarejestrowanego w rejestrze modelu Catalog Unity. Aby określić model z Unity Catalog, podaj pełną nazwę modelu, łącznie z zadaniem nadrzędnym catalog i schema, na przykład: catalog.schema.example-model
.
POST /api/2.0/serving-endpoints
{
"name": "uc-model-endpoint",
"config":
{
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true
},
{
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "4",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config":
{
"routes": [
{
"served_model_name": "my-ads-model-3",
"traffic_percentage": 100
},
{
"served_model_name": "my-ads-model-4",
"traffic_percentage": 20
}
]
}
},
"tags": [
{
"key": "team",
"value": "data science"
}
]
}
Poniżej znajduje się przykładowa odpowiedź. Stan punktu końcowego config_update
NOT_UPDATING
to READY
i obsługiwany model jest w stanie.
{
"name": "uc-model-endpoint",
"creator": "user@email.com",
"creation_timestamp": 1700089637000,
"last_updated_timestamp": 1700089760000,
"state": {
"ready": "READY",
"config_update": "NOT_UPDATING"
},
"config": {
"served_entities": [
{
"name": "ads-entity",
"entity_name": "catalog.schema.my-ads-model-3",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true,
"workload_type": "CPU",
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "user@email.com",
"creation_timestamp": 1700089760000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "catalog.schema.my-ads-model-3",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"tags": [
{
"key": "team",
"value": "data science"
}
],
"id": "e3bd3e471d6045d6b75f384279e4b6ab",
"permission_level": "CAN_MANAGE",
"route_optimized": false
}
Zestaw SDK wdrożeń MLflow
Wdrożenia MLflow udostępniają interfejs API do tworzenia update i usuwania zadań. Interfejsy API dla tych zadań akceptują ten sam parameters co interfejs API REST obsługujący punkty końcowe. Zobacz POST /api/2.0/serving-endpoints dotyczące konfiguracji punktu końcowego parameters.
Poniższy przykład tworzy punkt końcowy, który obsługuje trzecią wersję modelu my-ads-model
zarejestrowanego w rejestrze modeli Catalog Unity. Musisz podać pełną nazwę modelu, w tym catalog nadrzędną i schema, taką jak catalog.schema.example-model
.
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "my-ads-model-3",
"traffic_percentage": 100
}
]
}
}
)
Możesz również wykonać następujące czynności:
Włącz wnioskowanie tables w celu automatycznego przechwytywania żądań przychodzących i odpowiedzi wychodzących do modelu obsługującego punkty końcowe.
Typy obciążeń procesora GPU
Wdrożenie procesora GPU jest zgodne z następującymi wersjami pakietów:
- Pytorch 1.13.0 - 2.0.1
- TensorFlow 2.5.0 - 2.13.0
- MLflow 2.4.0 i nowsze
Aby wdrożyć modele przy użyciu GPU, dołącz pole workload_type
w konfiguracji punktu końcowego podczas jego tworzenia lub jako konfigurację punktu końcowego update za pomocą interfejsu API. Aby skonfigurować punkt końcowy dla obciążeń procesora GPU przy użyciu interfejsu użytkownika usługi
{
"served_entities": [{
"entity_name": "catalog.schema.ads1",
"entity_version": "2",
"workload_type": "GPU_LARGE",
"workload_size": "Small",
"scale_to_zero_enabled": false,
}]
}
Poniższe table podsumowuje obsługiwane typy obciążeń procesora GPU.
Typ obciążenia procesora GPU | Wystąpienie procesora GPU | Pamięć procesora GPU |
---|---|---|
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 GB |
Modyfikowanie niestandardowego punktu końcowego modelu
Po włączeniu niestandardowego punktu końcowego modelu można update konfigurację obliczeniową zgodnie z potrzebami. Ta konfiguracja jest szczególnie przydatna, jeśli potrzebujesz dodatkowych zasobów dla modelu. Rozmiar obciążenia i konfiguracja obliczeniowa odgrywają kluczową rolę w zasobach przydzielonych do obsługi modelu.
Dopóki nowa konfiguracja nie będzie gotowa, stara konfiguracja będzie obsługiwać ruch przewidywania. Gdy trwa update, nie można rozpocząć innego update. Można jednak anulować trwający proces update z poziomu interfejsu użytkownika Serving.
Obsługa interfejsu użytkownika
Po włączeniu punktu końcowego modelu selectEdytuj punkt końcowy, aby zmodyfikować konfigurację obliczeniową punktu końcowego.
Można wykonywać następujące czynności:
- Wybierz jedną z kilku rozmiarów obciążeń, a skalowanie automatyczne jest konfigurowane automatycznie w ramach rozmiaru obciążenia.
- Określ, czy punkt końcowy powinien być skalowany w dół do zera, jeśli nie jest używany.
- Zmodyfikuj procent ruchu w celu kierowania do obsługiwanego modelu.
Możesz anulować konfigurację w toku update, wybierając opcję Anuluj update w prawym górnym rogu strony szczegółów punktu końcowego. Ta funkcja jest dostępna tylko w interfejsie użytkownika obsługującego.
Interfejs API REST
Poniżej przedstawiono przykład konfiguracji punktu końcowego update przy użyciu interfejsu API REST. Zobacz PUT /api/2.0/serving-endpoints/{name}/config.
PUT /api/2.0/serving-endpoints/{name}/config
{
"name": "unity-catalog-model-endpoint",
"config":
{
"served_entities": [
{
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "5",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
],
"traffic_config":
{
"routes": [
{
"served_model_name": "my-ads-model-5",
"traffic_percentage": 100
}
]
}
}
}
Zestaw SDK wdrożeń MLflow
Zestaw MLflow Deployments SDK używa tego samego parameters co interfejs API REST, zobacz PUT /api/2.0/serving-endpoints/{name}/config w celu uzyskania szczegółów żądania i odpowiedzi schema.
Poniższy przykładowy kod używa modelu z rejestru modeli Unity Catalog:
import mlflow
from mlflow.deployments import get_deploy_client
mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name=f"{endpointname}",
config={
"served_entities": [
{
"entity_name": f"{catalog}.{schema}.{model_name}",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": True
}
],
"traffic_config": {
"routes": [
{
"served_model_name": f"{model_name}-1",
"traffic_percentage": 100
}
]
}
}
)
Ocenianie punktu końcowego modelu
Aby ocenić model, wyślij żądania do punktu końcowego obsługującego model.
- Zobacz Tworzenie zapytań obsługujących punkty końcowe dla modeli niestandardowych.
- Sprawdź modele bazowe zapytań .
Dodatkowe zasoby
- Zarządzanie modelami obsługującymi punkty końcowe.
- Modele zewnętrzne w narzędziu Mosaic AI Model Serving.
- Jeśli wolisz używać języka Python, możesz użyć zestawu SDK języka Python usługi Databricks w czasie rzeczywistym.
Przykłady notesów
W poniższych notesach znajdują się różne zarejestrowane modele usługi Databricks, których można użyć do get pracy z punktami końcowymi obsługującymi model. Aby uzyskać dodatkowe przykłady, zobacz samouczek : wdrożenie i wykonywanie zapytań do modelu niestandardowego.
Przykłady modeli można zaimportować do obszaru roboczego, postępując zgodnie z instrukcjami w temacie Importowanie notesu. Po wybraniu i utworzeniu modelu na podstawie jednego z przykładów zarejestruj go w usłudze Unity Catalog, a następnie wykonaj kroki w przepływie pracy interfejsu użytkownika dla serwowania modelu.