Share via


Che cos'è Databricks Feature Serving?

Databricks Feature Serving rende disponibili i dati nella piattaforma Databricks per i modelli o le applicazioni distribuite all'esterno di Azure Databricks. Gli endpoint di gestione delle funzionalità vengono ridimensionati automaticamente per adattarsi al traffico in tempo reale e fornire un servizio a disponibilità elevata e a bassa latenza per la gestione delle funzionalità. Questa pagina descrive come configurare e usare funzionalità di gestione delle funzionalità. Per un'esercitazione dettagliata, vedere Esercitazione: Distribuire ed eseguire query su un endpoint di gestione delle funzionalità.

Quando si usa Databricks Model Serving per gestire un modello compilato usando le funzionalità di Databricks, il modello cerca e trasforma automaticamente le funzionalità per le richieste di inferenza. Con Databricks Feature Serving è possibile gestire dati strutturati per il recupero di applicazioni di generazione aumentata (RAG) e funzionalità necessarie per altre applicazioni, ad esempio modelli serviti all'esterno di Databricks o qualsiasi altra applicazione che richiede funzionalità basate sui dati in Unity Catalog.

quando usare la gestione delle funzionalità

Perché usare Feature Serving?

Databricks Feature Serving offre una singola interfaccia che fornisce funzionalità pre-materializzate e su richiesta. Include anche i vantaggi seguenti:

  • Semplicità. Databricks gestisce l'infrastruttura. Con una singola chiamata API, Databricks crea un ambiente di gestione pronto per la produzione.
  • Disponibilità elevata e scalabilità. Gli endpoint di gestione delle funzionalità aumentano e si riduceno automaticamente per adattarsi al volume di richieste di gestione.
  • Protezione. Gli endpoint vengono distribuiti in un limite di rete sicuro e usano calcolo dedicato che termina quando l'endpoint viene eliminato o ridimensionato su zero.

Requisiti

  • Databricks Runtime 14.2 ML o versione successiva.
  • Per usare l'API Python, Feature Serving richiede databricks-feature-engineering la versione 0.1.2 o successiva, integrata in Databricks Runtime 14.2 ML. Per le versioni precedenti di Databricks Runtime ML, installare manualmente la versione richiesta usando %pip install databricks-feature-engineering>=0.1.2. Se si usa un notebook di Databricks, è necessario riavviare il kernel Python eseguendo questo comando in una nuova cella: dbutils.library.restartPython().
  • Per usare Databricks SDK, Feature Serving richiede databricks-sdk la versione 0.18.0 o successiva. Per installare manualmente la versione richiesta, usare %pip install databricks-sdk>=0.18.0. Se si usa un notebook di Databricks, è necessario riavviare il kernel Python eseguendo questo comando in una nuova cella: dbutils.library.restartPython().

Databricks Feature Serving offre un'interfaccia utente e diverse opzioni a livello di codice per la creazione, l'aggiornamento, l'esecuzione di query e l'eliminazione di endpoint. Questo articolo include istruzioni per ognuna delle opzioni seguenti:

  • Interfaccia utente di Databricks
  • REST API
  • API Python
  • Databricks SDK

Per usare l'API REST o MLflow Deployments SDK, è necessario disporre di un token API databricks.

Importante

Come procedura consigliata per la sicurezza per gli scenari di produzione, Databricks consiglia di usare token OAuth da computer a computer per l'autenticazione durante l'ambiente di produzione.

Per il test e lo sviluppo, Databricks consiglia di usare un token di accesso personale appartenente alle entità servizio anziché agli utenti dell'area di lavoro. Per creare token per le entità servizio, vedere Gestire i token per un'entità servizio.

Autenticazione per la gestione delle funzionalità

Per informazioni sull'autenticazione, vedere Autenticazione per l'automazione di Azure Databricks - Panoramica.

Creare un FeatureSpec

Un FeatureSpec è un set definito dall'utente di funzionalità e funzioni. È possibile combinare funzionalità e funzioni in un oggetto FeatureSpec. FeatureSpecs vengono archiviati e gestiti da Unity Catalog e visualizzati in Esplora cataloghi.

Le tabelle specificate in un FeatureSpec oggetto devono essere pubblicate in una tabella online o in un archivio online di terze parti. Vedere Usare tabelle online per la gestione delle funzionalità in tempo reale o gli store online di terze parti.

È necessario usare il databricks-feature-engineering pacchetto per creare un oggetto 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",
    features=["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,
)

Creare un endpoint

Definisce FeatureSpec l'endpoint. Per altre informazioni, vedere Creare endpoint personalizzati per la gestione di modelli, la documentazione dell'API Python o la documentazione di Databricks SDK.

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
           }
       ]
   }'

Databricks SDK - 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"
      )
    ]
  )
)

API 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,
    )
  )
)

Per visualizzare l'endpoint, fare clic su Serve nella barra laterale sinistra dell'interfaccia utente di Databricks. Quando lo stato è Pronto, l'endpoint è pronto per rispondere alle query. Per altre informazioni sulla gestione del modello di Databricks, vedere Databricks Model Serving.

