Actualmente, vivimos rodeados de inteligencia artificial.
Nuestros smartphones, los sitios online donde compramos, las plataformas de streaming, las redes sociales, los vehículos, y un largo etcétera, utilizan en su gran mayoría modelos de aprendizaje automático para entender y analizar el ingente océano de datos en el que todos estamos inmersos.
Cada proceso de aprendizaje automático (Machine Learning) es un conjunto de operaciones, que se ejecutan para producir un modelo, el cual podemos definir como una representación matemática de un proceso del mundo real. Podríamos pensar en el modelo de como una función que toma algunos datos de entrada y produce una salida (clasificación, sentimiento, recomendación, agrupaciones, etc…)
El rendimiento de cada modelo se evalúa mediante el uso de métricas de evaluación, como precisión y recuperación o exactitud, entre otros
Es de gran interés incluir el aprendizaje automático en los sistemas de software porque un modelo de ML resuelve algunos problemas, que pueden ser demasiado complejos para ser resueltos de manera tradicional. Para tales problemas, una solución probabilística (estocástica) que se implemente mediante el aprendizaje automático, podría ser la forma correcta de actuar.
Por ejemplo, los problemas de percepción en las interfaces de usuario conversacionales se pueden resolver con técnicas como el reconocimiento de voz o el análisis de sentimientos. El Deep Learning (subconjunto del aprendizaje automático que se centra en el uso de redes neuronales) parece ser el más apropiado porque estos problemas tienen una gran cantidad de elementos con diferentes representaciones.
Otro tipo de problemas que son adecuados para ML son los problemas de múltiples parámetros. Por ejemplo, podríamos aplicar un modelo de aprendizaje automático para generar una predicción de precios de acciones, que es la base para las decisiones que se toman en el mercado bursátil.
Poner un modelo en producción, no es sencillo
Llevar un modelo al mundo real implica más que simplemente construirlo. Para aprovechar al máximo el modelo de aprendizaje automático al ponerlo a disposición de las aplicaciones, necesitamos desplegar dicho modelo entrenado, es decir ponerlo en producción.
Mediante el despliegue de modelos en producción, otros sistemas de software o aplicaciones pueden suministrarles datos y obtener predicciones, que a su vez se pueden usar como entradas para otras aplicaciones. Por lo tanto, para aprovechar el pleno potencial de los modelos ML, es necesario ponerlos en producción al alcance del resto de aplicaciones que podrían usarlos, y aplicar una estrategia de gobierno sobre los mismos
Sin embargo, según un informe de Algorithmia «2020 State of Enterprise Machine Learning», muchas empresas no han descubierto cómo lograr este objetivo. Porque cerrar la brecha entre la construcción de modelos y su puesta en producción sigue siendo un auténtico desafío.
Existe una diferencia fundamental entre crear un modelo de aprendizaje automático en un notebook de Jupyter y desplegar ese modelo en producción para que genere un valor auténtico.
Aunque los presupuestos destinados a ML en las empresas están en aumento, solo el 22 por ciento de las empresas que utilizan el aprendizaje automático han implementado con éxito algún modelo de aprendizaje automático en producción.
El informe «2020 State of Enterprise Machine Learning» se basa en una encuesta a casi 750 personas, incluidos profesionales del ML y ejecutivos de empresas de tecnología. La mitad de los encuestados respondió que su empresa tarda entre una semana y tres meses en implementar un modelo de aprendizaje automático. Aproximadamente el 18 por ciento afirmó que lleva de tres meses a un año. Según el informe, “los principales desafíos que enfrentan las personas al desarrollar capacidades de aprendizaje automático son el escalado, el control de versiones, la reproducibilidad del modelo y la alineación de todos los stakeholders involucrados”.
Por qué el desarrollo de ML es tan distinto del desarrollo de software tradicional
La razón de la brecha de implementación descrita anteriormente es que el desarrollo de las aplicaciones basadas en el aprendizaje automático es fundamentalmente diferente del desarrollo del software tradicional.
El proceso de desarrollo de ML completo incluye tres niveles de cambio:
- Datos
- Modelo de aprendizaje automático
- Código.
Esto significa que en los sistemas basados en el aprendizaje automático, el desencadenante de una compilación puede ser la combinación de un cambio de código, un cambio de datos o un cambio de modelo. Por ejemplo, en las siguientes situaciones:
- Después de desplegar el modelo de ML, podríamos reconocer que a medida que pasa el tiempo, el modelo comienza a deteriorarse y a comportarse de forma anormal, por lo que necesitaríamos nuevos datos para volver a entrenar nuestro modelo
- Después de examinar los datos disponibles, podríamos reconocer que es difícil obtener los datos necesarios para resolver el problema que definimos previamente, por lo que tendríamos que volver a reformular el problema.
- En el proyecto de ML, en algunas etapas, podemos retroceder en el proceso y recopilar más datos o recopilar datos diferentes y volver a etiquetar los datos de entrenamiento. Esto debería desencadenar el reentrenamiento del modelo.
- Después de entregar el modelo a los usuarios finales, es posible que reconozcamos que las suposiciones que hicimos para entrenar el modelo son incorrectas, por lo que tenemos que cambiar nuestro modelo.
- A veces, el objetivo comercial puede cambiar durante el desarrollo del proyecto y decidimos cambiar el algoritmo de aprendizaje automático para entrenar el modelo.
Por tanto, surge la necesidad de enfocar todas estas variables con una filosofía, metodología y procesos, en torno al diseño, la construcción y el despliegue de modelos de ML en producción. Aquí es donde nace el concepto de Machine Learning Operations, o MLOps
Machine Learning Operations (MLOps), para qué?
MLOps se define como “la extensión de la metodología DevOps para incluir artefactos de Machine Learning y Data Science como procesos dentro del ecosistema DevOps” (Fuente: MLOps SIG)
De manera alternativa, podemos usar la definición de Ingeniería de aprendizaje automático (MLE), que es el uso de principios científicos, herramientas y técnicas de aprendizaje automático e ingeniería de software tradicional para diseñar y construir sistemas informáticos complejos.
MLE abarca todas las etapas, desde la recopilación de datos hasta la construcción del modelo, para que el modelo esté disponible para su uso por parte del consumidor final «. (por A. Burkov).
MLOps, como DevOps, surge del entendimiento de que separar el desarrollo del modelo ML del proceso que lo entrega reduce la calidad, transparencia y agilidad de todo el software inteligente.
A principios de la década de 2000, cuando las empresas necesitaban implementar soluciones de aprendizaje automático, utilizaban software con licencia de proveedor, como SAS, SPSS y FICO, entre otros.
Con el auge del software de código abierto y el aumento en la generación de datos, se comienza a usar bibliotecas Python o R para entrenar modelos de aprendizaje automático. Sin embargo, el uso de los modelos en producción seguía siendo un problema.
El surgimiento de la virtualización y los contenedores, ha resuelto el despliegue del modelo de forma escalable mediante el uso de contenedores Docker y orquestadores como Kubernetes.
Recientemente, la evolución de estas soluciones ha provocado la aparición de plataformas de implementación de ML en la nube que cubren toda la iteración de experimentación, capacitación, implementación y monitoreo de modelos, siendo Azure ML Services, MLFlow y AWS SageMaker, las más usadas, entre otras.
En el siguiente artículo nos hemos puesto manos a la obra y preparado un pequeño laboratorio para poder empezar a adoptar MLOps como principio fundamental