Udostępnij za pośrednictwem


Co to jest obsługa funkcji usługi Databricks?

Funkcja usługi Databricks udostępnia dane na platformie Databricks modelom lub aplikacjom wdrożonym poza usługą Azure Databricks. Automatyczne skalowanie punktów końcowych obsługujących funkcje w celu dostosowania do ruchu w czasie rzeczywistym i zapewnienia wysokiej dostępności i małych opóźnień na potrzeby obsługi funkcji. Na tej stronie opisano sposób konfigurowania i używania funkcji obsługujących. Aby zapoznać się z samouczkiem krok po kroku, zobacz Wdrażanie i wykonywanie zapytań względem punktu końcowego obsługującego funkcję.

Gdy używasz usługi Mosaic AI Model Serving do obsługi modelu utworzonego przy użyciu funkcji z usługi Databricks, model automatycznie wyszukuje i przekształca funkcje żądań wnioskowania. Usługa Databricks Feature Serving umożliwia udostępnianie danych strukturalnych dla aplikacji generacji rozszerzonej (RAG), a także funkcji wymaganych dla innych aplikacji, takich jak modele obsługiwane poza usługą Databricks lub dowolną inną aplikacją, która wymaga funkcji opartych na danych w wykazie aparatu Unity.

kiedy używać obsługi funkcji

Dlaczego warto używać funkcji obsługujących?

Funkcja usługi Databricks udostępnia jeden interfejs, który obsługuje funkcje wstępnie zmaterializowane i na żądanie. Obejmuje również następujące korzyści:

  • Prostota. Usługa Databricks obsługuje infrastrukturę. W przypadku pojedynczego wywołania interfejsu API usługa Databricks tworzy środowisko obsługujące gotowe do produkcji.
  • Wysoka dostępność i skalowalność. Funkcje obsługujące punkty końcowe są automatycznie skalowane w górę i w dół, aby dostosować się do liczby obsługujących żądań.
  • Zabezpieczenia. Punkty końcowe są wdrażane w bezpiecznej granicy sieci i używają dedykowanych obliczeń, które kończą się po usunięciu punktu końcowego lub skalowaniu do zera.

Wymagania

  • Databricks Runtime 14.2 ML lub nowszy.
  • Aby korzystać z interfejsu API języka Python, obsługa funkcji wymaga databricks-feature-engineering wersji 0.1.2 lub nowszej, która jest wbudowana w środowisko Databricks Runtime 14.2 ML. W przypadku wcześniejszych wersji uczenia maszynowego środowiska Databricks Runtime ręcznie zainstaluj wymaganą wersję przy użyciu polecenia %pip install databricks-feature-engineering>=0.1.2. Jeśli używasz notesu usługi Databricks, musisz ponownie uruchomić jądro języka Python, uruchamiając to polecenie w nowej komórce: dbutils.library.restartPython().
  • Aby korzystać z zestawu SDK usługi Databricks, obsługa funkcji wymaga databricks-sdk wersji 0.18.0 lub nowszej. Aby ręcznie zainstalować wymaganą wersję, użyj polecenia %pip install databricks-sdk>=0.18.0. Jeśli używasz notesu usługi Databricks, musisz ponownie uruchomić jądro języka Python, uruchamiając to polecenie w nowej komórce: dbutils.library.restartPython().

Funkcja usługi Databricks udostępnia interfejs użytkownika i kilka opcji programistycznych do tworzenia, aktualizowania, wykonywania zapytań i usuwania punktów końcowych. Ten artykuł zawiera instrukcje dotyczące każdej z następujących opcji:

  • Interfejs użytkownika usługi Databricks
  • Interfejs API REST
  • Interfejs API języka Python
  • Databricks SDK

Aby korzystać z interfejsu API REST lub zestawu MLflow Deployments SDK, musisz mieć token interfejsu API usługi Databricks.

Ważne

Najlepszym rozwiązaniem w zakresie zabezpieczeń w scenariuszach produkcyjnych usługa Databricks zaleca używanie tokenów OAuth maszyny do maszyny podczas uwierzytelniania w środowisku produkcyjnym.