Ottenere un endpoint

È possibile usare Databricks SDK o l'API Python per ottenere i metadati e lo stato di un endpoint.

Databricks SDK - Python

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

API Python

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

Ottenere lo schema di un endpoint

Importante

Questa funzionalità è disponibile in anteprima pubblica.

È possibile usare l'API REST per ottenere lo schema di un endpoint. Per altre informazioni sullo schema dell'endpoint, vedere Ottenere uno schema dell'endpoint di gestione di un modello.

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"

Eseguire query su un endpoint

È possibile usare l'API REST, MLflow Deployments SDK o l'interfaccia utente di gestione per eseguire query su un endpoint.

Il codice seguente illustra come configurare le credenziali e creare il client quando si usa 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")

Nota

Come procedura consigliata per la sicurezza, quando si esegue l'autenticazione con strumenti automatizzati, sistemi, script e app, Databricks consiglia di usare token di accesso personali appartenenti alle entità servizio anziché agli utenti dell'area di lavoro. Per creare token per le entità servizio, vedere Gestire i token per un'entità servizio.

Eseguire query su un endpoint usando le API

Questa sezione include esempi di esecuzione di query su un endpoint usando l'API REST o MLflow Deployments SDK.

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}
      ]}'

Sdk per le distribuzioni mlflow

Importante

L'esempio seguente usa l'API predict() di MLflow Deployments SDK. Questa API è Sperimentale e la definizione dell'API potrebbe cambiare.

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},
        ]
    },
)

Eseguire query su un endpoint usando l'interfaccia utente

È possibile eseguire una query su un endpoint di servizio direttamente dall'interfaccia utente Di servizio. L'interfaccia utente include esempi di codice generati che è possibile usare per eseguire query sull'endpoint.

  1. Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.

  2. Fare clic sull'endpoint su cui eseguire la query.

  3. In alto a destra della schermata fare clic su Endpoint query.

    Pulsante dell'endpoint di query

  4. Nella casella Richiesta digitare il corpo della richiesta in formato JSON.

  5. Fare clic su Invia richiesta.

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

La finestra di dialogo Endpoint query include codice di esempio generato in curl, Python e SQL. Fare clic sulle schede per visualizzare e copiare il codice di esempio.

Finestra di dialogo dell'endpoint di query

Per copiare il codice, fare clic sull'icona di copia in alto a destra della casella di testo.

Pulsante copia nella finestra di dialogo dell'endpoint di query

Aggiornare un endpoint

È possibile aggiornare un endpoint usando l'API REST, Databricks SDK o l'interfaccia utente di gestione.

Aggiornare un endpoint usando le API

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
        }
    ]'

Databricks SDK - 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"
    )
  ]
)

Aggiornare un endpoint usando l'interfaccia utente

Seguire questa procedura per usare l'interfaccia utente di servizio:

  1. Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.
  2. Nella tabella fare clic sul nome dell'endpoint da aggiornare. Viene visualizzata la schermata dell'endpoint.
  3. In alto a destra della schermata fare clic su Modifica endpoint.
  4. Nella finestra di dialogo Modifica endpoint di gestione modificare le impostazioni dell'endpoint in base alle esigenze.
  5. Fare clic su Aggiorna per salvare le modifiche.

aggiornare un endpoint

Eliminare un endpoint

Avviso

Questa azione è irreversibile.

È possibile eliminare un endpoint usando l'API REST, Databricks SDK, l'API Python o l'interfaccia utente di gestione.

Eliminare un endpoint usando le API

API REST

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

Databricks SDK - Python

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

API Python

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

Eliminare un endpoint usando l'interfaccia utente

Seguire questa procedura per eliminare un endpoint usando l'interfaccia utente di gestione:

  1. Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.
  2. Nella tabella fare clic sul nome dell'endpoint da eliminare. Viene visualizzata la schermata dell'endpoint.
  3. In alto a destra nella schermata fare clic sul menu Menu Kebab kebab e selezionare Elimina.

eliminare un endpoint

Monitorare l'integrità di un endpoint

Per informazioni sui log e le metriche disponibili per gli endpoint di gestione delle funzionalità, vedere Monitorare la qualità del modello e l'integrità degli endpoint.

Controllo di accesso

Per informazioni sulle autorizzazioni per gli endpoint di gestione delle funzionalità, vedere Gestire le autorizzazioni per l'endpoint di gestione del modello.

Notebook di esempio

Il notebook seguente illustra come usare Databricks SDK per creare un endpoint di gestione delle funzionalità usando tabelle online di Databricks.

Notebook di esempio di Funzionalità di gestione delle funzionalità con tabelle online

Ottenere il notebook

Il notebook seguente illustra come usare Databricks SDK per creare un endpoint feature serving usando un archivio online di terze parti.

Notebook di esempio di funzionalità di gestione delle funzionalità con CosmosDB

Ottenere il notebook