Puntuación en tiempo real de los modelos de Machine Learning en Python

Container Registry
Kubernetes Service
Machine Learning
Monitor
Virtual Machines

Esta arquitectura de referencia muestra cómo implementar modelos de Python como servicios web para realizar predicciones en tiempo real mediante Azure Kubernetes Service. Los modelos de Machine Learning implementados en Azure Kubernetes son buenos para implementaciones de producción a gran escala.

En este artículo, se tratan dos escenarios: la implementación de modelos de Python normales y los requisitos específicos de la implementación de modelos de aprendizaje profundo. Ambos escenarios utilizan la arquitectura que se muestra. Además, en GitHub hay disponibles dos implementaciones de referencia para estos escenarios, una para los modelos de Python normales y otra para los modelos de aprendizaje profundo.

Diagrama de arquitectura para la puntuación en tiempo real de modelos de Python en Azure

Escenario: coincidencia de preguntas más frecuentes de Stack Overflow

En este escenario se muestra cómo implementar un modelo de coincidencia de preguntas frecuentes (P+F) coincidencia de modelo como un servicio web para proporcionar predicciones para las preguntas de los usuarios. En este escenario, en el diagrama de la arquitectura, "Input Data" hace referencia a las cadenas de texto que contienen las preguntas del usuario que coinciden con una lista de preguntas frecuentes. Este escenario está diseñado para la biblioteca de aprendizaje automático scikit-learn de Python, pero se puede generalizar a cualquier escenario que use modelos de Python para realizar predicciones en tiempo real.

Este escenario utiliza un subconjunto de datos de preguntas de Stack Overflow que incluye las preguntas originales etiquetadas como JavaScript, sus preguntas duplicadas y sus respuestas. Entrena a una canalización de scikit-learn para predecir la probabilidad de coincidencia de una pregunta duplicada con cada una de las respuestas originales. Dichas predicciones se realizan en tiempo real mediante un punto de conexión de API REST.

Este es el flujo de la aplicación para esta arquitectura:

  1. El modelo entrenado se registra en el Registro del modelo de Machine Learning.
  2. Azure Machine Learning crea una imagen de Docker que incluye el modelo y el script de puntuación.
  3. Azure Machine Learning implementa la imagen de puntuación en Azure Kubernetes Service (AKS) como un servicio web.
  4. El cliente envía una solicitud POST HTTP con los datos de la pregunta codificados.
  5. El servicio web creado en Azure Machine Learning extrae la pregunta de la solicitud.
  6. La pregunta se envía al modelo de canalización de scikit-learn para obtener información acerca de sus características y puntuación.
  7. Las preguntas frecuentes que coincidan con sus puntuaciones se devuelven al cliente.

Esta es una captura de pantalla de la aplicación de ejemplo que consume los resultados:

Captura de pantalla de una aplicación de coincidencia de preguntas más frecuentes de ejemplo mediante un subconjunto de datos de preguntas de Stack Overflow.

Escenario: clasificación de imágenes con redes neuronales convolucionales

En este escenario se muestra cómo implementar un modelo de red neuronal convolucional (CNN) como un servicio web para proporcionar predicciones en imágenes. Para este escenario, en el diagrama de la arquitectura, "Input Data" hace referencia a los archivos de imagen. Las redes CNN son eficaces en Computer Vision para tareas como la clasificación de imágenes y la detección de objetos. Este escenario está diseñado para los marcos TensorFlow, Keras (con el back-end de TensorFlow) y PyTorch. Sin embargo, puede ser válido para cualquier escenario que use modelos de aprendizaje profundo para realizar predicciones en tiempo real.

Este escenario usa un modelo previamente entrenado ResNet-152 entrenado en el conjunto de datos ImageNet - 1K (1000 clases) para predecir a qué categoría (consulte la ilustración siguiente) pertenece una imagen. Dichas predicciones se realizan en tiempo real mediante un punto de conexión de API REST.

Ejemplo de predicciones de clasificación de imágenes que usan un modelo de red neuronal convolucional (CNN) como servicio web.

Este es el flujo de la aplicación para el modelo de aprendizaje profundo:

  1. El modelo de aprendizaje profundo se registra en el Registro del modelo de Machine Learning.
  2. Machine Learning crea una imagen de Docker, que incluye el modelo y el script de puntuación.
  3. Azure Machine Learning implementa la imagen de puntuación en Azure Kubernetes Service (AKS) como un servicio web.
  4. El cliente envía una solicitud POST HTTP con los datos de la imagen codificados.
  5. El servicio web que se crea en Azure Machine Learning procesa previamente los datos de imagen y los envía al modelo para puntuarlos.
  6. Las categorías predichas con sus puntuaciones se devuelven al cliente.

Architecture

Esta arquitectura consta de los siguientes componentes.

