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.
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.
Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.
Fare clic sull'endpoint su cui eseguire la query.
In alto a destra della schermata fare clic su Endpoint query.
Nella casella Richiesta digitare il corpo della richiesta in formato JSON.
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.
Per copiare il codice, fare clic sull'icona di copia in alto a destra della casella di testo.
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:
- Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.
- Nella tabella fare clic sul nome dell'endpoint da aggiornare. Viene visualizzata la schermata dell'endpoint.
- In alto a destra della schermata fare clic su Modifica endpoint.
- Nella finestra di dialogo Modifica endpoint di gestione modificare le impostazioni dell'endpoint in base alle esigenze.
- Fare clic su Aggiorna per salvare le modifiche.
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:
- Nella barra laterale sinistra dell'area di lavoro di Azure Databricks fare clic su Serve.
- Nella tabella fare clic sul nome dell'endpoint da eliminare. Viene visualizzata la schermata dell'endpoint.
- In alto a destra nella schermata fare clic sul menu kebab e selezionare Elimina.
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
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per