Arquitectura de Software para Sistemas de Machine Learning

8 min read
17 de agosto de 2023

A lo largo de los años y de manera colectiva, en la comunidad de Arquitectura de Software hemos construido un cuerpo de conocimientos que facilita significativamente nuestro trabajo y que incluye prácticas, principios y herramientas. 

Cada vez que aparece una nueva tecnología, con ella llegan retos nuevos que nos obligan a renovar partes de ese cuerpo de conocimiento. 

En este artículo repasamos algunas de las tecnologías que en los últimos años han transformado el trabajo en Arquitectura de Software para después enfocarnos, específicamente, en los retos y oportunidades para mejorar los procesos de desarrollo para sistemas que incluyen componentes de Machine Learning.

Software Oriented Architecture, Cloud Computing e Internet of Things: los antecedentes nos sirvieron para entender los retos que trae el Machine Learning

Hace tan solo 15 años, la comunidad de arquitectura de software empezó a dejar atrás los  sistemas monolíticos  para empezar a construir sistemas basados en servicios con funcionalidades independientes. 

Esta nueva tecnología, que pasaría a conocerse como Software Oriented Architecture, implicó que el mundo de la arquitectura de software empezara a desarrollar prácticas y herramientas enfocadas en el modelamiento, descubrimiento, monitoreo y composición de servicios, pero ese no fue el único cambio. 

Las características de estas nuevas arquitecturas, trajeron muchos beneficios pero también características específicas que nos obligaron a enfocarnos en atributos de calidad diferentes. El hecho de tener servicios desarrollados por diferentes organizaciones y el no tener control sobre toda la arquitectura hizo que los principios de interoperabilidad, seguridad, desempeño y disponibilidad tuvieran un nuevo protagonismo. 

Algo parecido ocurrió con la llegada del Cloud Computing. En este caso, el reto iba un paso más allá porque, además de tener distintas partes de un sistema distribuidas en diferentes organizaciones, la nube permitió que nuestros sistemas también se vieran potenciados por hardware externo. 

Con el Cloud computing aparecen retos nuevos y específicos de ese tópico, como  compartir recursos con muchas organizaciones, hacer transacciones distribuidas, manejar cargas de trabajo y, sobre todo, manejar el data storage distribuido.

Al igual que como había pasado con la llegada de SOA, de los retos propios del Cloud Computing emergen atributos de calidad, como escalabilidad, elasticidad, disponibilidad y seguridad, que reclaman un nuevo protagonismo. 

Más recientemente, el Internet of Things (IoT) se ha convertido en otra tecnología que nos ha impulsado a crear nuevas prácticas y principios de arquitectura.

En esta ocasión, los retos están relacionados con seguridad y privacidad, la necesidad manejar una enorme cantidad de datos y con la optimización del consumo de recursos, algo particularmente importante si tenemos en cuenta que los dispositivos que usan esta tecnología tienen limitaciones de cómputo y en muchos casos de batería. 

De nuevo, frente a estos retos cobran protagonismo atributos de calidad que están relacionados con seguridad, privacidad, y optimización de energía y recursos.

Lo que está pasando con la llegada del Machine Learning es un momento más en esta historia. El desarrollo de sistemas que utilizan dicha tecnología crea nuevas prácticas y principios, pero antes de conocerlas en detalle, es necesario detenernos en:

¿Cuáles son los retos que trae el Machine Learning para la Arquitectura de Software?

Un componente de Machine Learning es un componente de software; sin embargo introduce retos que son particulares de esta tecnología, veámos algunos de ellos. 

Comportamiento dependiente de los datos

Un modelo de Machine Learning aprende su funcionalidad basado en unos datos de entrenamiento. 

Estos datos de entrenamiento pueden ser un conjunto que contiene datos sintéticos, simulados, públicos o de la empresa. Una vez son procesados, obtenemos nuestra “raw data” y es necesario dividirla  en tres grupos: datos de evaluación, de entrenamiento y de prueba. 

Ya con los datos de entrenamiento podemos empezar un “data pipeline” a partir del cual transformamos los datos en los features del modelo, construimos el código de entrenamiento y obtenemos, finalmente, un modelo entrenado.

El siguiente paso es realizar pruebas y evaluaciones a partir de la raw data que reservamos para estas tareas.  Si el modelo entrenado arroja los resultados esperados, comienza su proceso de integración. De lo contrario es necesaria una nueva iteración. 

Este proceso que de entrada requiere mucha experimentación se vuelve un reto todavía más importante en la etapa de integración. Allí es posible encontrar que los datos de entrenamiento de nuestro componente de Machine Learning son diferentes a los datos de producción; el problema es que el comportamiento de nuestro componente va depender de qué tan similares son estos dos conjuntos de datos. 

