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ługiwana jednostka.
    2. Select typ modelu, który chciałbyś obsłużyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru.
    3. Select jaki model i wersję modelu chcesz obsłużyć.
    4. Select odsetek ruchu przekierowanego 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 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.
    7. 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.
      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 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_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ę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:

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 , żą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 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.

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 usłudze Unity Catalog, a następnie wykonaj kroki w przepływie pracy interfejsu użytkownika dla serwowania modelu.

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

Get notatnik

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

Get notatnik