W przypadku testowania i programowania usługa Databricks zaleca używanie osobistego tokenu dostępu należącego do jednostek usługi zamiast użytkowników obszaru roboczego. Aby utworzyć tokeny dla jednostek usługi, zobacz Zarządzanie tokenami dla jednostki usługi.

Uwierzytelnianie dla obsługi funkcji

Aby uzyskać informacje na temat uwierzytelniania, zobacz Uwierzytelnianie dostępu do zasobów usługi Azure Databricks.

Utwórz FeatureSpec

A FeatureSpec to zdefiniowany przez użytkownika zestaw funkcji i funkcji. Funkcje i funkcje można łączyć w obiekcie FeatureSpec. FeatureSpecs są przechowywane w wykazie aparatu Unity i zarządzane przez program i są wyświetlane w Eksploratorze wykazu.

Tabele określone w obiekcie FeatureSpec muszą być publikowane w tabeli online lub w sklepie online innej firmy. Zobacz Używanie tabel online na potrzeby obsługi funkcji w czasie rzeczywistym lub sklepów online innych firm.

Należy użyć databricks-feature-engineering pakietu, aby utworzyć element FeatureSpec.

from databricks.feature_engineering import (
  FeatureFunction,
  FeatureLookup,
  FeatureEngineeringClient,
)

fe = FeatureEngineeringClient()

features = [
  # Lookup column `average_yearly_spend` and `country` from a table in UC by the input `user_id`.
  FeatureLookup(
    table_name="main.default.customer_profile",
    lookup_key="user_id",
    feature_names=["average_yearly_spend", "country"]
  ),
  # Calculate a new feature called `spending_gap` - the difference between `ytd_spend` and `average_yearly_spend`.
  FeatureFunction(
    udf_name="main.default.difference",
    output_name="spending_gap",
    # Bind the function parameter with input from other features or from request.
    # The function calculates a - b.
    input_bindings={"a": "ytd_spend", "b": "average_yearly_spend"},
  ),
]

# Create a `FeatureSpec` with the features defined above.
# The `FeatureSpec` can be accessed in Unity Catalog as a function.
fe.create_feature_spec(
  name="main.default.customer_features",
  features=features,
)

Tworzenie punktu końcowego

Element FeatureSpec definiuje punkt końcowy. Aby uzyskać więcej informacji, zobacz Tworzenie niestandardowych punktów końcowych obsługujących model, dokumentację interfejsu API języka Python lub dokumentację zestawu SDK usługi Databricks, aby uzyskać szczegółowe informacje.

Uwaga

W przypadku obciążeń, które są wrażliwe na opóźnienia lub wymagają wysokich zapytań na sekundę, usługa Model Serving oferuje optymalizację tras w punktach końcowych obsługujących niestandardowy model, zobacz Konfigurowanie optymalizacji tras w punktach końcowych obsługujących obsługę.

Interfejs API REST

curl -X POST -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints \
    -H 'Content-Type: application/json' \
    -d '"name": "customer-features",
   "config": {
       "served_entities": [
           {
               "entity_name": "main.default.customer_features",
               "workload_size": "Small",
               "scale_to_zero_enabled": true
           }
       ]
   }'

Zestaw SDK usługi Databricks — Python

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

workspace = WorkspaceClient()

# Create endpoint
workspace.serving_endpoints.create(
  name="my-serving-endpoint",
  config = EndpointCoreConfigInput(
    served_entities=[
    ServedEntityInput(
        entity_name="main.default.customer_features",
        scale_to_zero_enabled=True,
        workload_size="Small"
      )
    ]
  )
)

Interfejs API języka Python

from databricks.feature_engineering.entities.feature_serving_endpoint import (
  ServedEntity,
  EndpointCoreConfig,
)

fe.create_feature_serving_endpoint(
  name="customer-features",
    config=EndpointCoreConfig(
    served_entities=ServedEntity(
      feature_spec_name="main.default.customer_features",
             workload_size="Small",
             scale_to_zero_enabled=True,
             instance_profile_arn=None,
    )
  )
)