Detectar y responder al drift

Un sistema que tenga componentes de Machine Learning debe ser capaz de detectar y responder al “drift”, es decir cuando el desempeño del modelo empieza a disminuir con el paso del tiempo. 

No basta con monitorear el modelo, hay que ayudarlo a evolucionar y hacer esfuerzos constantes de mantenimiento.

Existe un “data drift” que está relacionado con el cambio de los datos, como cuando hay un producto nuevo y con características distintas y el modelo no logra reconocerlo bien. 

Pero también puede pasar que haya un cambio significativo en el problema que nos implica reevaluar los requerimientos y ver si el modelo debe ser totalmente replanteado.

Existen organizaciones que tienen enormes cantidades de datos y los recursos suficientes para re-entrenar sus modelos con mucha frecuencia. Sin embargo, estos casos son excepcionales por lo que la mayoría de las organizaciones que utilicen sistemas basados en Machine Learning requieren recolectar métricas para hacer un monitoreo que les permita detectar cambios en el rendimiento y saber cuándo el modelo realmente necesita ser entrenado nuevamente. 

Captura de manera oportuna de logs, métricas e información del usuario para el reentrenamiento

¿En qué momento es necesario re-entrenar y cuáles son los datos para hacerlo? Este tipo de preguntas son las que debemos plantearnos para garantizar el mantenimiento y evolución de un modelo. 

Si una organización cuenta con datos etiquetados ya tiene resuelta una parte de este problema pero, si no es así, se abre otro abanico de preguntas: ¿El etiquetado de los datos va a ser manual, automatizado o semiautomatizado?, ¿va a haber inputs de usuarios?, ¿cuál es la interfaz para que eso ocurra? o ¿qué tanta es la demora entre el momento en que el modelo hace la inferencia y el etiquetado?.

Las respuestas van a ser diferentes para cada caso, pero lo que sí es una regla general es que, cuando usamos en este tipo de sistemas, debemos tener logs y métricas que nos indiquen si el modelo está fallando y qué es exactamente lo que está afectando su desempeño.

Captura de manera oportuna de logs, métricas e información del usuario para el reentrenamiento

¿En qué momento es necesario re-entrenar y cuáles son los datos para hacerlo? Este tipo de preguntas son las que debemos plantearnos para garantizar el mantenimiento y evolución de un modelo. 

Si una organización cuenta con datos etiquetados ya tiene resuelta una parte de este problema pero, si no es así, se abre otro abanico de preguntas: ¿El etiquetado de los datos va a ser manual, automatizado o semiautomatizado?, ¿va a haber inputs de usuarios?, ¿cuál es la interfaz para que eso ocurra? o ¿qué tanta es la demora entre el momento en que el modelo hace la inferencia y el etiquetado?.

Las respuestas van a ser diferentes para cada caso, pero lo que sí es una regla general es que, cuando usamos en este tipo de sistemas, debemos tener logs y métricas que nos indiquen si el modelo está fallando y qué es exactamente lo que está afectando su desempeño.

Atributos de calidad emergentes 

Los sistemas con componentes de Machine Learning tienen atributos de calidad con los que ya estamos familiarizados pero que tienen nuevos matices o cobran una mayor importancia. Entre ellos podemos encontrar la capacidad de realizar monitoreo, observabilidad, tolerancia a fallos, seguridad y privacidad, así como escalabilidad y performance.

Sin embargo, y como lo hemos visto en otras tecnologías, también aparecen atributos de calidad completamente nuevos o que tienen un protagonismo que antes no tenían: poder explicar por qué un modelo toma una decisión (explainability), asegurarnos de que sea justo con cualquier tipo de usuario (fairness), el rol central de datos (data-centricity) y otros que todavía necesitan definiciones más precisas, como la ética. 

Podríamos pensar que en principio este último tipo de atributos le conciernen únicamente al desarrollo del modelo de Machine Learning. Sin embargo, es importante que tengamos en cuenta que estos atributos empiezan a tener un impacto en el sistema y su arquitectura cuando se vuelve necesario implementar mecanismos para observar si en efecto se están cumpliendo. 

Trabajo conjunto entre diferentes equipos

El desarrollo de sistemas con componentes de  Machine Learning por lo general involucra tres equipos con conocimientos, formas de comunicarse y workflows muy diferentes.

Por un lado, tenemos a los científicos de datos que normalmente están encargados del desarrollo del modelo mientras, por otro lado, están los equipos que se hacen cargo de la integración y operaciones que suelen estar compuestos por ingenieros de software. 

