Udostępnij za pośrednictwem


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.

  1. Kliknij pozycję Obsługa na pasku bocznym, aby wyświetlić interfejs użytkownika obsługującego.

  2. Kliknij pozycję Utwórz obsługujący punkt końcowy.

    Okienko obsługi modelu w interfejsie użytkownika usługi Databricks

W przypadku modeli zarejestrowanych w rejestrze modeli obszaru roboczego lub modelach w środowisku Unity Catalog:

  1. W polu Nazwa podaj nazwę punktu końcowego.

  2. W sekcji Obsługiwane jednostki

    1. Kliknij w pole Entity, aby otworzyć formularz Select obsługiwanej jednostki.
    2. Select typu modelu, który chcesz obsłużyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru.
    3. Select którą wersję modelu i który model chcesz obsłużyć.
    4. Select procent ruchu kierowanego do obsługiwanego modelu.
    5. 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.
    6. 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.
    7. 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.
      1. Dostępne rozmiary są małe dla 0–4 żądań, średnich 8-16 żądań i dużych dla 16-64 żądań.
    8. Określ, czy punkt końcowy powinien być skalowany do zera, gdy nie jest używany.
  3. 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.

    Tworzenie punktu końcowego obsługującego model

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_updateNOT_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:

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 , żądany typ procesora GPU z listy rozwijanej typ obliczeniowy .

{
  "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.

Dodatkowe zasoby

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.

Trenowanie i rejestrowanie modelu scikit-learn na potrzeby notesu obsługującego model

Get laptop

Trenowanie i rejestrowanie modelu HuggingFace na potrzeby notesu obsługującego model

Get notatnik