Compartir a través de


Administración de puntos de conexión de servicio de modelos

En este artículo se describe cómo administrar los puntos de conexión de servicio de modelos mediante la API de REST y la interfaz de usuario de servicio. Consulte Servicio de puntos de conexión en la referencia de la API de REST.

Para crear puntos de conexión de servicio de modelos, use una de las siguientes opciones:

Obtención del estado del punto de conexión del modelo

En la interfaz de usuario de servicio, puede comprobar el estado de un punto de conexión desde el indicador estado del punto de conexión de servicio en la parte superior de la página de detalles del punto de conexión.

Puede comprobar el estado y los detalles de un punto de conexión mediante programación con la API de REST o el SDK de implementaciones de MLflow.

API de REST

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

En el ejemplo siguiente se obtienen los detalles de un punto de conexión que sirve la primera versión del modelo ads1 que se registra en el registro de modelos. Para especificar un modelo del catálogo de Unity, proporcione el nombre completo del modelo, incluido el catálogo primario y el esquema, como, catalog.schema.example-model.

En la siguiente respuesta de ejemplo, el state.ready campo es "READY", lo que significa que el punto de conexión está listo para recibir tráfico. El state.update_state campo es NOT_UPDATING y pending_config ya no se devuelve porque la actualización finalizó correctamente.

{
  "name": "workspace-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads1-1",
        "entity_name": "ads1",
        "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": "ads1-1",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

SDK de implementaciones de Mlflow

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

Eliminar un punto final de servicio de modelos

Para deshabilitar el servicio de un modelo, puede eliminar el punto de conexión en el que se sirve.

Puede eliminar un punto de conexión de la página de detalles del punto de conexión en la interfaz de usuario de servicio.

  1. Click on Serve in the sidebar.
  2. Haga clic en el punto de conexión que desea eliminar.
  3. Haga clic en el menú kebab de la parte superior y seleccione Eliminar.

Como alternativa, puede eliminar un punto de conexión de servicio mediante programación con la API de REST o el SDK de implementaciones de MLflow.

API de REST

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

SDK de implementaciones de Mlflow

from mlflow.deployments import get_deploy_client

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

Depuración del punto de conexión de servicio del modelo

Para depurar cualquier problema con el punto de conexión, puede capturar:

  • Registros de compilación del contenedor del servidor de modelos
  • Registros del servidor de modelos

Estos registros también son accesibles desde la interfaz de usuario de puntos de conexión de la pestaña Registros.

Para los registros de compilación de un modelo servido, puede usar la siguiente solicitud:


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

Para los registros del servidor de modelos para un modelo de servicio, puede usar la siguiente solicitud:


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

{
  “config_version”: 1  // optional
}

Administrar permisos en el punto de conexión de servicio del modelo

Debe tener al menos el permiso CAN MANAGE en un punto de conexión de servicio para modificar los permisos. Para obtener más información sobre los niveles de permisos, vea ACL de punto de conexión de servicio.

Obtenga la lista de permisos en el punto de conexión de servicio.

databricks permissions get servingendpoints <endpoint-id>

Conceda al usuario jsmith@example.com el permiso CAN QUERY en el punto de conexión de servicio.

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

También puede modificar los permisos de punto de conexión de servicio mediante la API de permisos.

Obtener un esquema de punto de conexión de servicio de modelo

Importante

La compatibilidad con el servicio de esquemas de consulta de punto de conexión se encuentra en versión preliminar pública. Esta funcionalidad está disponible en Regiones de servicio de modelos.

Un esquema de consulta de punto de conexión de servicio es una descripción formal del punto de conexión de servicio mediante la especificación OpenAPI estándar en formato JSON. Contiene información sobre el punto de conexión, incluida la ruta de acceso del punto de conexión, detalles para consultar el punto de conexión, como el formato de cuerpo de la solicitud y la respuesta, y el tipo de datos para cada campo. Esta información puede ser útil para escenarios de reproducibilidad o cuando necesita información sobre el punto de conexión, pero no es el creador o propietario del punto de conexión original.

Para obtener el esquema del punto de conexión de servicio del modelo, el modelo servido debe tener registrada una firma de modelo y el punto de conexión debe estar en un estado READY.

En los ejemplos siguientes se muestra cómo obtener mediante programación el esquema de punto de conexión de servicio del modelo mediante la API de REST. Para ver los esquemas de punto de conexión de servicio de características, vea ¿Qué es Databricks Feature Serving?.

El esquema devuelto por la API tiene el formato de un objeto JSON que sigue la especificación 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"

Detalles de la respuesta del esquema

La respuesta es una especificación de OpenAPI en formato JSON, que normalmente incluye campos como openapi, info, servers y paths. Dado que la respuesta del esquema es un objeto JSON, puede analizarla mediante lenguajes de programación comunes y generar código de cliente a partir de la especificación mediante herramientas de terceros. También puede visualizar la especificación de OpenAPI mediante herramientas de terceros como Swagger Editor.

Entre los campos principales de la respuesta se incluyen:

  • El campo info.title muestra el nombre del punto de conexión de servicio.
  • El campo servers siempre contiene un objeto, normalmente el campo url que es la dirección URL base del punto de conexión.
  • El objeto paths de la respuesta contiene todas las rutas de acceso admitidas para un punto de conexión. Las claves del objeto son la dirección URL de la ruta de acceso. Cada path puede admitir varios formatos de entradas. Estas entradas se muestran en el campo oneOf.

A continuación se muestra una respuesta de esquema de punto de conexión de ejemplo:


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