Operacionalización de Machine Learning (MLOps) para modelos de Python mediante Azure Machine LearningMachine learning operationalization (MLOps) for Python models using Azure Machine Learning

Esta arquitectura de referencia muestra cómo implementar una integración continua (CI), una entrega continua (CD) y una canalización de reentrenamiento en una aplicación de inteligencia artificial mediante Azure DevOps y Azure Machine Learning.This reference architecture shows how to implement a continuous integration (CI), continuous delivery (CD), and retraining pipeline for an AI application using Azure DevOps and Azure Machine Learning. La solución se basa en el conjunto de datos sobre diabetes de scikit-learn, pero se puede adaptar fácilmente no solo a cualquier escenario de inteligencia artificial, sino también a otros sistemas de compilación conocidos, como Jenkins y Travis.The solution is built on the scikit-learn diabetes dataset but can be easily adapted for any AI scenario and other popular build systems such as Jenkins and Travis.

Logotipo de GitHub Hay disponible una implementación de referencia de esta arquitectura en GitHub.GitHub logo A reference implementation for this architecture is available on GitHub.

Diagrama de la arquitectura de MLOps

ArchitectureArchitecture

Esta arquitectura consta de los siguientes componentes:This architecture consists of the following components:

Azure Pipelines .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.This build and test system is based on Azure DevOps and used for the build and release pipelines. Azure Pipelines divide estas canalizaciones en pasos lógicos denominados tareas.Azure Pipelines breaks these pipelines into logical steps called tasks. Por ejemplo, la tarea de la CLI de Azure facilita el trabajo con los recursos de Azure.For example, the Azure CLI task makes it easier to work with Azure resources.

Azure Machine Learning .Azure Machine Learning. Azure Machine Learning es un servicio en la nube para entrenar, puntuar, implementar y administrar modelos de Machine Learning a escala.Azure Machine Learning is a cloud service for training, scoring, deploying, and managing machine learning models at scale. Esta arquitectura usa el SDK de Azure Machine Learning para Python 3 para crear un área de trabajo, recursos de proceso, la canalización de aprendizaje automático y la imagen de puntuación.This architecture uses the Azure Machine Learning SDK for Python 3 to create a workspace, compute resources, the machine learning pipeline, and the scoring image. Las áreas de trabajo de Azure Machine Learning proporcionan el espacio necesario para experimentar, entrenar e implementar los modelos de Machine Learning.An Azure Machine Learning workspace provides the space in which to experiment and train and deploy machine learning models.

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.Azure Machine Learning Compute is cluster of virtual machines on demand with an automatic scaling and GPU and CPU node options. El trabajo de entrenamiento se ejecuta en este clúster.The training job is executed on this cluster.

Las canalizaciones de Azure Machine Learning proporcionan flujos de trabajo de aprendizaje automático que se pueden reutilizar en varios escenarios.Azure Machine Learning pipelines provide reusable machine learning workflows that can be reused across scenarios. 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.Training, model evaluation, model registration, and image creation occur in distinct steps within these pipelines for this use case. La canalización se publica o se actualiza al final de la fase de compilación y se desencadena cuando llegan nuevos datos.The pipeline is published or updated at the end of the build phase and gets triggered on new data arrival.

Azure Blob Storage .Azure Blob Storage. Los contenedores de blobs se utilizan para almacenar los registros del servicio de puntuación.Blob containers are used to store the logs from the scoring service. En este caso, se recopilan tanto los datos de entrada como la predicción del modelo.In this case, both the input data and the model prediction are collected. Después de cierta transformación, estos registros se pueden usar para el reentrenamiento de modelos.After some transformation, these logs can be used for model retraining.

Azure Container Registry .Azure Container Registry. El script de Python de puntuación se empaqueta como una imagen de Docker y se crean versiones en el registro.The scoring Python script is packaged as a Docker image and versioned in the registry.

Azure Container Instances .Azure Container Instances. Como parte de la canalización de versión, el entorno de control de calidad y de 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.As part of release pipeline, the QA and staging environment is mimicked by deploying the scoring webservice image to Container Instances, which provides an easy, serverless way to run a container.

Azure Kubernetes Service .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.Once the scoring webservice image is thoroughly tested in the QA environment, it is deployed to the production environment on a managed Kubernetes cluster.

Azure Application Insights .Azure Application Insights. Este servicio de supervisión se usa para detectar anomalías en el rendimiento.This monitoring service is used to detect performance anomalies.

Canalización de MLOpsMLOps Pipeline

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.This solution demonstrates an end-to-end automation of various stages of an AI project using tools that are already familiar to software engineers. El problema del aprendizaje automático es simple, centrarse en la canalización de DevOps.The machine learning problem is simple to keep the focus on the DevOps pipeline. 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.The solution uses the scikit-learn diabetes dataset and builds a ridge linear regression model to predict the likelihood of diabetes. Para más información, consulte Aprendizaje de los modelos scikit-learn de Python.See Training of Python scikit-learn models for details.

