MLOps para modelos de Python con Azure Machine Learning

Azure Blob Storage
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

Esta arquitectura de referencia muestra cómo implementar la integración continua (CI), la entrega continua (CD) y una canalización de reentrenamiento para una aplicación de inteligencia artificial mediante Azure DevOps y Azure Machine Learning. La solución se basa en el conjunto de datos sobre diabetes scikit-learn, pero se puede adaptar fácilmente a cualquier escenario de inteligencia artificial y a otros sistemas de compilación conocidos, como Jenkins y Travis.

Hay disponible una implementación de referencia de esta arquitectura en GitHub.

Architecture

Diagram of the Machine Learning DevOps architecture.

Descargue un archivo Visio de esta arquitectura.

Flujo de trabajo

La arquitectura consta de los siguientes servicios:

Azure Pipelines . Este sistema de compilación y prueba se basa en Azure DevOps y se usa para las canalizaciones de compilación y versión. Azure Pipelines divide estas canalizaciones en pasos lógicos denominados tareas. Por ejemplo, la tarea de la CLI de Azure facilita el trabajo con los recursos de Azure.

Azure Machine Learning es un servicio en la nube que se usa para entrenar, puntuar, implementar y administrar modelos de aprendizaje automático a gran escala. Esta arquitectura usa el SDK de Python de Azure Machine Learning para crear un área de trabajo, los recursos de proceso, la canalización de aprendizaje automático y la imagen de puntuación. El área de trabajo de Azure Machine Learning proporcionan el espacio necesario para experimentar, entrenar e implementar los modelos de aprendiaje automático.

Proceso de Azure Machine Learning es un clúster de máquinas virtuales a petición con escalado automático y opciones de nodos con GPU y CPU. El trabajo de entrenamiento se ejecuta en este clúster.

Las canalizaciones de Azure Machine Learning proporcionan flujos de trabajo de aprendizaje automático que se pueden reutilizar en varios escenarios. El entrenamiento, la evaluación y el registro de modelos, y la creación de imágenes se producen en pasos distintos en estas canalizaciones en este caso de uso. La canalización se publica o se actualiza al final de la fase de compilación y se desencadena cuando llegan nuevos datos.

Azure Blob Storage . Los contenedores de blobs se utilizan para almacenar los registros del servicio de puntuación. En este caso, se recopilan tanto los datos de entrada como la predicción del modelo. Después de cierta transformación, estos registros se pueden usar para el reentrenamiento de modelos.

Azure Container Registry . El script de Python de puntuación se empaqueta como una imagen de Docker y se crean versiones en el registro.

Azure Container Instances . Como parte de la canalización de versión, el entorno de control de calidad y ensayo se imita mediante la implementación de la imagen del servicio web de puntuación en Container Instances, lo que permite ejecutar un contenedor de forma fácil y sin servidor.

Azure Kubernetes Service . Una vez que la imagen del servicio web de puntuación se prueba exhaustivamente en el entorno de control de calidad, se implementa en el entorno de producción en un clúster de Kubernetes administrado.

Azure Application Insights . Este servicio de supervisión se usa para detectar anomalías en el rendimiento.

Canalización de MLOps

Esta solución muestra una automatización completa, de varias fases, de un proyecto de inteligencia artificial, mediante herramientas con las que los ingenieros de software ya están familiarizados. El problema del aprendizaje automático es simple, centrarse en la canalización de DevOps. La solución usa el conjunto de datos sobre diabetes de scikit-learn y crea un modelo de regresión lineal de cresta para predecir la probabilidad de diabetes.

Esta solución se basa en las tres canalizaciones siguientes:

  • Canalización de compilación. Compila el código y ejecuta un conjunto de pruebas.
  • Canalización de reentrenamiento. Vuelve a entrenar el modelo según una programación o cuando haya nuevos datos disponibles.
  • Canalización de versión. Operacionaliza la imagen de puntuación y la promociona de forma segura en diferentes entornos.

En las secciones siguientes se describen todas estas canalizaciones.

Canalización de compilación