La separación entre estos tres equipos hace que a menudo nadie tenga un contexto completo del sistema, por lo que es necesario hacer esfuerzos decididos para mantener la comunicación, evitar que estas tres comunidades trabajen independienteme y, sobre todo, para que en todo momento comprendan las consecuencias de las decisiones que están tomando. 

Ahora que ya hemos hablado de los retos que trae el Machine Learning para la arquitectura de software me gustaría detenerme en las prácticas con las que hemos estado trabajando para hacerle frente a estos retos

¿Qué prácticas de arquitectura de Software nos ayudan a afrontar estos retos?

La arquitectura de software debe tener un papel fundamental en el desarrollo de sistemas que usan Machine Learning. Esto es así porque le permite a cada uno de los equipos involucrados (desarrollo del modelo, integración y operaciones) comunicarse mejor y tener una visión de conjunto.

A continuación vas a encontrar algunas prácticas que desde la arquitectura de software podemos usar para optimizar el desarrollo de este tipo de proyectos. 

Darle un papel central a la Arquitectura de Software 

Un sistema de ML siempre va a tener tres tipos de componentes, los tradicionales, los componentes de Machine Learning y la parte de operaciones que va a estar a cargo del monitoreo.

Cuando cada uno de los equipos a cargo de estos componentes termina su workflow llegamos a una etapa de  integración y despliegue y se vuelve al comienzo del ciclo que debe partir de la planeación que debemos hacer usando la arquitectura del sistema como base.

Facilitar la Co-arquitectura

En este tipo de sistemas, una cosa es la arquitectura que produce el modelo entrenado y otra muy distinta, aunque con puntos de contacto, es la arquitectura que utiliza ese modelo entrenado como un componente. 

Estas arquitecturas, por lo general, están a cargo de dos equipos separados que además suelen estar compuestos por profesionales con perfiles diferentes (científicos de datos, por un lado, e ingenieros de software por el otro)

La co-arquitectura consiste en desarrollar en sincronía y en paralelo ambas arquitecturas para garantizar la compatibilidad y el alineamiento con el sistema de monitoreo, pero también para facilitar la comunicación y el intercambio de conocimiento entre los dos equipos. 

Esta forma de trabajar trae una ventaja adicional y es que, trabajando en conjunto, es menos probable que la arquitectura del modelo entrenado quede abandonada y que se entienda la importancia y se lleven a cabo esfuerzos para su mantenimiento y evolución constante. 

Entender el Rol central de los Datos

No es un secreto que los datos son la parte central de este tipo de componentes y sistemas. Por eso, las decisiones de diseño deben estar fundamentadas en información clara sobre los datos y su calidad. 

Por este motivo, desde la arquitectura de software es importante que nos hagamos preguntas clave para tener claridad sobre cosas como cuál es el origen de los datos antes y durante la producción, qué métodos vamos a usar para tratarlos, cuál va a ser la adaptabilidad del modelo frente a cambios en los datos, qué tan a menudo va a ser necesario hacer un reentrenamiento, entre otras. 

Tener al monitoreo como atributo de calidad

Las métricas para monitorear el desempeño de un sistema basado en Machine Learning son muy específicas para este tipo de sistema. Por eso, una práctica recomendable es tener muy claro cuáles son las métricas que vamos a usar para monitorear el modelo y el sistema. 

También es fundamental definir cuáles son las acciones que vamos a tomar cuando detectemos drift, qué tan frecuentemente vamos a hacer reentrenamientos o si podemos automatizar el monitoreo dentro de un ciclo de MLOps. 

Construir patrones y tácticas

Estamos en un campo muy nuevo y todavía no tenemos muchos patrones y tácticas de arquitectura. Las personas que están aplicando estos modelos y sistemas en la industria son clave para enseñarnos cómo adaptar patrones existentes o para empezar a construirlos de manera estandarizada y basándonos en la colaboración y conocimiento colectivo. 

Conclusiones

Una vez más, los avances tecnológicos que afectan el campo de la arquitectura de software nos están dando la oportunidad de ampliar el cuerpo de conocimientos de nuestra comunidad. 

Asimismo, el desarrollo de sistemas que usan Machine Learning nos está dando la oportunidad de establecer nuevos tipos de colaboración con el mundo de la Ciencia de Datos, algo que nos beneficia mutuamente pues, mientras como arquitectos de software podemos aprender de sus prácticas, mientras fortalecemos las de nuestros colegas con prácticas y herramientas propias del mundo del desarrollo y la arquitectura de software. 

Nueva llamada a la acción

 

Suscríbete al
Blog Pragma

Recibirás cada mes nuestra selección de contenido en Transformación digital.

Imagen form