Leggere in inglese

Condividi tramite


Gestire gli endpoint di servizio del modello

Questo articolo descrive come gestire gli endpoint di gestione del modello usando l'interfaccia utente di servizio e l'API REST. Consulta Servire endpoint nella guida di riferimento all'API REST.

Per creare endpoint di gestione del modello, usare una delle opzioni seguenti:

Recupera lo stato dell'endpoint del modello

Nell'interfaccia utente di gestione è possibile controllare lo stato di un endpoint dall'indicatore di stato dell'endpoint di servizio nella parte superiore della pagina dei dettagli dell'endpoint.

Controllare lo stato e i dettagli di un endpoint a livello di codice usando l'API REST o MLflow Deployments SDK:

REST API

GET /api/2.0/serving-endpoints/{name}

Nell'esempio seguente viene creato un endpoint che gestisce la prima versione del modello di my-ads-model registrato nel Registro modelli di Catalogo Unity. È necessario specificare il nome completo del modello, incluso il catalogo padre e lo schema, ad esempio, catalog.schema.example-model.

Nella risposta di esempio seguente il state.ready campo è "READY", il che significa che l'endpoint è pronto per ricevere il traffico. Il campo state.update_state è NOT_UPDATING e pending_config non viene più restituito perché l'aggiornamento è stato completato correttamente.

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Arrestare un endpoint di gestione di un modello

È possibile arrestare temporaneamente un endpoint di gestione di un modello e avviarlo in un secondo momento. Quando un endpoint viene arrestato, le risorse fornite vengono arrestate e l'endpoint non è in grado di gestire le query finché non viene avviato di nuovo. Solo gli endpoint che gestiscono modelli personalizzati, non sono ottimizzati per il percorso e non hanno aggiornamenti in corso possono essere arrestati. Gli endpoint arrestati non vengono conteggiati rispetto alla quota di risorse. Le query inviate a un endpoint arrestato restituiscono un errore 400.

È possibile arrestare un endpoint dalla pagina dei dettagli dell'endpoint nell'interfaccia Serving.

  1. Fare clic sull'endpoint da terminare.
  2. Fare clic su Arresta nell'angolo superiore destro.

In alternativa, è possibile arrestare un endpoint di gestione a livello di codice usando l'API REST come indicato di seguito:

POST /api/2.0/serving-endpoints/{name}/config:stop

Quando sei pronto ad avviare un endpoint di servizio di un modello arrestato, puoi farlo dalla pagina dei dettagli dell'endpoint nell'interfaccia di servizio.

  1. Fai clic sull'endpoint che desideri avviare.
  2. Fare clic su Start nell'angolo superiore destro.

In alternativa, è possibile avviare un endpoint di gestione interrotto a livello di codice usando l'API REST come indicato di seguito:

POST /api/2.0/serving-endpoints/{name}/config:start

Eliminare un endpoint di gestione di un modello

Per disabilitare la gestione per un modello, è possibile eliminare l'endpoint su cui è disponibile.

È possibile eliminare un endpoint dalla pagina dei dettagli dell'endpoint nell'interfaccia Serving UI.

  1. Fare clic su Serve sulla barra laterale.
  2. Fare clic sull'endpoint da eliminare.
  3. Fare clic sul menu kebab nella parte superiore e selezionare Elimina.

In alternativa, è possibile eliminare un endpoint di gestione a livello di codice usando l'API REST o MLflow Deployments SDK

REST API

DELETE /api/2.0/serving-endpoints/{name}

MLflow Deployments SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

Eseguire il debug dell'endpoint di gestione del modello

Per eseguire il debug di eventuali problemi con l'endpoint, è possibile recuperare:

  • Log di compilazione dei container del server del modello
  • Log del server modello

Questi log sono accessibili anche dall'interfaccia Endpoints nella scheda Log.

Per i log di compilazione di un modello servito, puoi usare la richiesta seguente. Per altre informazioni, vedere La guida al debug per La gestione dei modelli.


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  “config_version”: 1  // optional
}

Per i log del server modello per un modello di servizio, è possibile usare la richiesta seguente:


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  “config_version”: 1  // optional
}

Gestire le autorizzazioni per l'endpoint di gestione del modello

Per modificare le autorizzazioni, è necessario disporre almeno dell'autorizzazione CAN MANAGE per un endpoint di servizio. Per altre informazioni sui livelli di autorizzazione, vedere Gestione degli ACL degli endpoint.

Ottenere l'elenco delle autorizzazioni sull'endpoint di servizio.

databricks permissions get servingendpoints <endpoint-id>

