Los beneficios reales de la transformación de Machine Learning solo se puede conseguir cuando los modelos se utilizan constantemente en una retroalimentación de los datos de producción.
Existen numerosas formas en las que las empresas pueden o necesitan implementar sus modelos de Machine Learning, lo que dicta son las limitaciones organizativas.
API, la forma más común de implementar un modelo
No se de extrañar que la forma más común de implementar Machine Learning sea exponer el modelo como un servicio de API. Las APIs pueden conectarse fácilmente a aplicaciones de producción, dado que existe una necesidad de ingeniería para ello.
Docker y Flask, la tecnología más común para los modelos Python
La mayoría de los modelos son desarrollados en Python, por lo que se utiliza como servicio API utilizando Docker y Flask. Los contenedores proporcionan un entorno aislado para que los modelos se ejecuten, manejan bien las dependencias de los modelos y proporcionan una capa de seguridad y gestión de riesgo lejos del resto de la pila de ingeniería.
El despliegue o implementación de modelos Machine Learning es el proceso para hacer que los modelos estén disponibles en entornos de producción, donde pueden proporcionar predicciones a otros sistemas de software. Una vez que se implementan los modelos en la producción es que comienzan a agregar valor a las empresas, por lo que es fundamental este paso. Sin embargo, no es tan sencillo la implementación de los modelos. Lleva un tiempo increíblemente largo desde la selección del modelo correcto hasta la integración del modelo en entornos de producción.
Dificultad en los sistemas de Machine Learning
Una de las razones por las que la implementación o despliegue de los modelos de Machine Learning es complejo es que incluso la forma en que el concepto tiende a formularse es engañosa. En realidad, en un sistema típico para desplegar modelos de Machine Learning, la parte del modelo es un componente diminuto. El modelo es una pequeña fracción de un sistema global.
Por lo tanto, los sistemas de Machine Learning requiere la cooperación entre múltiples equipos y múltiples experticias. Esto significa que no se puede pensar en la implementación del modelo de forma aislada, sino que es necesario planificarla a nivel de sistema.
El despliegue inicial no es realmente la parte difícil, aunque parezca ser un reto. Es el mantenimiento continuo del sistema, las actualizaciones y los experimentos, la auditoría y el seguimiento lo que hace que la deuda técnica real comience a acumularse. Es necesario pensar cuidadosamente en la arquitectura de tu sistema si deseas afrontar los retos que se describen más adelante.
Arquitectura del sistema de Machine Learning
El punto de partida para la arquitectura debe ser siempre los requisitos del negocio y los objetivos más amplios de la empresa. No se debe buscar la última tecnología, es necesario primero entender las limitaciones que se tiene, qué valor está creando y para quién.
Algunas de las preguntas que te puedes hacer para definir la arquitectura son las siguientes:
- ¿Necesitas poder generar predicciones en tiempo real, en milisegundos o segundos, o bastará con generar las predicciones 30 minutos o un día después de recibir los datos de entrada?
- ¿Con qué frecuencia esperas actualizar los modelos?
- ¿Cuál será la demanda de predicciones?
- ¿Con qué tamaño de datos se está tratando?
- ¿Qué tipos de algoritmos espera utilizar y si realmente se necesita?
- ¿Se encuentra en un entorno regulado en el que la capacidad de auditar el sistema es importante?
- ¿Se puede hacer esta tarea si Machine Learning?
- ¿Cuán grande y experimentado es su equipo para la implementación y mantenimiento del sistema?
Una vez que hayas hecho un balance de las necesidades, es útil considerar algunas opciones de arquitectura de alto nivel para un sistema de Machine Learning. La siguiente lista no es la única, pero si son los enfoques más utilizados de arquitectura.
Cada una de estas opciones tienen sus ventajas y desventajas, como se muestra en la tabla. Los detalles pueden variar significativamente dentro de estas amplias categorías. Es importante mencionar que la opción 3 tiene a requerir un diseño complejo y una configuración de infraestructura.
Por lo general la opción 1, tiende ser la más implementada por términos de rendimiento vs. Complejidad, particularmente para organizaciones sin un equipo de desarrolladores maduro.
Elección del idioma
Sería fácil implementar si el lenguaje de programación que utiliza en su entorno de investigación se ajusta al entorno de producción. Esto significa típicamente Python, debido a lo fácil que es utilizarlo para el procesamiento de datos y desarrollar modelos de Machine Learning. Sin embargo, si la velocidad es una preocupación real entonces Python puede no ser factible, aunque hay muchas maneras de sacar más provecho de Python.
Esta decisión de cambiar de idioma por preocupaciones de rendimiento es una decisión importante, solo debe tomarse cuando sea necesario, ya que los gastos adicionales de comunicación entre los equipos de investigación y producción se convierten en una carga significativa.
Principios claves para el diseño de un sistema de Machine Learning
Independientemente de cómo decidas diseñar la arquitectura del sistema, debes tener en cuenta los siguientes principios:
Construir para que sea reproducible desde el principio: en caso de que tuvieras que explicar una predicción del pasado, mantén todas las entradas y salidas del modelo, así como todos los metadatos relevantes como la configuración, las dependencias, la geografía, las zonas horarias y cualquier cosa que creas que puedas necesitar. Presta atención al versionado, incluyendo los datos de su entrenamiento.
Trata tus pasos de Machine Learning como parte de tu construcción: es decir, automatizar la formación y la publicación de modelos.
Plan de extensibilidad: en caso que vayas a actualizar los modelos de forma regular, debes pensar cuidadosamente como lo harás desde el principio.
Modularidad: en la medida de lo posible, trata de reutilizar el código de preprocesamietno y de la ingeniería de características del entorno de investigación en el entorno de producción.
Pruebas: planea pasar más tiempo probando las aplicaciones de Machine Learning, porque requieren tipos adicionales de pruebas.
Flujos de datos reproducibles
A medida que se pasa del entorno de investigación a las aplicaciones listas para la producción, un área clave a tener en cuenta es la creación de flujos de datos reproducibles para sus modelos. Dentro de estos, debes abarcar:
- Recopilación de fuente de datos
- Preprocesamiento de datos
- Selección de variables
- Construcción de modelos
Naturalmente, esto es más fácil decirlo que hacerlo, particularmente en la etapa de recolección de fuentes de datos, si los datos son un objetivo móvil. Si la reproducción es un requisito reglamentario, tendrá que pensar cuidadosamente en cosas como los controles y el versionado de archivos, bases de datos y otras fuentes de datos utilizados durante el entrenamiento con el modelo. Los flujos de datos deben permitir levantar y dejar caer modelos pre entrenados y persistentes en otras aplicaciones, donde pueden servir para hacer predicciones. Aunque es posible escribir código personalizado para hacerlo, y en casos complejos, puede ser que lo tengas que hacer, lo importante acá es que no te compliques mucho.
Herramientas
Contenedores
Desde la llegada de Docker en 2013, los contenedores han revolucionado la forma en que se implementa el software. Los beneficios de los contenedores se aplican igualmente, a los sistemas de Machine Learning. La reproducción de sistemas en contenedores es mucho más fácil porque las imágenes en contenedores garantizan que las dependencias del sistema operativo y del tiempo de ejecución permanezcan fijas. La capacidad de generar entornos precisos y del tiempo de ejecución permanezcan fijas.
La capacidad de generar entornos precisos de forma consistentes y rápida es una gran ventaja para la reproducción durante las pruebas y la formación. Los contenedores también funcionan bien con los flujos de trabajos modernos de integración e implementación continuo, y tiente implicaciones para la escalabilidad.
En resumen, puedes construir todo el sistema de Machine Learning para que todas sus partes, incluyendo el modelo de entrenamiento, pruebas y servicio, puedan ser almacenadas en contenedores.
Estrategias de implementación
Explora las diferentes maneras de implementar el software, por ejemplo, puedes crear un modo sombra, en donde se capturan las entradas y predicciones de un nuevo modelo en producción sin cumplir realmente con esas predicciones. En su lugar, eres libre de analizar los resultados, sin consecuencias significativas si se detecta un error.
Pruebas
Las pruebas del sistema son cruciales en todo el proceso. Las pruebas propias del sistema de Machine Learning no son suficientes. Además de esas pruebas, vale la pena ampliar el conjunto de herramienta para incluir las siguientes:
- Pruebas diferenciales: donde se comparan las predicciones promedio o por fila dadas por un nuevo modelo versus las predicciones dadas por el modelo anterior en un conjunto de datos de pruebas estándar. Necesitas ajustar la sensibilidad de estas pruebas dependiendo del caso de uso del modelo. Estas pruebas puedes ser vitales para detectar modelos que de otro modo parecerían saludables, por ejemplo, cuando se ha utilizado un conjunto de datos obsoleto en la formación, o cuando una característica se ha eliminado accidentalmente del código de selección de características. Sin pruebas diferenciales efectivas, es posible que no tengas idea de estos errores hasta mucho después de que el daño esté hecho.
- Pruebas de referencia: estas pruebas comparan el tiempo que toma entrenar o servir predicciones del modelo de una versión a la siguiente. Evitan que se introduzcan adiciones de código ineficientes en las aplicaciones de Machine Learning. Una vez más, esto es algo que es difícil de detectar con las pruebas tradicionales.
- Pruebas de cargo o esfuerzo: estas no son pruebas específicas de Machine Learning, pero dadas las inusualmente grandes demandas de CPU y memoria de algunas aplicaciones de Machine Learning, este tipo de pruebas son particularmente valiosas.
Implementación o despliegue
No hay nada en esta sección que sea diferente a lo que normalmente haces cuando implementas cualquier otro sistema, por lo que no te tienes que complicar tanto. Cuando se trata de implementaciones, debe decidir si vas a utilizar una Plataforma como Servicio (PaaS) o una Infraestructura como Servicio (IaaS).
Una plataforma como servicio puede ser ideal para prototipos y negocios con poco tráfico. Eventualmente, una vez que el negocio crezca o el tráfico aumente, vas a necesitar adoptar más complejidad como una infraestructura como servicio.
Si las aplicaciones se encuentran en contenedores, las implementaciones en la mayoría de las plataformas o infraestructuras tienden a ser más fáciles.
Debes asegurarte que los despliegues se realicen a través de una plataforma de Despliegue Continuo.
Monitoreo y Alerta
Esto no es algo específico del sistema de Machine Learning, pero el monitoreo y las alertas pueden ser particularmente importantes cuando se despliegan los modelos. A medida que los sistemas crecen en complejidad, vas a necesitar capacidades de monitoreo y alertas para informar cuando las predicciones para un sistema en particular están fuera del rango esperado. El monitoreo y la alerta también pueden estar relacionados con preocupaciones tangenciales como, por ejemplo, cuando entrenas una red neuronal brillante, pero te gastas todo el presupuesto mensual del alojamiento y entrenamiento en la nube en tan solo 30 minutos.
Existen muchas herramientas de código abierto y de pago para ayudarte a realizar este tipo de tareas, y realmente no importa cuál de ellas utilice, siempre y cuando te tomes el tiempo necesario para configurar correctamente la solución elegida y así obtener una visibilidad completa del sistema.
Las plataformas, herramientas y marcos para implementar Machine Learning están evolucionando rápidamente, por lo que es probable que todo este ciclo de vida de implementación y gestión de sistemas de Machine Learning se vea muy diferente dentro de unos años.
Con esto finalizamos la explicación. Ya tienes una base de cómo puedes implementar tus modelos de Machine Learning, por lo tanto te dejo la siguiente pregunta, ¿Cuáles de las siguientes afirmaciones crees tú que sea cierta?
Opción 1: Puedes implementar tus modelos de Machine Learning sin la ayuda y coordinación con el resto de disciplina de desarrollo.
Respuesta Incorrecta. Los sistemas de Machine Learning requiere la cooperación entre múltiples equipos y múltiples experticias. Esto significa que no se puede pensar en la implementación del modelo de forma aislada, sino que es necesario planificarla a nivel de sistema.
Opción 2: La forma más fácil de implementar un modelo de Machine Learning es a través de un servicio API.
Respuesta Correcta. Las APIs pueden conectarse fácilmente a aplicaciones de producción, dado que existe una necesidad de ingeniería para ello.
Opción 3: Al desarrollar un modelo de Machine Learning este es estático y no es necesario modificarlo o ajustarlo en un futuro.
Respuesta Incorrecta. Lo modelos de Machine Learning son cambiantes por múltiples razones, puede ser que el modelo cambie, los datos cambien, por lo que se debe estar en constante monitoreo.
Muy bien explicado, me ha brindado una visión más realista de como sería trabajar con ML. Gracias!
Hola Raúl, me alegro que la información que publico te este ayudando en tu aprendizaje. Saludos