Compartir a través de


Creación de un modelo de IA generativa que atiende puntos de conexión

En este artículo, aprenderá a crear puntos de conexión de servicio de modelos que sirvan a modelos de IA generativa.

Servicio de modelos de Mosaic AI admite los siguientes modelos fundamentales:

  • Modelos de base abiertos de última generación disponibles por las API de Foundation Model. Estos modelos son arquitecturas de modelos fundamentales mantenidos que admiten la inferencia optimizada. Los modelos básicos, como Llama-2-70B-chat, BGE-Large y Mistral-7B se pueden usar de inmediato con los precios de pago por token. Las cargas de trabajo de producción, que usan modelos base o ajustados, se pueden implementar con garantías de rendimiento mediante el rendimiento aprovisionado.
  • Modelos externos. Estos son modelos hospedados fuera de Databricks. Los puntos de conexión que sirven a modelos externos se pueden regular de forma centralizada y los clientes pueden establecer límites de velocidad y control de acceso para ellos. Algunos ejemplos son los modelos de base como GPT-4 de OpenAI, Claude de Anthropic y otros.

Model Serving proporciona las siguientes opciones para la creación de puntos de conexión de servicio de modelos:

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

Para crear puntos de conexión que atienden modelos tradicionales de ML o Python, vea Creación de puntos de conexión de servicio de modelos personalizados.

Requisitos

import mlflow.deployments

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

Creación de un punto de conexión de servicio de modelos básicos

Puede crear un punto de conexión que sirva variantes optimizadas de los modelos de base disponibles mediante el rendimiento aprovisionado de las API de Foundation Model. Consulte Creación del punto de conexión de rendimiento aprovisionado mediante la API de REST.

Para los modelos básicos que están disponibles mediante las API de pago por token de Foundation Model, Databricks proporciona automáticamente puntos de conexión específicos para acceder a los modelos admitidos en el área de trabajo de Databricks. Para acceder a ellos, seleccione la pestaña Servicio de la barra lateral izquierda del área de trabajo. Las API de modelo de Foundation se encuentran en la parte superior de la vista de lista puntos de conexión.

Para consultar estos puntos de conexión, consulte Modelos de base de consultas.

Creación de un modelo externo que atiende el punto de conexión

A continuación se describe cómo crear un punto de conexión que sirva a un modelo de IA generativa que esté disponible mediante modelos externos de Databricks.

Interfaz de usuario de servicio

  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 Modelo externo.
    3. Seleccione el proveedor de modelo que desea usar.
    4. Haga clic en Confirmar
    5. Proporcione el nombre del modelo externo que desea usar. El formulario se actualiza dinámicamente en función de la selección. Consulte el modelos externos disponibles.
    6. Seleccione el tipo de tarea. Las tareas disponibles son chat, finalizaciones e inserciones.
    7. Proporcione los detalles de configuración para acceder al proveedor de modelo seleccionado. Suele ser el secreto que hace referencia al token de acceso personal que quiere que use el punto de conexión para acceder a este modelo.
  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

REST API

Importante

Los parámetros de la API de REST para crear puntos de conexión de servicio que atienden modelos externos se encuentran en Versión preliminar pública.

En el ejemplo siguiente, se crea un punto de conexión que sirve la primera versión del modelo text-embedding-ada-002 proporcionado por OpenAI.

Consulte POST /api/2.0/serving-endpoints para ver los parámetros de configuración del punto de conexión.

{
  "name": "openai_endpoint",
  "config":{
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

Este es un ejemplo de respuesta:

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

SDK de implementaciones de MLflow

A continuación se crea un punto de conexión para incrustaciones con OpenAI text-embedding-ada-002.

Para los puntos de conexión de modelo externos, debe proporcionar claves de API para el proveedor de modelos que desea usar. Vea POST /api/2.0/serving-endpoints en la API de REST para obtener información sobre el esquema de solicitud y respuesta. Para obtener una guía paso a paso, consulte Tutorial: Creación de puntos de conexión de modelo externos para consultar modelos de OpenAI.

También puede crear puntos de conexión para finalizaciones y tareas de chat, tal y como se especifica en el campo task de la sección external_model de la configuración. Consulte Modelos externos en Servicio de modelos de Mosaic A para ver los modelos y proveedores admitidos para cada tarea.


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Actualización de un punto de conexión del modelo de base

Una vez que haya habilitado un punto de conexión de modelo, podrá establecer la configuración de proceso a su gusto. 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. En la interfaz de usuario de servicio, puede cancelar una actualización de configuración en curso si selecciona Cancelar actualización en la parte superior derecha de la página de detalles del punto de conexión. Esta funcionalidad solo está disponible en la interfaz de usuario de servicio.

Cuando un external_model está presente en una configuración de punto de conexión, la lista de entidades atendidas solo puede tener un objeto served_entity. Los puntos de conexión existentes con un external_model no se pueden actualizar para que ya no tengan external_model. Si el punto de conexión se crea sin external_model, no puede actualizarlo para agregar un external_model.

REST API

Para actualizar el punto de conexión del modelo de base, vea la APl de REST de la documentación de configuración de actualización para obtener detalles del esquema de solicitud y respuesta.

{
  "name": "openai_endpoint",
  "served_entities":[
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

SDK de implementaciones de MLflow

Para actualizar el punto de conexión del modelo de base, vea la APl de REST de la documentación de configuración de actualización para obtener detalles del esquema de solicitud y respuesta.

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}

Recursos adicionales