Condividi tramite


Gestire gli endpoint di gestione del modello

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

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

Ottenere 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.

È possibile usare 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}

L'esempio seguente crea un endpoint che gestisce la prima versione del my-ads-model modello registrato nel registro dei 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 state.update_state campo è 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 di cui è stato effettuato il provisioning 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 la route 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 utente di gestione .

  1. Fare clic sull'endpoint da arrestare.
  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 si è pronti per avviare un endpoint di gestione di un modello arrestato, è possibile farlo dalla pagina dei dettagli dell'endpoint nell'interfaccia utente di gestione .

  1. Fare clic sull'endpoint da 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 utente Di servizio .

  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 contenitori del server del modello
  • Log del server modello

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

Per i log di compilazione per un modello servito, è possibile 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 nell'endpoint di gestione.

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.

Ottenere uno schema dell'endpoint di gestione 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 gestione è 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 READY stato.

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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}