Concedere all'utente jsmith@example.com l'autorizzazione CAN QUERY per l'endpoint di gestione.

databricks permissions update servingendpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

È anche possibile modificare le autorizzazioni dell'endpoint di gestione usando l'API Autorizzazioni.

Aggiungere un criterio di budget serverless per un endpoint di gestione del modello

Importante

Questa funzionalità è in fase di Anteprima Pubblica e non è disponibile per gli endpoint che servono modelli esterni.

Le politiche di budget serverless consentono alla vostra organizzazione di applicare tag personalizzati all'utilizzo serverless per un'attribuzione dettagliata della fatturazione. Se l'area di lavoro usa criteri di budget serverless per attribuire l'utilizzo serverless, è possibile aggiungere criteri di budget serverless agli endpoint di gestione del modello. Consulta Utilizzo degli attributi con le politiche di budget serverless.

Durante la creazione dell'endpoint di gestione del modello, è possibile selezionare i criteri di budget serverless dell'endpoint dal menu Criteri budget nell'interfaccia utente Di servizio. Se ti vengono assegnati dei criteri di budget serverless, tutti gli endpoint che crei utilizzeranno i criteri assegnati, anche se non selezioni un criterio dal menu Criteri di budget.

Aggiungere criteri di budget serverless durante la creazione di endpoint di servizio del modello tramite l'interfaccia utente di Serving.

Se si dispone di autorizzazioni MANAGE per un endpoint esistente, è possibile modificare e aggiungere criteri di budget serverless a tale endpoint dalla pagina dei dettagli dell'endpoint nell'interfaccia utente.

Modificare la politica di budget serverless in un endpoint esistente che gestisce un modello usando l'interfaccia utente di Serving.

Nota

Se ti è stato assegnato un criterio di budget serverless, i tuoi endpoint esistenti non vengono contrassegnati automaticamente con il tuo criterio. È necessario aggiornare manualmente gli endpoint esistenti se si desidera associarli a una policy di budget serverless.

Ottenere uno schema dell'endpoint di servizio di un modello

Importante

Il supporto per la gestione degli schemi di query degli endpoint è disponibile in anteprima pubblica. Questa funzionalità è disponibile nelle aree di gestione dei modelli.

Uno schema di query dell'endpoint di servizio è una descrizione formale dell'endpoint di servizio usando la specifica OpenAPI standard in formato JSON. Contiene informazioni sull'endpoint, inclusi il percorso dell'endpoint, i dettagli per l'esecuzione di query sull'endpoint, ad esempio il formato del corpo della richiesta e della risposta e il tipo di dati per ogni campo. Queste informazioni possono essere utili per scenari di riproducibilità o quando sono necessarie informazioni sull'endpoint, ma non si è l'autore o il proprietario dell'endpoint originale.

Per ottenere lo schema dell'endpoint di gestione del modello, il modello servito deve avere una firma del modello registrata e l'endpoint deve trovarsi in uno stato READY.

Gli esempi seguenti illustrano come ottenere a livello di codice lo schema dell'endpoint di gestione del modello usando l'API REST. Per informazioni sugli schemi degli endpoint per la gestione delle funzionalità, vedere Informazioni sulla gestione delle funzionalità di Databricks.

Lo schema restituito dall'API è nel formato di un oggetto JSON che segue la specifica OpenAPI.


ACCESS_TOKEN="<endpoint-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"

Dettagli della risposta dello Schema

La risposta è una specifica OpenAPI in formato JSON, in genere inclusi campi come openapi, infoservers e paths. Poiché la risposta dello schema è un oggetto JSON, è possibile analizzarla usando linguaggi di programmazione comuni e generare codice client dalla specifica usando strumenti di terze parti. È anche possibile visualizzare la specifica OpenAPI usando strumenti di terze parti come L'editor Swagger.

I campi principali della risposta includono:

  • Il info.title campo mostra il nome dell'endpoint di gestione.
  • Il servers campo contiene sempre un oggetto, in genere il url campo che è l'URL di base dell'endpoint.
  • L'oggetto paths nella risposta contiene tutti i percorsi supportati per un endpoint. Le chiavi nell'oggetto sono l'URL del percorso. Ognuno path può supportare più formati di input. Questi input sono elencati nel oneOf campo .

Di seguito è riportata una risposta dello schema di endpoint di esempio:

{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint" }],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": ["int_col", "float_col", "string_col"]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": ["int_col", "float_col", "string_col"],
                        "data": [
                          [3, 10.4, "abc"],
                          [2, 20.4, "xyz"]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": ["int_col", "float_col", "string_col"],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}