Creare endpoint di gestione dei modelli personalizzati
Questo articolo mostra come creare endpoint di gestione dei modelli che gestiscono modelli personalizzati usando Databricks Model Serving.
La gestione dei modelli offre le opzioni seguenti per la creazione di endpoint:
- Interfaccia utente di servizio
- REST API
- MLflow Deployments SDK
Per la creazione di endpoint che servono modelli di intelligenza artificiale generativi, vedere Creare un modello di base che gestisce gli endpoint.
Requisiti
- L’area di lavoro si trova in una regione supportata.
- Se si usano librerie o librerie personalizzate da un server mirror privato con il modello, consultare la sezione Usare librerie Python personalizzate con Model Serving prima di creare l'endpoint del modello.
- Per creare endpoint con MLflow Deployments SDK, è necessario installare il client di distribuzione MLflow. Per installarlo, eseguire:
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
Controllo di accesso
Per informazioni sulle opzioni di controllo di accesso per la gestione degli endpoint del modello, consultare la sezione Gestire le autorizzazioni per l'endpoint di gestione del modello.
È anche possibile aggiungere variabili di ambiente per archiviare le credenziali per la gestione del modello. Vedere Configurare l'accesso alle risorse dagli endpoint di gestione dei modelli
Creare un endpoint
Serving interfaccia utente
È possibile creare un endpoint per la gestione del modello con l'interfaccia utente Di servizio .
Fare clic su Serve nella barra laterale per visualizzare l'interfaccia utente di servizio.
Fare click su Crea l'endpoint di servizio.
Per i modelli registrati nel Registro modelli dell'area di lavoro o modelli nel Catalogo Unity:
Nel campo Nome immettere un nome per il calendario.
Nella sezione Entità servite
- Fare clic nel campo entità per aprire il modulo Seleziona entità servita .
- Selezionare il tipo di modello che si desidera servire. Il modulo viene aggiornato dinamicamente in base alla selezione.
- Selezionare il modello e la versione del modello da servire.
- Selezionare la percentuale di traffico da instradare al modello servito.
- Selezionare la capacità di calcolo da utilizzare. È possibile usare le risorse di calcolo della CPU o della GPU per i carichi di lavoro. Per altre informazioni sui calcoli GPU disponibili, consultare la sezione Tipi di carico di lavoro GPU.
- Selezionare la dimensione del calcolo da utilizzare. È possibile usare le risorse di calcolo della CPU o della GPU per i carichi di lavoro. Per altre informazioni sui calcoli GPU disponibili, consultare la sezione Tipi di carico di lavoro GPU.
- In Compute Scale-out, selezionare le dimensioni del compute scale-out corrispondente al numero di richieste che questo modello distribuito può elaborare contemporaneamente. Questo numero deve essere approssimativamente uguale al tempo di esecuzione del modello QPS x.
- Le dimensioni disponibili sono Piccole per 0-4 richieste, richieste medio 8-16 e Large per 16-64 richieste.
- Specificare se l’endpoint deve essere ridimensionato su zero quando non è in uso.
Cliccare su Crea. La pagina “Gestione degli endpoint” viene visualizzata con lo Stato dell’endpoint di servizio visualizzato come Non pronto.
REST API
È possibile creare endpoint usando l'API REST. Vedere post /api/2.0/serving-endpoints per i parametri di configurazione degli endpoint.
Nell'esempio seguente viene creato un endpoint che gestisce la prima versione del modello di ads1
registrato nel Registro modelli di Catalogo Unity. Per specificare un modello da Unity Catalog, specificare il nome completo del modello, incluso il catalogo padre e lo schema, ad esempio, catalog.schema.example-model
.
POST /api/2.0/serving-endpoints
{
"name": "uc-model-endpoint",
"config":
{
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.my-ads-model",
"entity_version": "3",
"workload_size": "Small",
"scale_to_zero_enabled": true
},
{
"entity_name": "catalog.schema.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"
}
]
}
Di seguito è riportato un esempio di risposta. Lo stato dell'endpoint config_update
è NOT_UPDATING
e il modello servito è in READY
uno stato.
{
"name": "uc-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": "catalog.schema.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": "catalog.schema.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
}
MLflow Deployments SDK
le distribuzioni di MLflow forniscono un'API per le attività di creazione, aggiornamento ed eliminazione. Le API per queste attività accettano gli stessi parametri dell'API REST per la gestione degli endpoint. Vedere post /api/2.0/serving-endpoints per i parametri di configurazione degli endpoint.
L'esempio seguente crea un endpoint che gestisce la terza versione del modello di my-ads-model
registrato nel Registro modelli di Unity Catalog. È necessario specificare il nome completo del modello, incluso il catalogo padre e lo schema, ad esempio, catalog.schema.example-model
.
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="unity-catalog-model-endpoint",
config={
"served_entities": [
{
"name": "ads-entity"
"entity_name": "catalog.schema.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
}
]
}
}
)
È anche possibile:
Configurare l'endpoint per l'ottimizzazione della route.
Abilitare le tabelle di inferenza per acquisire automaticamente le richieste in ingresso e le risposte in uscita agli endpoint di gestione del modello.
Tipi di carico di lavoro GPU
La distribuzione GPU è compatibile con le versioni del pacchetto seguenti:
- Pytorch 1.13.0 - 2.0.1
- TensorFlow 2.5.0 - 2.13.0
- MLflow 2.4.0 e versioni successive
Per distribuire i modelli utilizzando GPU, includere il campo workload_type
nella configurazione dell'endpoint durante la creazione dell'endpoint o come aggiornamento della configurazione dell'endpoint utilizzando l'API. Per configurare l'endpoint per i carichi di lavoro GPU con l'interfaccia utente Serving, selezionare il tipo di GPU desiderato dall'elenco a discesa del tipo di calcolo .
{
"served_entities": [{
"entity_name": "catalog.schema.ads1",
"entity_version": "2",
"workload_type": "GPU_LARGE",
"workload_size": "Small",
"scale_to_zero_enabled": false,
}]
}
La tabella seguente riepiloga i tipi di carico di lavoro GPU disponibili supportati.
Tipo di carico di lavoro GPU | Istanze GPU | Memoria GPU |
---|---|---|
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 GB |
Modificare un endpoint modello personalizzato
Dopo aver abilitato un endpoint modello personalizzato, è possibile aggiornare la configurazione di calcolo in base alle esigenze. Questa configurazione è particolarmente utile se sono necessarie risorse aggiuntive per il modello. Le dimensioni del carico di lavoro e la configurazione di calcolo svolgono un ruolo chiave nelle risorse allocate per gestire il modello.
Fino a quando la nuova configurazione non è pronta, la configurazione precedente continua a gestire il traffico di stima. Mentre è in corso un aggiornamento, non è possibile eseguire un altro aggiornamento. Tuttavia, è possibile annullare un aggiornamento in corso dall'interfaccia utente Di servizio.
Serving interfaccia utente
Dopo aver abilitato un endpoint del modello, selezionare Modifica endpoint per modificare la configurazione di calcolo dell'endpoint.
Puoi eseguire quanto segue:
- Scegliere tra alcune dimensioni del carico di lavoro e la scalabilità automatica viene configurata automaticamente entro le dimensioni del carico di lavoro.
- Specificare se l'endpoint deve essere ridotto a zero quando non è in uso.
- Modificare la percentuale di traffico per instradare al modello servito.
È possibile annullare un aggiornamento della configurazione in corso selezionando Annulla aggiornamento nella parte superiore destra della pagina dei dettagli dell'endpoint. Questa funzionalità è disponibile solo nell'interfaccia utente Di servizio.
REST API
Di seguito è riportato un esempio di aggiornamento della configurazione dell'endpoint usando l'API REST. Consultare la sezione 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
}
]
}
}
}
MLflow Deployments SDK
MLflow Deployments SDK usa gli stessi parametri dell'API REST. Per informazioni dettagliate sullo schema di richiesta e risposta, vedere PUT /api/2.0/serving-endpoints/{name}/config.
L'esempio di codice seguente usa un modello dal registro dei modelli del catalogo 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
}
]
}
}
)
Assegnazione di punteggi a un endpoint del modello
Per assegnare un punteggio al modello, inviare richieste all’endpoint di gestione del modello.
- Consultare Eseguire query sugli endpoint per i modelli personalizzati.
- Consulta Modelli di base delle query.
Risorse aggiuntive
- Creare e gestire gli endpoint di gestione dei modelli.
- Modelli esterni in Mosaic AI Model Serving.
- Se si preferisce usare Python, è possibile usare Databricks sdk in tempo reale.
Esempi di notebook
I notebook seguenti includono modelli registrati di Databricks diversi che è possibile usare per iniziare a usare i modelli che gestiscono gli endpoint. Per altri esempi, vedere Esercitazione: Distribuire e interrogare un modello personalizzato.
Gli esempi di modello possono essere importati nell’area di lavoro seguendo le istruzioni riportate in Importare un notebook. Dopo aver scelto e creato un modello da uno degli esempi, registrarlo in Unity Cataloge quindi seguire i flusso di lavoro dell'interfaccia utente passaggi per la gestione del modello.
Eseguire il training e registrare un modello scikit-learn per il notebook di gestione dei modelli
Prendere un notebook
Eseguire il training e registrare un modello HuggingFace per il notebook di gestione dei modelli
Prendi taccuino