La canalización de CI se desencadena cada vez que se sincroniza el código. Publica una canalización de Azure Machine Learning actualizada después de compilar el código y ejecutar un conjunto de pruebas. La canalización de compilación consta de las siguientes tareas:

  • Calidad del código. Estas pruebas garantizan que el código se ajusta a los estándares del equipo.

  • Prueba unitaria. Estás pruebas garantizan que el código funciona, tiene una cobertura de código adecuada y es estable.

  • Prueba de datos. Estás pruebas verifican que los ejemplos de datos se ajustan al esquema y a la distribución esperados. Personalice esta prueba para otros casos de uso y ejecútela como una canalización de validez de los datos independiente que se desencadena cuando llegan datos nuevos. Por ejemplo, mueva la tarea de prueba de los datos a una canalización de ingesta de datos para poder probarla antes.

Nota

Debería plantearse la posibilidad de habilitar los procedimientos de DevOps en los datos utilizados para entrenar los modelos de aprendizaje automático, pero ese tema no se trata en este artículo. Para más información sobre la arquitectura y procedimientos recomendados para CI/CD de una canalización de ingesta de datos, consulte DevOps para una canalización de ingesta de datos.

Las siguientes tareas se realizan una sola vez y se producen al configurar la infraestructura para Azure Machine Learning y el SDK de Python:

  • Cree el área de trabajo que hospeda todos los recursos relacionados con Azure Machine Learning.
  • Cree los recursos de proceso que ejecutan el trabajo de entrenamiento.
  • Cree la canalización de aprendizaje automático con el script de entrenamiento actualizado.
  • Publique la canalización de aprendizaje automático como si fuera un punto de conexión de REST para organizar el flujo de trabajo de entrenamiento. En la siguiente sección se describe este paso.

Canalización de reentrenamiento

La canalización de aprendizaje automático organiza el proceso de reentrenamiento del modelo de una forma asincrónica. El reentrenamiento se puede desencadenar según una programación o cuando haya nuevos datos disponibles mediante la llamada al punto de conexión REST de la canalización publicada del paso anterior.

Esta canalización abarca los siguientes pasos:

  • Entrenamiento de un modelo. El script de entrenamiento de Python se ejecuta en el recurso Proceso de Azure Machine Learning para obtener un archivo de modelo que se almacena en el historial de ejecución. Dado que el entrenamiento es la tarea que hace un uso más intensivo del proceso en cualquier proyecto de inteligencia artificial, la solución usa Proceso de Azure Machine Learning.

  • Evaluación del modelo. Una sencilla prueba de evaluación compara el modelo nuevo con el existente. El modelo nuevo solo se promociona si es mejor. En caso contrario, el modelo no se registra y la canalización se cancela.

  • Registro del modelo. El modelo reentrenado se registra en el registro de modelos de Azure Machine Learning. Este servicio proporciona el control de versiones de los modelos, junto con etiquetas de metadatos, con el fin de que se puedan reproducir fácilmente.

Canalización de versión

Esta canalización muestra cómo operacionalizar la imagen de puntuación y promocionarla de forma segura en diferentes entornos. Esta canalización se subdivide en dos entornos, control de calidad y producción:

Entorno de control de calidad

  • Desencadenador del artefacto de modelo. Las canalizaciones de versión se desencadenan cada vez que hay un artefacto nuevo disponible. Los modelos nuevos registrados en Administración de modelos de Azure Machine Learning se tratan como artefactos de publicación. En ese caso, se desencadena una canalización por cada modelo nuevo que se registra.

  • Cree una imagen de puntuación. El modelo registrado se empaqueta junto con un script de puntuación y las dependencias de Python (archivo YAML de Conda) en una imagen de Docker de operacionalización. La imagen obtiene automáticamente las versiones a través de Azure Container Registry.

  • Implementación en Container Instances. Este servicio se usa para crear un entorno que no es de producción. Aquí también se implementa la imagen de puntuación y se usa principalmente para la realización de pruebas. Container Instances proporciona una forma fácil y rápida de probar la imagen de Docker.

  • Prueba de servicio web. Una sencilla prueba de la API garantiza que la imagen se ha implementado correctamente.

Entorno de producción

  • Implementación en Azure Kubernetes Service. Este servicio se usa para implementar una imagen de puntuación como si fuera un servicio web a gran escala en un entorno de producción.

  • Prueba de servicio web. Una sencilla prueba de la API garantiza que la imagen se ha implementado correctamente.

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Escalabilidad