Aby wyświetlić punkt końcowy, kliknij pozycję Obsługa na lewym pasku bocznym interfejsu użytkownika usługi Databricks. Gdy stan jest gotowy, punkt końcowy jest gotowy do odpowiadania na zapytania. Aby dowiedzieć się więcej na temat serwowania modeli mozaiki sztucznej inteligencji, zobacz Mozaika AI Model Serving (Obsługa modeli mozaiki sztucznej inteligencji).

Uzyskiwanie punktu końcowego

Aby uzyskać metadane i stan punktu końcowego, możesz użyć zestawu SDK usługi Databricks lub interfejsu API języka Python.

Zestaw SDK usługi Databricks — Python

endpoint = workspace.serving_endpoints.get(name="customer-features")
# print(endpoint)

Interfejs API języka Python

endpoint = fe.get_feature_serving_endpoint(name="customer-features")
# print(endpoint)

Pobieranie schematu punktu końcowego

Aby uzyskać schemat punktu końcowego, możesz użyć interfejsu API REST. Aby uzyskać więcej informacji na temat schematu punktu końcowego, zobacz Pobieranie schematu punktu końcowego obsługującego model.

ACCESS_TOKEN=<token>
ENDPOINT_NAME=<endpoint name>

curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"

Wykonywanie zapytań względem punktu końcowego

Do wykonywania zapytań dotyczących punktu końcowego można użyć interfejsu API REST, zestawu SDK wdrożeń MLflow lub interfejsu użytkownika obsługującego.

Poniższy kod pokazuje, jak skonfigurować poświadczenia i utworzyć klienta podczas korzystania z zestawu MLflow Deployments SDK.

  # Set up credentials
  export DATABRICKS_HOST=...
  export DATABRICKS_TOKEN=...
  # Set up the client
  import mlflow.deployments

  client = mlflow.deployments.get_deploy_client("databricks")

Uwaga

Najlepszym rozwiązaniem w zakresie zabezpieczeń w przypadku uwierzytelniania za pomocą zautomatyzowanych narzędzi, systemów, skryptów i aplikacji usługa Databricks zaleca używanie osobistych tokenów dostępu należących do jednostek usługi zamiast użytkowników obszaru roboczego. Aby utworzyć tokeny dla jednostek usługi, zobacz Zarządzanie tokenami dla jednostki usługi.

Wykonywanie zapytań dotyczących punktu końcowego przy użyciu interfejsów API

Ta sekcja zawiera przykłady wykonywania zapytań dotyczących punktu końcowego przy użyciu interfejsu API REST lub zestawu SDK wdrożeń MLflow.

Interfejs API REST

curl -X POST -u token:$DATABRICKS_API_TOKEN $ENDPOINT_INVOCATION_URL \
  -H 'Content-Type: application/json' \
  -d '{"dataframe_records": [
          {"user_id": 1, "ytd_spend": 598},
          {"user_id": 2, "ytd_spend": 280}
      ]}'

Zestaw SDK wdrożeń MLflow

Ważne

W poniższym przykładzie użyto interfejsu predict() API z zestawu SDK wdrożeń MLflow. Ten interfejs API jest eksperymentalny , a definicja interfejsu API może ulec zmianie.

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
response = client.predict(
    endpoint="test-feature-endpoint",
    inputs={
        "dataframe_records": [
            {"user_id": 1, "ytd_spend": 598},
            {"user_id": 2, "ytd_spend": 280},
        ]
    },
)

Wykonywanie zapytań dotyczących punktu końcowego przy użyciu interfejsu użytkownika

Możesz wykonać zapytanie dotyczące punktu końcowego obsługującego bezpośrednio z poziomu interfejsu użytkownika obsługującego. Interfejs użytkownika zawiera wygenerowane przykłady kodu, których można użyć do wykonywania zapytań dotyczących punktu końcowego.

  1. Na lewym pasku bocznym obszaru roboczego usługi Azure Databricks kliknij pozycję Obsługa.

  2. Kliknij punkt końcowy, który chcesz wykonać zapytanie.

  3. W prawym górnym rogu ekranu kliknij pozycję Punkt końcowy zapytania.

    przycisk punktu końcowego zapytania

  4. W polu Żądanie wpisz treść żądania w formacie JSON.

  5. Kliknij pozycję Wyślij żądanie.

