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 utworzyć punkty końcowe obsługujące generowanie modeli sztucznej inteligencji, zobacz Tworzenie generowania modelu sztucznej inteligencji 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 do przechowywania poświadczeń dla 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 katalogu aparatu Unity:

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

  2. W sekcji Obsługiwane jednostki

    1. Kliknij pole Jednostka, aby otworzyć formularz Wybierz obsługiwaną jednostkę.
    2. Wybierz typ modelu, który chcesz obsłużyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru.
    3. Wybierz model i wersję modelu, którą chcesz obsłużyć.
    4. Wybierz procent ruchu, który ma być kierowany do obsługiwanego modelu.
    5. Wybierz 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. Wybierz 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 obszarze Skalowanie obliczeń w poziomie wybierz rozmiar skalowania zasobów obliczeniowych w poziomie, który odpowiada liczbie żądań, które może przetwarzać ten obsługiwany model w tym samym czasie. 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 , aby uzyskać parametry konfiguracji punktu końcowego.

Poniższy przykład tworzy punkt końcowy, który obsługuje pierwszą wersję ads1 modelu zarejestrowanego w rejestrze modeli. Aby określić model z katalogu aparatu Unity, podaj pełną nazwę modelu, w tym katalog nadrzędny i schemat, catalog.schema.example-modeltaki jak .


POST /api/2.0/serving-endpoints

{
  "name": "workspace-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "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 READY to NOT_UPDATING i obsługiwany model jest w stanie.

{
  "name": "workspace-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": "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": "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 zadań tworzenia, aktualizowania i usuwania. Interfejsy API dla tych zadań akceptują te same parametry co interfejs API REST na potrzeby obsługi punktów końcowych. Zobacz POST /api/2.0/serving-endpoints , aby uzyskać parametry konfiguracji punktu końcowego.


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "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 procesorów GPU, uwzględnij workload_type pole w konfiguracji punktu końcowego podczas tworzenia punktu końcowego lub jako aktualizację konfiguracji punktu końcowego przy użyciu interfejsu API. Aby skonfigurować punkt końcowy dla obciążeń procesora GPU za pomocą interfejsu użytkownika obsługującego, wybierz żądany typ procesora GPU z listy rozwijanej Typ obliczeniowy.

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_LARGE",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

Poniższa tabela zawiera podsumowanie obsługiwanych typów 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 zaktualizować 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. Chociaż trwa aktualizacja, nie można wprowadzić innej aktualizacji. Można jednak anulować aktualizację w toku z poziomu interfejsu użytkownika obsługującego.

Obsługa interfejsu użytkownika

Po włączeniu punktu końcowego modelu wybierz pozycję Edytuj 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ć aktualizację konfiguracji w toku, wybierając pozycję Anuluj aktualizację 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 aktualizacji konfiguracji punktu końcowego 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 tych samych parametrów co interfejs API REST, zobacz PUT /api/2.0/serving-endpoints/{name}/config , aby uzyskać szczegóły schematu żądania i odpowiedzi.

Poniższy przykładowy kod używa modelu z rejestru modeli wykazu aparatu 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

Poniższe notesy obejmują różne zarejestrowane modele usługi Databricks, których można użyć do rozpoczęcia pracy z punktami końcowymi obsługującymi model.

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 katalogu aparatu Unity, a następnie wykonaj kroki przepływu pracy interfejsu użytkownika dla obsługi modelu.

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

Pobierz notes

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

Pobierz notes