Condividi tramite


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 Distribuire ed eseguire query su un endpoint di gestione delle funzionalità.

Quando si usa Mosaic AI Model Serving per gestire un modello creato 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. Comprende anche i seguenti vantaggi:

  • 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 riducendo 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 la versione databricks-feature-engineering 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 la versione databricks-sdk 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 Databricks
  • REST API
  • API Python
  • SDK Databricks

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

Importante

Come buona prassi di sicurezza per scenari di produzione, Databricks consiglia di utilizzare token OAuth da macchina a macchina per l'autenticazione durante la 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, consultare Accesso autenticato per le risorse di Azure Databricks.

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. Si veda Usare tabelle online per la gestione delle funzionalità in tempo reale o Store online di terze parti.

È necessario usare il pacchetto databricks-feature-engineering 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",
    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,
)

Creare un endpoint

FeatureSpec definisce 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.

Nota

Per i carichi di lavoro sensibili alla latenza o che richiedono query elevate al secondo, Model Serving offre l'ottimizzazione della route sugli endpoint personalizzati che servono i modelli, vedere Configurare l'ottimizzazione della route per la gestione degli endpoint.

REST API

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

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

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 Servizio nella barra laterale sinistra dell'interfaccia utente di Databricks. Quando lo stato è Pronto, l'endpoint è pronto per rispondere alle query. Per altre informazioni su Mosaic AI Model Serving, vedere Mosaic AI Model Serving.

Ottenere un endpoint

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

SDK Databricks - 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

È 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 una 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.

REST API

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

MLflow Deployments SDK

Importante

Il seguente esempio usa l'API predict() di MLflow Implementazioni 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 Databricks fare clic su Servizio.

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

  3. In alto a destra della schermata fare clic su Query per endpoint.

    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 Query per endpoint include codice di esempio generato in curl, Python e SQL. Fare clic sulla scheda 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

REST API

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

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

Aggiornare un endpoint usando l'interfaccia utente

Per usare l’interfaccia utente di servizio, seguire questa procedura:

  1. Nella barra laterale sinistra dell'area di lavoro di Databricks fare clic su Servizio.
  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

REST API

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

SDK Databricks - 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 Databricks fare clic su Servizio.
  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

Questo notebook 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