// Example of a request body.
{
  "dataframe_records": [
    {"user_id": 1, "ytd_spend": 598},
    {"user_id": 2, "ytd_spend": 280}
  ]
}

Okno dialogowe Punkt końcowy zapytania zawiera wygenerowany przykładowy kod w języku curl, Python i SQL. Kliknij karty, aby wyświetlić i skopiować przykładowy kod.

okno dialogowe punktu końcowego zapytania

Aby skopiować kod, kliknij ikonę kopiowania w prawym górnym rogu pola tekstowego.

przycisk kopiowania w oknie dialogowym punktu końcowego zapytania

Aktualizowanie punktu końcowego

Punkt końcowy można zaktualizować przy użyciu interfejsu API REST, zestawu SDK usługi Databricks lub interfejsu użytkownika obsługującego.

Aktualizowanie punktu końcowego przy użyciu interfejsów API

Interfejs API REST

curl -X PUT -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>/config \
  -H 'Content-Type: application/json' \
  -d '"served_entities": [
        {
            "name": "customer-features",
            "entity_name": "main.default.customer_features_new",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ]'

Zestaw SDK usługi Databricks — Python

workspace.serving_endpoints.update_config(
  name="my-serving-endpoint",
  served_entities=[
    ServedEntityInput(
      entity_name="main.default.customer_features",
      scale_to_zero_enabled=True,
      workload_size="Small"
    )
  ]
)

Aktualizowanie punktu końcowego przy użyciu interfejsu użytkownika

Wykonaj następujące kroki, aby użyć interfejsu użytkownika obsługującego:

  1. Na lewym pasku bocznym obszaru roboczego usługi Azure Databricks kliknij pozycję Obsługa.
  2. W tabeli kliknij nazwę punktu końcowego, który chcesz zaktualizować. Zostanie wyświetlony ekran punktu końcowego.
  3. W prawym górnym rogu ekranu kliknij pozycję Edytuj punkt końcowy.
  4. W oknie dialogowym Edytowanie obsługującego punktu końcowego zmodyfikuj ustawienia punktu końcowego zgodnie z potrzebami.
  5. Kliknij przycisk Aktualizuj, aby zapisać zmiany.

aktualizowanie punktu końcowego

Usuwanie punktu końcowego

Ostrzeżenie

Ta akcja jest nieodwracalna.

Punkt końcowy można usunąć przy użyciu interfejsu API REST, zestawu SDK usługi Databricks, interfejsu API języka Python lub interfejsu użytkownika obsługującego.

Usuwanie punktu końcowego przy użyciu interfejsów API

Interfejs API REST

curl -X DELETE -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>

Zestaw SDK usługi Databricks — Python

workspace.serving_endpoints.delete(name="customer-features")

Interfejs API języka Python

fe.delete_feature_serving_endpoint(name="customer-features")

Usuwanie punktu końcowego przy użyciu interfejsu użytkownika

Wykonaj następujące kroki, aby usunąć punkt końcowy przy użyciu interfejsu użytkownika obsługującego:

  1. Na lewym pasku bocznym obszaru roboczego usługi Azure Databricks kliknij pozycję Obsługa.
  2. W tabeli kliknij nazwę punktu końcowego, który chcesz usunąć. Zostanie wyświetlony ekran punktu końcowego.
  3. W prawym górnym rogu ekranu kliknij menu Menu Kebab kebab i wybierz pozycję Usuń.

usuwanie punktu końcowego

Monitorowanie kondycji punktu końcowego

Aby uzyskać informacje o dziennikach i metrykach dostępnych dla punktów końcowych obsługujących funkcje, zobacz Monitorowanie jakości modelu i kondycji punktu końcowego.

Kontrola dostępu

Aby uzyskać informacje o uprawnieniach do punktów końcowych obsługujących funkcje, zobacz Zarządzanie uprawnieniami w punkcie końcowym obsługującym model.

Przykładowy notes

W tym notesie pokazano, jak za pomocą zestawu SDK usługi Databricks utworzyć punkt końcowy obsługujący funkcję przy użyciu tabel online usługi Databricks.

Przykładowy notes obsługujący funkcję z tabelami online

Pobierz notes