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ługiwanej jednostki.
- Select typu modelu, który chcesz obsłużyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru.
- Select którą wersję modelu i który model chcesz obsłużyć.
- Select procent ruchu kierowanego 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 który rozmiar obliczeniowy wybrać. 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 dotyczącej skalowania zasobów obliczeniowych w poziomie, select przedstawia rozmiar skalowania obliczeniowego, który odpowiada liczbie żądań, które ten 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 dla 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, w tym nadrzędne catalog i schema, takie jak 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ępnia interfejs API do tworzenia, update i usuwania zadań. Interfejsy API dla tych zadań akceptują to samo parameters, co interfejs API REST używany do obsługi punktów końcowych. Zobacz POST /api/2.0/serving-endpoints, aby uzyskać informacje o konfiguracji punktu końcowego parameters.
Poniższy przykład tworzy punkt końcowy, który serwuje trzecią wersję modelu my-ads-model
zarejestrowanego w rejestrze modeli Unity Catalog. Musisz podać pełną nazwę modelu, w tym element nadrzędny catalog i schema, taki 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
do konfiguracji punktu końcowego podczas tworzenia punktu końcowego , lub jako konfigurację punktu końcowego update przy użyciu 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 konfiguracji obliczeniowej 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. Podczas gdy trwa update, nie można dokonać kolejnego update. Jednak można anulować proces update z poziomu interfejsu użytkownika.
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 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
Pakiet MLflow Deployments SDK używa tego samego parameters co interfejs API REST, zobacz PUT /api/2.0/serving-endpoints/{name}/config aby uzyskać szczegóły dotyczące żądania i odpowiedzi schema.
Poniższy przykładowy kod używa modelu z rejestru modeli Catalog Unity.
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 Unity Catalog, a następnie wykonaj kroki przepływu pracy w interfejsie użytkownika dla udostępniania modelu.