Azure Machine Learning es un servicio en la nube que se usa para entrenar, implementar, automatizar y administrar modelos de aprendizaje automático, todo ello con la gran capacidad de escalado que proporciona la nube. En esta arquitectura, se usa para administrar la implementación de modelos, así como la autenticación, el enrutamiento y el equilibrio de carga del servicio web.

Máquina virtual (VM). La VM se muestra como ejemplo de dispositivo, local o en la nube, que puede enviar una solicitud HTTP.

Azure Kubernetes Service (AKS) se usa para implementar la aplicación en un clúster de Kubernetes. AKS simplifica la implementación y las operaciones de Kubernetes. El clúster se puede configurar mediante máquinas virtuales de solo CPU para los modelos de Python normales o máquinas virtuales con GPU habilitado para modelos de aprendizaje profundo.

Azure Container Registry permite el almacenamiento de imágenes para todos los tipos de implementaciones de contenedores de Docker, como DC/OS, Docker Swarm y Kubernetes. Las imágenes de puntuación se implementan como contenedores en Azure Kubernetes Service y se usan para ejecutar el script de puntuación. La imagen usada aquí se crea en Machine Learning a partir del modelo entrenado y el script de puntuación y, luego, se inserta en Azure Container Registry.

Consideraciones de rendimiento

Para las arquitecturas de puntuación en tiempo real, el rendimiento de la capacidad de proceso se convierte en una consideración dominante. En el caso de los modelos de Python normales, las CPU son suficientes para controlar la carga de trabajo.

Sin embargo, en el caso de las cargas de trabajo de aprendizaje profundo, cuando la velocidad es un cuello de botella, las GPU suelen proporcionar mayor rendimiento que las CPU. Para igualar el rendimiento de la GPU mediante el uso de varias CPU, normalmente se necesita un clúster con un gran número de CPU.

Puede utilizar CPU para esta arquitectura en cualquier escenario, pero para los modelos de aprendizaje profundo, las GPU proporcionan valores de rendimiento superiores en comparación con un clúster de CPU cuyo costo sea parecido. AKS admite el uso de GPU, que es una ventaja de usar AKS para esta arquitectura. Además, las implementaciones de aprendizaje profundo suelen usar modelos con un gran número de parámetros. El uso de GPU evita la contención de recursos entre el modelo y el servicio web, lo que es un problema en las implementaciones de solo CPU.

Consideraciones sobre escalabilidad

En el caso de los modelos de Python normales, donde el clúster de AKS se aprovisiona con máquinas virtuales que solo tienen CPU, tenga cuidado al escalar horizontalmente el número de pods. El objetivo es usar completamente el clúster. El escalado depende de las solicitudes de CPU y de los límites definidos para los pods. Machine Learning mediante Kubernetes también admite el escalado automático de pods basado en la utilización de CPU y otras métricas. El escalador automático de clúster puede escalar nodos de agente en función de los pods que haya pendientes.

En los escenarios de aprendizaje profundo, mediante el uso de máquinas con GPU habilitadas, los límites de recursos en los pods son tales que se una GPU asigna a un pod. En función del tipo de máquina virtual utilizada, debe escalar los nodos del clúster para satisfacer la demanda del servicio. Esto es algo que se puede hacer fácilmente mediante la CLI de Azure y kubectl.

Consideraciones acerca de la supervisión y el registro

Supervisión de AKS

Para ver el rendimiento de AKS, use la característica Azure Monitor para contenedores. Dicha característica recopila métricas del procesador y de la memoria procedentes de los controladores, los nodos y los contenedores disponibles en Kubernetes mediante Metrics API.

Al implementar la aplicación, supervise el clúster de AKS para asegurarse de que funciona según lo previsto, todos los nodos están operativos y se ejecutan todos los pods. Aunque puede usar la herramienta de línea de comandos kubectl para recuperar el estado de los pods, Kubernetes también incluye un panel web para la supervisión básica del estado y la administración del clúster.

Captura de pantalla del panel de Kubernetes para la supervisión básica del estado y la administración del clúster.

Para ver el estado general del clúster y de los nodos, vaya a la sección Nodes (Nodos) del panel de Kubernetes. Si un nodo está inactivo o se ha producido un error, puede mostrar los registros de errores de esa página. De forma similar, vaya a las secciones Pods y Deployments (Implementaciones) para obtener información acerca del número de pods y del estado de la implementación.

Registros de AKS

AKS registra automáticamente todos los stdout y stderr en los registros de los pods del clúster. Use kubectl para verlos, así como los eventos y registros a nivel de nodo. Para más información, consulte los pasos de implementación.

Use Azure Monitor para contenedores para recopilar métricas y registros a través de una versión en contenedores del agente de Log Analytics para Linux, que se almacena en el área de trabajo de Log Analytics.

Consideraciones sobre la seguridad

