Creación de puntos de conexión de servicio de modelos personalizados

En este artículo se describe cómo crear puntos de conexión de servicio de modelos que sirven modelos personalizados mediante Databricks Servicio de Modelos.

El servicio de modelos proporciona las siguientes opciones para atender la creación de puntos de conexión:

  • Interfaz de usuario de servicio
  • REST API
  • SDK de implementaciones de MLflow

Para crear puntos de conexión que sirvan modelos de base de IA generativa, consulte Creación de un modelo de base que atiende puntos de conexión.

Requisitos

  • Su área de trabajo debe estar en una región admitida.
  • Si usa bibliotecas personalizadas o bibliotecas desde un servidor reflejado privado con el modelo, consulte Uso de bibliotecas de Python personalizadas con Servicio de modelos antes de crear el punto de conexión del modelo.
  • Para crear puntos de conexión mediante el SDK de implementaciones de MLflow, debe instalar el cliente de implementación de MLflow. Para instalarlo, ejecute:
import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Control de acceso

Para comprender las opciones de control de acceso para los puntos de conexión de servicio de modelos para la administración de puntos de conexión, vea Administración de permisos en el modelo que atiende el punto de conexión.

También puede agregar variables de entorno para almacenar las credenciales de servicio del modelo. Vea Configuración del acceso a los recursos desde los puntos de conexión de servicio del modelo

Crear un punto de conexión

Servicio de la interfaz de usuario

Puede crear un punto de conexión para el modelo que sirve con la interfaz de usuario de servicio.

  1. Haga clic en Servicio en la barra lateral para mostrar la interfaz de usuario de servicio.

  2. Haga clic en Crear punto de conexión de servicio.

    Panel de servicio de modelos en la interfaz de usuario de Databricks

Para modelos registrados en el registro de modelos del área de trabajo o modelos en Unity Catalog:

  1. En el campo Nombre, proporcione un nombre para el punto de conexión.

  2. En la sección Entidades atendidas

    1. Haga clic en el campo Entidad para abrir el formulario Seleccionar entidad atendida.
    2. Seleccione el tipo de modelo que desea servir. El formulario se actualiza dinámicamente en función de la selección.
    3. Seleccione el modelo y la versión del modelo que desea servir.
    4. Seleccione el porcentaje de tráfico que se va a enrutar al modelo servido.
    5. Seleccione el tamaño de proceso que se va a usar. Puede usar los procesos de CPU o GPU para las cargas de trabajo. Consulte Tipos de carga de trabajo de GPU para obtener más información sobre los procesos de GPU disponibles.
    6. En Escalabilidad horizontal de procesos, seleccione el tamaño de la escalabilidad horizontal de procesos que se corresponda con el número de solicitudes que puede procesar este modelo servido al mismo tiempo. Este número debe ser aproximadamente igual al tiempo de ejecución del modelo QPS x.
      1. Los tamaños disponibles son Pequeño para 0 a 4 solicitudes, Medio para 8 a 16 solicitudes y Grande para 16 a 64 solicitudes.
    7. Especifique si el punto de conexión debe escalar a cero cuando no esté en uso.
  3. Haga clic en Crear. La página Puntos de conexión de servicio aparece con el estado Punto de conexión de servicio que se muestra como No listo.

    Creación de un punto de conexión para servir modelos

API de REST

Puede crear puntos de conexión mediante la API de REST. Consulte POST /api/2.0/serving-endpoints para ver los parámetros de configuración del punto de conexión.

El siguiente ejemplo crea un punto final 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.


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

Este es un ejemplo de respuesta: El estado del punto de config_update conexión es NOT_UPDATING y el modelo servido está en un READY estado.

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

SDK de implementaciones de Mlflow

Las implementaciones de MLflow proporcionan una API para crear, actualizar y eliminar tareas. Las API de estas tareas aceptan los mismos parámetros que la API de REST para atender los puntos de conexión. Consulte POST /api/2.0/serving-endpoints para ver los parámetros de configuración del punto de conexión.


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
                }
            ]
        }
    }
)

También puede:

Tipos de carga de trabajo de la GPU

La implementación de GPU es compatible con las siguientes versiones de paquete:

  • Pytorch 1.13.0 - 2.0.1
  • Tensorflow 2.5.0 - 2.13.0
  • MLflow 2.4.0 y posterior

Para implementar sus modelos utilizando GPU incluya el campo workload_type en la configuración de su punto de conexión durante la creación del punto de conexión o como una actualización de la configuración del punto de conexión utilizando la API. Para configurar su punto de conexión para cargas de trabajo de GPU con la interfaz de usuario de Servidor, seleccione el tipo de GPU deseado en el menú desplegable Tipo de proceso.

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

En la tabla siguiente se resumen los tipos de carga de trabajo de GPU disponibles admitidos.

Tipo de carga de trabajo de la GPU Instancia de GPU Memoria de GPU
GPU_SMALL 1xT4 16 GB
GPU_LARGE 1xA100 80GB
GPU_LARGE_2 2xA100 160GB

Modificar un punto de conexión de modelo personalizado

Después de habilitar un punto de conexión de modelo personalizado, puede actualizar la configuración de proceso según sea necesario. Esta configuración resulta especialmente útil si se necesita usar recursos adicionales en el modelo. El tamaño de la carga de trabajo y la configuración de proceso desempeñan un papel clave a la hora de decidir qué recursos se asignan para servir el modelo.

Hasta que la nueva configuración esté lista, la configuración anterior sigue atendiendo el tráfico de predicción. Aunque hay una actualización en curso, no se puede realizar otra actualización.

Servicio de la interfaz de usuario

Después de habilitar un punto de conexión de modelo, seleccione Editar punto de conexión para modificar la configuración de proceso del punto de conexión.

Puede hacer lo siguiente:

  • Elija entre algunos tamaños de carga de trabajo y el escalado automático se configura automáticamente dentro del tamaño de la carga de trabajo.
  • Especifique si el punto de conexión debe reducir verticalmente a cero cuando no esté en uso.
  • Modifique el porcentaje de tráfico para enrutar al modelo servido.

API de REST

A continuación se muestra un ejemplo de actualización de configuración de punto de conexión mediante la API de REST. Consulte PUT /api/2.0/serving-endpoints/{name}/config.


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "workspace-model-endpoint",
  "config":{
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "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
        }
      ]
    }
  }
}

SDK de implementaciones de Mlflow

El SDK de implementaciones de MLflow usa los mismos parámetros que la API REST, consulte PUT /api/2.0/serving-endpoints/{name}/config para obtener detalles del esquema de solicitud y respuesta.

En el ejemplo de código siguiente se usa un modelo del registro de modelos del catálogo de 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
            }
        ]
    }
  }
)

También puede:

Puntuación de un punto de conexión de modelo

Para puntuar el modelo, envíe solicitudes al punto de conexión de servicio del modelo.

Recursos adicionales

Ejemplos de cuadernos

Los cuadernos siguientes incluyen diferentes modelos registrados de Databricks que puede usar para ponerse en marcha con los puntos de conexión del servicio de modelos.

Los ejemplos de modelo se pueden importar en el área de trabajo siguiendo las instrucciones de Importación de un cuaderno. Después de elegir y crear un modelo a partir de uno de los ejemplos, regístrelo en el Registro de modelos de MLflow y, a continuación, siga los pasos de flujo de trabajo de la interfaz de usuario para el servicio de modelos.

Entrenamiento y registro de un modelo scikit-learn para el cuaderno de servicio de modelos

Obtener el cuaderno

Entrenamiento y registro de un modelo de HuggingFace para el cuaderno de servicio de modelos

Obtener el cuaderno