Esta solución se basa en las tres canalizaciones siguientes:This solution is based on the following three pipelines:

  • Canalización de compilación.Build pipeline. Compila el código y ejecuta un conjunto de pruebas.Buildings the code and runs a suite of tests.
  • Canalización de reentrenamiento.Retraining pipeline. Vuelve a entrenar el modelo en función de una programación o cuando haya nuevos datos disponibles.Retrains the model on a schedule or when new data becomes available
  • Canalización de versión.Release pipeline. Operacionaliza la imagen de puntuación y la promociona de forma segura en diferentes entornos.Operationalizes the scoring image and promotes it safely across different environments.

En las secciones siguientes se describen todas estas canalizaciones.The next sections describe each of these pipelines.

Canalización de compilaciónBuild pipeline

La canalización de CI se desencadena cada vez que se sincroniza el código.The CI pipeline gets triggered every time code is checked in. Publica una canalización de Azure Machine Learning actualizada después de compilar el código y ejecutar un conjunto de pruebas.It publishes an updated Azure Machine Learning pipeline after building the code and running a suite of tests. La canalización de compilación consta de las siguientes tareas:The build pipeline consists of the following tasks:

  • Calidad del código.Code quality. Estas pruebas garantizan que el código se ajusta a los estándares del equipo.These tests ensure that the code conforms to the standards of the team.

  • Prueba unitaria.Unit test. Estás pruebas garantizan que el código funciona, tiene una cobertura de código adecuada y es estable.These tests make sure the code works, has adequate code coverage, and is stable.

  • Prueba de datos.Data test. Estás pruebas verifican que los ejemplos de datos se ajustan al esquema y a la distribución esperados.These tests verify that the data samples conform to the expected schema and distribution. 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.Customize this test for other use cases and run it as a separate data sanity pipeline that gets triggered as new data arrives. Por ejemplo, mueva la tarea de prueba de los datos a una canalización de ingesta de datos para poder probarla antes.For example, move the data test task to a data ingestion pipeline so you can test it earlier.

[NOTA] Debería plantearse la posibilidad de habilitar los procedimientos de DevOps en los datos utilizados para entrenar los modelos de Machine Learning, pero ese tema no se trata en este artículo.[NOTE] You should consider enabling DevOps practices for the data used to train the machine learning models, but this is not covered in this article. 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.For more information about the architecture and best practices for CI/CD of a data ingestion pipeline, see DevOps for a data ingestion pipeline.

Las siguientes tareas se realizan una sola vez y se producen al configurar la infraestructura para Azure Machine Learning y el SDK de Python:The following one-time tasks occur when setting up the infrastructure for Azure Machine Learning and the Python SDK:

  • Cree el área de trabajo que hospeda todos los recursos relacionados con Azure Machine Learning.Create the workspace that hosts all Azure Machine Learning-related resources.

  • Cree los recursos de proceso que ejecutan el trabajo de entrenamiento.Create the compute resources that run the training job.

  • Cree la canalización de aprendizaje automático con el script de entrenamiento actualizado.Create the machine learning pipeline with the updated training script.

  • 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.Publish the machine learning pipeline as a REST endpoint to orchestrate the training workflow. En la siguiente sección se describe este paso.The next section describes this step.

Canalización de reentrenamientoRetraining pipeline

La canalización de aprendizaje automático organiza el proceso de reentrenamiento del modelo de una forma asincrónica.The machine learning pipeline orchestrates the process of retraining the model in an asynchronous manner. El reentrenamiento se puede desencadenar según una programación o cuando hay nuevos datos disponibles, para lo que se llama al punto de conexión de REST de la canalización publicada del paso anterior.Retraining can be triggered on a schedule or when new data becomes available by calling the published pipeline REST endpoint from previous step.

Esta canalización abarca los siguientes pasos:This pipeline covers the following steps:

  • Entrenamiento de un modelo.Train model. 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.The training Python script is executed on the Azure Machine Learning Compute resource to get a new model file which is stored in the run history. 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.Since training is the most compute-intensive task in an AI project, the solution uses Azure Machine Learning Compute.

  • Evaluación del modelo.Evaluate model. Una sencilla prueba de evaluación compara el modelo nuevo con el existente.A simple evaluation test compares the new model with the existing model. El modelo nuevo solo se promociona si es mejor.Only when the new model is better does it get promoted. En caso contrario, el modelo no se registra y la canalización se cancela.Otherwise, the model is not registered and the pipeline is canceled.

  • Registro del modelo.Register model. El modelo reentrenado se registra en el registro de modelos de Azure Machine Learning.The retrained model is registered with the Azure ML Model registry. 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.This service provides version control for the models along with metadata tags so they can be easily reproduced.

