Condividi tramite


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 mostrano modelli di intelligenza artificiale generativi, consultare la sezione Creare un modello di intelligenza artificiale generativo 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 .

  1. Fare clic su Serve nella barra laterale per visualizzare l'interfaccia utente di servizio.

  2. Fare click su Crea l'endpoint di servizio.

    Costi nella gestione del modello di Databricks

Per i modelli registrati nel Registro modelli dell'area di lavoro o nei modelli nel catalogo unity:

  1. Nel campo Nome immettere un nome per il calendario.

  2. Nella sezione Entità servite

    1. Fare clic su campo Entità per aprire il modulo Seleziona entità servita.
    2. Selezionare il tipo di modello da usare. Il modulo viene aggiornato dinamicamente in base alla selezione.
    3. Selezionare il modello e la versione del modello da usare.
    4. Selezionare la percentuale di traffico da instradare al modello servito.
    5. Selezionare le dimensioni da usare. È 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.
    6. Selezionare le dimensioni da usare. È 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.
    7. In Scalabilità di calcolo selezionare le dimensioni della scalabilità orizzontale di calcolo corrispondente al numero di richieste che questo modello servito può elaborare contemporaneamente. Questo numero deve essere approssimativamente uguale al tempo di esecuzione del modello QPS x.
      1. Le dimensioni disponibili sono Piccole per 0-4 richieste, richieste medio 8-16 e Large per 16-64 richieste.
    8. Specificare se l’endpoint deve essere ridimensionato su zero quando non è in uso.
  3. Cliccare su Crea. La pagina “Gestione degli endpoint” viene visualizzata con lo Stato dell’endpoint di servizio visualizzato come Non pronto.

    Creare un endpoint di gestione dei modelli

REST API

È possibile creare endpoint usando l'API REST. Consultare la sezione 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 ads1 modello registrata nel Registro di sistema del modello. Per specificare un modello dal catalogo unity, 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": "workspace-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "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": "workspace-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": "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": "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 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. Consultare la sezione POST /api/2.0/serving-endpoints per i parametri di configurazione degli endpoint.


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "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:

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 usando GPU, includere il workload_type campo nella configurazione dell'endpoint durante la creazione dell'endpoint o come aggiornamento della configurazione dell'endpoint usando l'API. Per configurare l'endpoint per i carichi di lavoro GPU con l'interfaccia utente Di servizio, selezionare il tipo di GPU desiderato dall'elenco a discesa Tipo di calcolo.

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_LARGE",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

Nella tabella seguente vengono riepilogati i tipi disponibili.

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, consultare la sezione PUT /api/2.0/serving-endpoints/{name}/config per i dettagli dello schema di richiesta e risposta.

L’esempio di codice seguente utilizza 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.

Risorse aggiuntive

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.

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 nel catalogo unity e quindi seguire i passaggi del flusso di lavoro dell'interfaccia utente per la gestione del modello.

Eseguire il training e registrare un modello scikit-learn per il notebook di gestione dei modelli

Ottenere il notebook

Eseguire il training e registrare un modello HuggingFace per il notebook di gestione dei modelli

Ottenere il notebook