Las canalizaciones de compilación de Azure DevOps se pueden escalar para cualquier aplicación, sea cual sea su tamaño. Las canalizaciones de compilación tienen un tiempo de expiración máximo que varía en función del agente en que se ejecutan. Las compilaciones se pueden ejecutar de forma indefinida en agentes autohospedados (agentes privados). En el caso de los agentes hospedados en Microsoft para un proyecto público, las compilaciones se pueden ejecutar durante seis horas. En el caso de los proyectos privados, el límite es 30 minutos.

Para usar el tiempo de expiración máximo, establezca la siguiente propiedad en el archivo YAML de Azure Pipelines:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

Lo ideal es que la canalización de compilación finalice rápidamente y que se ejecuten solo pruebas unitarias y un subconjunto de otras pruebas. Esto permite validar los cambios rápidamente y solucionar los problemas que aparezcan. Ejecute las pruebas de ejecución prolongada fuera del horario laboral.

La canalización de versión publica un servicio web de puntuación en tiempo real. Las publicaciones en el entorno de control de calidad se realizan mediante Container Instances por comodidad, pero se puede usar cualquier otro clúster de Kubernetes que se ejecute en el entorno de ensayo o de control de calidad.

Escale el entorno de producción según el tamaño del clúster de Azure Kubernetes Service. El tamaño del clúster depende de la carga que se espere para el servicio web de puntuación implementado. En el caso de las arquitecturas de puntuación en tiempo real, el rendimiento es una métrica de optimización clave. En escenarios que no sean de aprendizaje profundo, la CPU debe ser suficiente para controlar la carga; sin embargo, en las cargas de trabajo de aprendizaje profundo, si la velocidad supone un cuello de botella, las GPU habitualmente proporcionan mejor rendimiento que las CPU. Azure Container Service admite los tipos de nodo CPU y GPU, y ese es el motivo por el que esta solución lo usa para la implementación de imágenes. Para más información, consulte GPU frente a CPU para la implementación de modelos de aprendizaje profundo.

Escale y reduzca verticalmente la canalización de reentrenamiento en función del número de nodos del recurso Proceso de Azure Machine Learning y use la opción de escalabilidad automática para administrar el clúster. Esta arquitectura utiliza varias CPU. Para las cargas de aprendizaje profundo, es mejor elegir GPU, ya que son compatibles con Proceso de Azure Machine Learning.

Administración

  • Trabajo de supervisión de reentrenamiento. Las canalizaciones de aprendizaje automático organizan el reentrenamiento en un clúster de máquinas y proporcionan una forma sencilla de supervisarlas. Use la interfaz de usuario de Azure Machine Learning y mire en la sección de canalizaciones de los registros. Como alternativa, estos registros también se escriben en un blob y se pueden leer desde allí, así como usar herramientas como Azure Storage Explorer.

  • Registro. Azure Machine Learning proporciona una forma sencilla de realizar el registro en cada uno de los pasos del ciclo de vida del aprendizaje automático. Los registros se almacenan en un contenedor de blobs. Para más información, consulte Habilitación del registro en Azure Machine Learning. Para mejorar la supervisión, configure Application Insights para que use los registros.

  • Seguridad. Todos los secretos y credenciales se almacenan en Azure Key Vault y se accede a ellos en Azure Pipelines mediante los grupos de variables.

Optimización de costos

La optimización de costos trata de buscar formas de reducir los gastos innecesarios y mejorar las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.

Azure DevOps es gratis para proyectos de código abierto y proyectos pequeños, con un máximo de cinco usuarios. Para equipos mayores, compre un plan basado en el número de usuarios.

El proceso es el principal factor determinante del costo de esta arquitectura y varía en función del caso de uso. Esta arquitectura usa Proceso de Azure Machine Learning, pero hay otras opciones. Azure Machine Learning no agrega ningún recargo sobre el costo de las máquinas virtuales que respaldan el clúster de proceso. Configure el clúster de proceso para que tenga 0 nodos como mínimo, y así, cuando no esté en uso, se pueda reducir verticalmente a 0 nodos y no incurrir en ningún costo. El costo de proceso depende del tipo de nodo, el número de nodos y el modo de aprovisionamiento (prioridad baja o dedicado). Para calcular el costo de Machine Learning y de otros servicios, use la calculadora de precios de Azure.

Implementación de este escenario

Para implementar esta arquitectura de referencia, siga los pasos descritos en la guía de introducción del repositorio de GitHub.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

  • Praneet Singh Solanki | Ingeniero sénior de software

Pasos siguientes