Canalización de versiónRelease pipeline

Esta canalización muestra cómo operacionalizar la imagen de puntuación y promocionarla de forma segura en diferentes entornos.This pipeline shows how to operationalize the scoring image and promote it safely across different environments. Esta canalización se subdivide en dos entornos, control de calidad y producción:This pipeline is subdivided into two environments, QA and production:

Entorno de control de calidadQA environment

  • Desencadenador del artefacto de modelo.Model Artifact trigger. Las canalizaciones de versión se desencadenan cada vez que hay un artefacto nuevo disponible.Release pipelines get triggered every time a new artifact is available. Los modelos nuevos registrados en Administración de modelos de Azure Machine Learning se tratan como artefactos de publicación.A new model registered to Azure Machine Learning Model Management is treated as a release artifact. En ese caso, se desencadena una canalización por cada modelo nuevo que se registra.In this case, a pipeline is triggered for each new model is registered.

  • Creación de imagen de puntuación.Create scoring image. El modelo registrado se empaqueta junto con el script de puntuación y las dependencias de Python (archivo YAML de Conda) en una imagen de operacionalización de Docker.The registered model is packaged together with scoring script and Python dependencies (Conda YAML file) into an operationalization Docker image. La imagen obtiene automáticamente las versiones a través de Azure Container Registry.The image automatically gets versioned through Azure Container Registry.

  • Implementación en Container Instances.Deploy on Container Instances. Este servicio se usa para crear un entorno que no es de producción.This service is used to create a non-production environment. Aquí también se implementa la imagen de puntuación y se usa principalmente para la realización de pruebas.The scoring image is also deployed here, and this is mostly used for testing. Container Instances proporciona una forma fácil y rápida de probar la imagen de Docker.Container Instances provides an easy and quick way to test the Docker image.

  • Prueba de servicio web.Test web service. Una sencilla prueba de la API garantiza que la imagen se ha implementado correctamente.A simple API test makes sure the image is successfully deployed.

Entorno de producciónProduction environment

  • Implementación en Azure Kubernetes Service.Deploy on Azure Kubernetes Service. Este servicio se usa para implementar una imagen de puntuación como si fuera un servicio web a escala en un entorno de producción.This service is used for deploying scoring image as a web service at scale in a production environment.

  • Prueba de servicio web.Test web service. Una sencilla prueba de la API garantiza que la imagen se ha implementado correctamente.A simple API test makes sure the image is successfully deployed.

Consideraciones sobre escalabilidadScalability considerations

Las canalizaciones de compilación de Azure DevOps se pueden escalar para cualquier aplicación, sea cual sea su tamaño.A build pipeline on Azure DevOps can be scaled for applications of any size. 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.Build pipelines have a maximum timeout that varies depending on the agent they are run on. Las compilaciones se pueden ejecutar de forma indefinida en agentes autohospedados (agentes privados).Builds can run forever on self-hosted agents (private agents). En el caso de los agentes hospedados en Microsoft para un proyecto público, las compilaciones se pueden ejecutar durante seis horas.For Microsoft-hosted agents for a public project, builds can run for six hours. En el caso de los proyectos privados, el límite es 30 minutos.For private projects, the limit is 30 minutes.

Para usar el tiempo de expiración máximo, establezca la siguiente propiedad en el archivo YAML de Azure Pipelines:To use the maximum timeout, set the following property in your Azure Pipelines YAML file:

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.Ideally, have your build pipeline finish quickly and execute only unit tests and a subset of other tests. Esto permite validar los cambios rápidamente y solucionar los problemas que aparezcan.This allows you to validate the changes quickly and fix them if issues arise. Ejecute las pruebas de ejecución prolongada fuera del horario laboral.Run long-running tests during off hours.

La canalización de versión publica un servicio web de puntuación en tiempo real.The release pipeline publishes a real-time scoring web service. 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.A release to the QA environment is done using Container Instances for convenience, but you can use another Kubernetes cluster running in the QA/staging environment.

Escale el entorno de producción según el tamaño del clúster de Azure Kubernetes Service.Scale the production environment according to the size of your Azure Kubernetes Service cluster. El tamaño del clúster depende de la carga que se espere para el servicio web de puntuación implementado.The size of the cluster depends on the load you expect for the deployed scoring web service. En el caso de las arquitecturas de puntuación en tiempo real, el rendimiento es una métrica de optimización clave.For real-time scoring architectures, throughput is a key optimization metric. En el caso de los escenarios que no sean de aprendizaje profundo, una CPU debería 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.For non-deep learning scenarios, CPU should be sufficient to handle the load; however, for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. Para alcanzar el rendimiento de las GPU mediante CPU, habitualmente se necesita un mayor número de CPU.For moreTo match GPU performance using CPUs, a cluster with a large number of CPUs is usually needed. Kubernetes Service admite los tipos de nodo CPU y GPU, y ese es el motivo por el que esta solución usa Kubernetes Service para la implementación de imágenes.Kubernetes Service supports both CPU and GPU node types-the reason this solution uses Kubernetes Service for image deployment. Para más información, consulte GPU en comparación con CPU para la implementación de modelos de aprendizaje profundo (entrada de blog).For more information, see GPUs vs CPUs for deployment of deep learning models (blog post).

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.Scale the retraining pipeline up and down depending on the number of nodes in your Azure Machine Learning Compute resource, and use the autoscaling option to manage the cluster. Esta arquitectura utiliza varias CPU.This architecture uses CPUs. Para las cargas de aprendizaje profundo, es mejor elegir GPU, ya que son compatibles con Proceso de Azure Machine Learning.For deep learning workloads, GPUs are a better choice and are supported by Azure Machine Learning Compute.

Consideraciones de administraciónManagement considerations

  • Trabajo de supervisión de reentrenamiento.Monitor retraining job. Las canalizaciones de aprendizaje automático organizan el reentrenamiento en un clúster de máquinas y proporcionan una forma sencilla de supervisarlas.Machine learning pipelines orchestrate retraining across a cluster of machines and provides an easy way to monitor them. Use Azure Portal, vaya al área de trabajo de aprendizaje automático y examine la sección de canalizaciones para buscar los registros.Use the Azure portal, and go to the machine learning workspace, and look under pipelines section for the logs. 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.Alternatively, these logs are also written to blob and can be read from there as well using tools such as Azure Storage Explorer.

  • Registro.Logging. 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.Azure Machine Learning provides an easy way to log at each step of the machine learning life cycle. Los registros se almacenan en un contenedor de blobs.The logs are stored in a blob container. Para más información, consulte Habilitación del registro en Azure Machine Learning.For more information, see Enable logging in Azure Machine Learning. Para mejorar la supervisión, configure Application Insights para que use los registros.For richer monitoring, configure Application Insights to use the logs.

  • Seguridad.Security. Todos los secretos y credenciales se almacenan en Azure Key Vault y se accede a ellos en Azure Pipelines mediante los grupos de variables.All secrets and credentials are stored in Azure Key Vault and accessed in Azure Pipelines using variable groups.

Consideraciones sobre el costoCost considerations

Azure DevOps es gratis para proyectos de código abierto y proyectos pequeños, con un máximo de cinco usuarios.Azure DevOps is free for open-source projects and small projects with up to five users. Para equipos mayores, compre un plan basado en el número de usuarios.For larger teams, purchase a plan based on the number of users.

Proceso de Machine Learning es el mayor generador de costos de esta arquitectura y varía en función del caso de uso.Compute is the biggest cost driver in this architecture and varies depending on the use case. Para fines de experimentación y entrenamiento, Azure Machine Learning es gratis, solo se paga por el proceso que se usa.For experimentation and training, Azure Machine Learning is free, you pay only for the compute used. Al implementar modelos en el clúster de Kubernetes Service, Azure Machine Learning agrega un pequeño suplemento al costo del proceso de Kubernetes Service.While deploying models to Kubernetes Service cluster, Azure Machine Learning adds a small surcharge on top of the Kubernetes Service compute cost. En función de cuál sea la carga que se espera del servicio web y de la opción de escalabilidad automática definida, este costo se puede controlar.Depending on the expected web service load and the defined autoscaling option, you can control this cost. Puede usar la CLI de Azure o el SDK de Python de Azure Machine Learning para establecer mediante programación una configuración de la escalabilidad automática.You can use either Azure CLI or Azure Machine Learning Python SDK to programmatically set an autoscaling configuration.

La canalización de reentrenamiento también requiere un formulario de proceso.The retraining pipeline also requires a form of compute. Esta arquitectura usa Proceso de Azure Machine Learning, pero hay otras opciones.This architecture uses Azure Machine Learning Compute, but other options are available. Como ya se ha indicado, los modelos de entrenamiento no incurren en el suplemento del servicio de aprendizaje automático; solo se paga el costo del proceso,As mentioned earlier, training models do not incur the machine learning service surcharge; you only pay the compute cost. el cual depende del tamaño del clúster, del tipo de nodo y del número de nodos.The compute cost depends on the cluster size, node type, and number of nodes. Para calcular el costo de Machine Learning y de otros servicios, use la calculadora de precios de Azure.You can estimate the cost for Machine Learning and other services using the Azure pricing calculator.

Implementación de la soluciónDeploy the solution

Para implementar esta arquitectura de referencia, siga los pasos descritos en la guía de introducción del repositorio de GitHub.To deploy this reference architecture, follow the steps described in the Getting Started guide in the GitHub repo.