DevOps para el aprendizaje automático
DevOps y MLOps
DevOps se describe como la unión de personas, procesos y productos para permitir la entrega continua de valor a nuestros usuarios finales, por Donovan Brown en ¿Qué es DevOps?.
Para comprender cómo se usa al trabajar con modelos de aprendizaje automático, vamos a explorar aún más algunos principios esenciales de DevOps.
DevOps es una combinación de herramientas y prácticas que guían a los desarrolladores en la creación de aplicaciones sólidas y reproducibles. El objetivo de usar los principios de DevOps es entregar rápidamente valor al usuario final.
Si desea ofrecer más fácilmente valor mediante la integración de modelos de aprendizaje automático en canalizaciones de transformación de datos o aplicaciones en tiempo real, se beneficiará de la implementación de principios de DevOps. Aprender sobre DevOps le ayudará a organizar y automatizar el trabajo.
La creación, implementación y supervisión de modelos sólidos y reproducibles para ofrecer valor al usuario final es el objetivo de las operaciones de aprendizaje automático (MLOps).
Hay tres procesos que queremos combinar cada vez que hablamos sobre las operaciones de aprendizaje automático (MLOps):
Ml incluye todas las cargas de trabajo de aprendizaje automático para las que un científico de datos es responsable. Un científico de datos hará lo siguiente:
- Análisis de datos exploratorios (EDA)
- Ingeniería de características
- Entrenamiento y ajuste de modelos
DEV hace referencia al desarrollo de software, que incluye:
- Plan: defina los requisitos y las métricas de rendimiento del modelo.
- Crear: Cree los scripts de entrenamiento y puntuación del modelo.
- Verificar: Compruebe la calidad del código y del modelo.
- Paquete: Prepárate para la implementación poniendo la solución en escena.
OPS hace referencia a las operaciones e incluye:
- Lanzamiento: Implemente el modelo en producción.
- Configurar: estandarizar las configuraciones de infraestructura con infraestructura como código (IaC).
- Supervisión: realice un seguimiento de las métricas y asegúrese de que el modelo y la infraestructura funcionan según lo previsto.
Vamos a repasar algunos principios de DevOps que son esenciales para MLOps.
Principios de DevOps
Uno de los principios básicos de DevOps es la automatización. Al automatizar las tareas, aspiramos a implementar nuevos modelos en producción más rápido. Mediante la automatización, también creará modelos reproducibles que sean confiables y coherentes en todos los entornos.
Especialmente cuando desea mejorar el modelo periódicamente con el tiempo, la automatización le permite realizar todas las actividades necesarias rápidamente para asegurarse de que el modelo en producción siempre es el modelo de mejor rendimiento.
Un concepto clave para lograr la automatización es CI/CD, lo que significa integración continua y entrega continua.
Integración continua
La integración continua abarca las actividades de creación y comprobación . El objetivo es crear el código y comprobar la calidad del código y el modelo mediante pruebas automatizadas.
Con MLOps, la integración continua puede incluir:
- Refactorizando código exploratorio en notebooks de Jupyter a scripts de Python o R.
- Uso de herramientas de linting para comprobar si hay errores programáticos o estilísticos en los scripts de Python o R. Por ejemplo, compruebe si una línea del script contiene menos de 80 caracteres.
- Pruebas unitarias para comprobar el rendimiento del contenido de los scripts. Por ejemplo, compruebe si el modelo genera predicciones precisas en un conjunto de datos de prueba.
Para realizar pruebas unitarias y linting, puede usar herramientas de automatización como Azure Pipelines en Azure DevOps o Acciones de GitHub.
Entrega continua
Después de comprobar la calidad del código de los scripts de Python o R usados para entrenar el modelo, querrá llevar el modelo a producción. La entrega continua implica los pasos que debe realizar para implementar un modelo en producción, preferiblemente automatizar tanto como sea posible.
Para implementar un modelo en producción, primero querrá empaquetarlo e implementarlo en un entorno de preproducción. Al almacenar provisionalmente el modelo en un entorno de preproducción, puede comprobar si todo funciona según lo previsto.
Una vez que la implementación del modelo en la fase de ensayo se realiza correctamente y sin errores, puede aprobar para que el modelo se implemente en el entorno de producción de .
Para colaborar en los scripts de Python o R para entrenar el modelo y cualquier código necesario para implementar el modelo en cada entorno, se utilizará el control de código fuente.
Control de código fuente
El control de código fuente (o control de versiones) se logra normalmente trabajando con un repositorio basado en Git. Un repositorio hace referencia a la ubicación de donde se pueden almacenar todos los archivos pertinentes a un proyecto de software.
Con los proyectos de aprendizaje automático, es probable que tenga un repositorio para cada proyecto que tenga. El repositorio incluirá notebooks de Jupyter, scripts de entrenamiento, scripts de evaluación y definiciones de canalización, entre otras cosas.
Nota
Preferiblemente, no almacene los datos de entrenamiento en el repositorio. En su lugar, los datos de entrenamiento se almacenan en una base de datos o un lago de datos y Azure Machine Learning recupera los datos directamente desde el origen de datos mediante almacenes de datos.
Los repositorios basados en Git están disponibles mediante Azure Repos en Azure DevOps o un repositorio de GitHub.
Al hospedar todo el código pertinente en un repositorio, puede colaborar fácilmente en el código y realizar un seguimiento de los cambios que realice un miembro del equipo. Cada miembro puede trabajar en su propia versión del código. Podrá ver todos los cambios anteriores y podrá revisar los cambios antes de confirmarlos en el repositorio principal.
Para decidir quién trabaja en qué parte del proyecto, se recomienda usar la planeación ágil.
Planeamiento ágil
Como quiere que un modelo se implemente rápidamente en producción, el planeamiento ágil es ideal para proyectos de aprendizaje automático.
La planeación ágil significa aislar el trabajo en sprints. Los sprints son breves períodos de tiempo durante los que desea lograr parte de los objetivos del proyecto.
El objetivo es planear sprints para mejorar rápidamente cualquiera de los códigos. Si se usa código para la exploración de datos y modelos o para implementar un modelo en producción.
El entrenamiento de un modelo de Machine Learning puede ser un proceso sin fin. Por ejemplo, como científico de datos, es posible que tenga que mejorar el rendimiento del modelo debido al desfase de datos. O bien, tendrá que ajustar el modelo para alinearse mejor con los nuevos requisitos empresariales.
Para evitar dedicar demasiado tiempo al entrenamiento del modelo, la planeación ágil puede ayudar a definir el ámbito del proyecto y ayudar a alinear a todos los usuarios mediante el acuerdo en los resultados a corto plazo.
Para planear su trabajo, puede utilizar una herramienta como Azure Boards en Azure DevOps o incidencias de GitHub.
Infraestructura como código (IaC)
Aplicar principios de DevOps a proyectos de aprendizaje automático significa que desea crear soluciones reproducibles sólidas. En otras palabras, todo lo que hagas o crees, tendrías que ser capaz de repetir y automatizar.
Para repetir y automatizar la infraestructura necesaria para entrenar e implementar el modelo, el equipo usará infraestructura como código (IaC). Al entrenar e implementar modelos en Azure, IaC significa que define todos los recursos de Azure necesarios en el proceso en el código y el código se almacena en un repositorio.
Propina
Familiarícese con DevOps mediante la exploración de los módulos de Microsoft Learn en el recorrido de transformación de DevOps