Use Azure Security Center para obtener una visión central del estado de seguridad de los recursos en Azure. Security Center supervisa los posibles problemas de seguridad y proporciona una imagen completa del estado de seguridad de su implementación, aunque no monitoriza los nodos de agente de AKS. El Centro de seguridad se configura por cada suscripción de Azure. Habilite la recopilación de datos de seguridad como se describe en Habilitación de Security Center en las suscripciones. Una vez que habilite la recolección, el Centro de seguridad busca automáticamente las VM creadas en esa suscripción.

Operaciones. Para iniciar sesión en un clúster de AKS mediante el token de autenticación de Azure Active Directory (Azure AD), configurar AKS para usar Azure AD para la autenticación del usuario. Los administradores de clústeres también pueden configurar el control de acceso basado en roles de Kubernetes (RBAC de Kubernetes) en función de la identidad de un usuario o la pertenencia a grupos de directorios.

Utilice RBAC de Azure para controlar el acceso a los recursos de Azure que implemente. RBAC de Azure le permite asignar roles de autorización a los miembros de su equipo de DevOps. Un usuario se puede asignar a varios roles y es posible crear roles personalizados para una especificación aún más detallada de los permisos.

HTTPS. Como procedimiento recomendado de seguridad, la aplicación debe exigir HTTPS y redirigir las solicitudes HTTP. Use un controlador de entrada para implementar un proxy inverso que termina SSL y redirige las solicitudes HTTP. Para más información, consulte Creación de un controlador de entrada HTTPS en Azure Kubernetes Service (AKS).

Autenticación. Esta solución no restringe el acceso a los puntos de conexión. Para implementar la arquitectura en un entorno empresarial, proteja los puntos de conexión a través de claves de API y agregue algún tipo de autenticación de usuario a la aplicación cliente.

Container registry. Esta solución usa Azure Container Registry para almacenar la imagen de Docker. Tanto el código del que depende la aplicación como el modelo se encuentran en esta imagen. Las aplicaciones empresariales deben usar un registro privado como ayuda para protegerse de la ejecución de código malintencionado y para que la información del contenedor no corra peligro.

DDoS Protection. Considere la posibilidad de habilitar el estándar de protección contra DDoS. Aunque el servicio DDoS Protection básico se habilita como parte de la plataforma Azure, DDoS Protection Estándar proporciona funcionalidades de mitigación de riesgos ajustadas específicamente a los recursos de las redes virtuales de Azure.

Registro. Use los procedimientos recomendados antes de almacenar datos de registro, como limpiar las contraseñas de usuario y otra información que podría utilizarse para cometer fraudes de seguridad.

Consideraciones sobre el costo

Puede usar la calculadora de precios de Azure para calcular los costos. Estas son algunas otras consideraciones.

Para más información, consulte el artículo Principios de la optimización de costos del Marco de buena arquitectura de Microsoft Azure.

Azure Machine Learning

En esta arquitectura de referencia, una gran parte del costo se basa en los recursos de proceso. Para experimentación y entrenamiento, Azure Machine Learning es gratuito. Solo se cobra por el proceso que usa el servicio web. Puede usar la calculadora de precios de Azure para calcular los costos de proceso.

Azure Container Registry

Azure Container Registry se ofrece con los planes Básico, Estándar y Premium. Elija un nivel según el almacenamiento que necesite. Elija Premium si necesita replicación geográfica o si ha mejorado el rendimiento de las extracciones de Docker entre nodos simultáneos. Además, se aplican cargos de red estándar. Para más información, consulte Precios de Azure Container Registry.

Azure Kubernetes Service

Solo deberá pagar por las instancias de máquina virtual, el almacenamiento y los recursos de red que use el clúster de Kubernetes. Para calcular el costo de los recursos necesarios, consulte la calculadora de servicios de contenedor.

Para más información, consulte el artículo Principios de la optimización de costos del Marco de buena arquitectura de Microsoft Azure.

Consideraciones sobre DevOps

En esta arquitectura, las imágenes de puntuación las crea el modelo de Machine Learning y se implementan como contenedores en AKS. Puede integrar toda la arquitectura en una canalización de versión para la administración y operacionalización de modelos. La canalización puede incluir las tareas de DevOps para pruebas de integridad de datos, el entrenamiento de modelos en diferentes destinos de proceso, la administración de versiones de modelos, la implementación de modelos como servicios web en tiempo real, la implementación de ensayo en entornos de QA y producción, las pruebas de integración y las pruebas funcionales. La arquitectura de referencia Operacionalización de Machine Learning (MLOps) para modelos de Python con Azure Machine Learning muestra cómo implementar una canalización de integración continua (CI), entrega continua (CD) y reentrenamiento para una aplicación de inteligencia artificial con Azure DevOps y Azure Machine Learning.

Implementación

Para implementar esta arquitectura de referencia, siga los pasos descritos en el repositorio de GitHub:

Pasos siguientes

Lea la documentación del producto:

Pruebe estas rutas aprendizaje de Microsoft: