Ingeniería de software centrada en Machine Learning (ML) aplicada en PayPal
El proceso de desarrollo del aprendizaje automático (Machine Learning) requiere una gran cantidad de codificación y apoyo de herramientas por parte del equipo de ingeniería. En este blog, se describirá cómo el grupo de ingeniería, que soy parte, aplica los principios de ingeniería de software a los métodos, técnicas, metodologías y herramientas para dar soporte a varios casos de uso de Machine Learning (ML).
Como organización de ingeniería de Machine Learning de PayPal, se potencia la ciencia de datos con herramientas automatizadas para crear modelos y funciones a escala. Al igual que otras organizaciones, nos enfrentamos a retos cada vez mayores en la gestión del desarrollo de software específico para el aprendizaje automático, así como en el tratamiento de los problemas únicos que se encuentran durante el desarrollo de la infraestructura y las aplicaciones de ML a gran escala.
Para hacer frente a estos retos, se adaptó la disciplina de la ingeniería de software (IS) para que se centre enML:
· Se definieron métodos y técnicas basados en los principios de IS para integrar las prácticas de desarrollo de ML.
· Sobre este conjunto de métodos y técnicas, se establecieron metodologías de ciclo de vida para el modelo y sus características
· Se crearon herramientas automatizadas para desarrollar, producir y gestionar productos de ML de acuerdo con las metodologías.
Aplicación de los principios.
Los principios de la ingeniería delsoftware y su aplicación a ML
En este blog, se describe cómo se aplican los siguientes principios de IS a nuestros métodos, técnicas, metodologías y herramientas:
· Rigor y formalidad.
· Incrementalidad.
· Separación de intereses.
· Modularidad.
· Abstracción.
· Anticipación al cambio.
· Generalidad.
Rigor y formalidad.
Se trabaja en un equipo Scrum de científicos de datos e ingenieros de software para crear equipos heterogéneos con fortalezas tanto en la investigación/modelado de ML como en la ingeniería.A la vez que se permite un alto grado de creatividad e innovación, se sigue un proceso de desarrollo de software de ML bien definido del que las especificaciones de ML son una parte central.
En el marco de este proceso, eldesarrollo se realiza en varias fases claramente definidas:
Incorporación de datos
Con el continuo aumento de los requerimientos empresariales, existe una necesidad constante de incorporar nuevas fuentes de datos. Se crearon normas para el modelo de datos y los procesos de incorporación con el fin de conservar los datos recopilados y garantizar la coherencia, la fiabilidad y la confianza.
Investigación
En esta fase, los científicosde datos se centran en el modelado y la creación de prototipos. Esta fase es muy exploratoria; por lo tanto, el objetivo de nuestra organización de ingeniería aquí es proporcionar herramientas para acortar las interacciones de investigación y acelerar el proceso general.
Productización
El objetivo principal de esta fase es entregar ML de grado de producción en términos de rendimiento y capacidad de mantenimiento. Se invierte mucho tiempo y esfuerzo en la arquitectura y el diseño para asegurar de que se desarrolla un software de alta calidad de acuerdo con los principios de IS y nuestras propias buenas prácticas. Como parte de este proceso, a veces se tiene que dar un paso atrás en la fase de investigación para ajustar los algoritmos y que estos sean viables en términos de consumo de recursos y estabilidad. Para acelerar el proceso de despliegue en los entornos de producción, se invierte constantemente en la automatización de las pruebas para identificar rápidamente los problemas en las primeras etapas y para construir pipelines CI/CD.
Monitorización
Se practica lamonitorización del sistema para asegurar que los pipelines estén funcionando yson funcionales, así como para evaluar continuamente el rendimiento y laestabilidad del modelo con métricas generales y umbrales basados en anomalías.
Actualización del modelo
Se trata de un proceso automatizado para que los modelos aprendan continuamente a lo largo del tiempo a partir de datos más nuevos y logren un rendimiento estable del modelo sin que ello afecte a la producción diaria.
Este proceso formal de desarrollo ayuda a trabajar eficientemente en equipos heterogéneos en varios sitios.
Para dar más formalidad a las áreas críticas, se define y se hace un seguimiento de los KPIs para recompensar el quitar funciones, medir la adopción de funciones, evaluar la estabilidad y la precisión de los productos, así como la supervisión continua y la cobertura de las pruebas.
Incrementalidad
Los flujos de trabajo de ML son muy poco lineales y contienen varios bucles de retro alimentación. La peculiaridad de la ingeniería de características está relacionada con la cantidad de experimentación necesaria para establecer un buen modelo para el problema. Se trabaja en un modo de desarrollo iterativo-incremental, siguiendo la metodología de "prototipar rápidamente y obtener retroalimentación inmediata".
Prototipar rápidamente.
· La ingeniería de funciones consiste básicamente en crear nuevas funciones a partir de las existentes o de datos sin procesar. Los datos de las funciones existentes se almacenan y gestionan en el almacén de funciones y se puede acceder a ellos fácilmente a través de los cuadernos de PayPal o las herramientas de la interfaz de usuario.
· Desarrollamos herramientas de interfaz de usuario para la creación rápida y sencilla defunciones. Los científicos de datos pueden crear decenas de variaciones de algunas funciones con sólo unos pocos clics.
Obtener retroalimentación inmediata.
La selección de características requiere datos históricos. En el caso de las nuevas características, es necesario simular su lógica en el pasado de manera oportuna y rentable, ya que algunos modelos pueden requerir el acceso a datos más antiguos. Las directrices que se definen aquí son:
· Las funciones deben desarrollarse de tal manera que puedan ejecutarse en cualquier punto del tiempo (PiT) de los datos históricos (también conocido como viaje en el tiempo para la función); lo llamamos simulabilidad de la función.
· Se tiene una estructura de funciones por capas en la que las funciones en línea se crean sobre las funciones por lotes y en tiempo casi real (NRT). Para simular estas características, se necesita activar la simulación ascendente, lo que requiere una buena gestión del linaje y la disponibilidad de los datos de las características ascendentes en el almacén de características.
· Aveces no es factible ejecutar características por lotes para los datos históricos, por lo que aquí se utilizan varias técnicas específicas: (i)muestrear los datos brutos de una población específica, (ii) ejecutar una simulación en una población reducida o (iii) reducir la granularidad de las instantáneas de PiT resultantes, por ejemplo, ejecutar cálculos mensuales enlugar de diarios.
Se emplean recursos significativos y esfuerzos para crear un entorno de simulación aislado con gran paridad respecto a los datos de producción y las plataformas informáticas. Esto permite realizar experimentos libremente, sin estresar los servicios de producción. Otra información valiosa que se obtiene durante la simulación es sobre el rendimiento de las funciones, lo que permite ajustar y optimizar la lógica antes de la fase de producción.
Esta metodología proporciona rápidos bucles de retroalimentación para la ingeniería de características. Tras varios ciclos, se seleccionan las características más predictivas para el modelo y se pasa a la fase de producción.
Separación de intereses.
Dado que las necesidades de las empresas son cada vez más amplias y profundas, la entrega de soluciones de ML requiere niveles cada vez mayores de esfuerzo electrónico directo por parte de los ingenieros, lo que no es una estrategia de escalado sostenible.
Para hacer frente a este reto, se separanlos proyectos de ML en tres niveles de complejidad, un enfoque que permitedesbloquear las dependencias y agilizar el proceso.
Para las funciones sencillas, se proporcionan herramientas de autoservicio que los científicos de datos pueden utilizar para crear funciones sin el apoyo directo de los ingenieros. Se espera que un científico de datos pueda pasar de la idea a la producción en cuestión de horas. Entre bastidores, el sistema funciona con un coste total de propiedad mucho más bajo, ya que garantiza un cálculo de resultados eficiente y coherente y elimina las duplicaciones de la lógica de las funciones y las duplicaciones de esfuerzos entre equipos y ubicaciones.
Para los proyectos más complejos, se planifica el desarrollo en paralelo para reducir el número de iteracciones entre los científicos de datos y los ingenieros de software. Para crear un puente entre la creación de prototipos y la producción, se fomenta el uso de cuadernos(notebooks) de PayPal con normas y plantillas de codificación de producción incorporadas.
Para la generación de características de vanguardia, se desarrollan plataformas como el gráfico de activos de clientes.
Modularidad.
El atributo clave de la ingeniería de sistemas de software a gran escala es la modularidad. En el software, las principales unidades de reutilización son las funciones, los algoritmos, las bibliotecas y los módulos.
Se definen las características de ML como funciones para reutilizar o personalizar, y constituyen la unidad básica de entrega. Se catalogan las funciones para que puedan encontrarse fácilmente. Se fomenta la creación de una base de código independiente para cada función, de modo que pueda ser utilizada o ampliada fácilmente por funciones y modelos posteriores.
Otra norma importante que se implica es la inter-operabilidad de las características, es decir, que las características existentes puedan ser utilizadas fácilmente por otras características o modelos, independientemente de la herramienta de creación de características o de la plataforma de cálculo en línea / fuerad e línea / NRT.
La modularidad y la reutilización de las características son fundamentales para la organización de ciencia de datos, que incluye cientos de científicos de datos e ingenieros en diferentes ubicaciones.
Abstracción.
Las diferencias entre los entornos de investigación y de producción aumentan el esfuerzo de comunicación e implementación de soluciones. Por ejemplo, durante la fase de investigación,los científicos de datos aprovechan sobre todo las herramientas de almacén de datos (producto basado en SQL) para desarrollar modelos, mientras que en producción se utilizan varias plataformas como el servicio en tiempo real, el streaming y los trabajos por lotes de big data para la inferencia. Para resolver este problema, se utiliza un lenguaje específico del dominio (DSL)para abstraer los detalles de las plataformas de ejecución:
· Creación de variables basada en la ontología, lo que permite a los científicos de datos concentrarse únicamente en la propia lógica. El DSL subyacente puede compilarse en diferentes plataformas para su ejecución.
· La compatibilidad con PiT en el SQL personalizado permite a los científicos de datos investigar modelos utilizando la instantánea histórica de la base de datos; bajo la capa se puede seleccionar los datos de la instantánea PiT y realizar la desduplicación de los datos subyacentes, si es necesario.
Hoy en día, la representación de las especificaciones del modelo varía según el algoritmo de entrenamiento y los marcos de trabajo. Para que la plataforma sea compatible con todos los tipos de modelos, se ha desarrollado un formato de especificación de modelos y un motor de inferencia de modelos internos que pueden admitir todos los tipos de modelos que se utilizan actualmente en las soluciones que se ofrecen (lineales, basados en árboles, redes neuronales [PMML, H2O], aprendizaje profundo basado en tensor flow, etc.).
Anticipación al cambio.
Los cambios son inevitables, por lo quepara cada modelo/característica que se construye, se planea retirarlo con elegancia. Para lograrlo, se hacen dos cosas principales:
· Gestionar el linaje entre las características y los modelos. Esto ayuda a identificar todas las características redundantes y a analizar las dependencias ascendentes de las características que deben retirarse.
· Proceso rápido y sencillo para realizar el análisis del impacto del cambio. Lo más sencillo sería realizar el análisis de impacto en el entorno de puesta en escena y, a continuación, comparar los resultados del entorno de producción y de puesta en escena mediante herramientas de comparación de resultados demodelos. En cambio, se utiliza la simulación para acelerar este proceso y evaluar el impacto en horas en lugar de semanas.
Generalidad.
Aparte de las entregas comerciales, se busca constantemente infra/herramientas generales que puedan soportar numerosos casos de uso similares.
Se cuenta con equipos de ingeniería en distintos lugares, por lo que la revisión del diseño sirve de punto de encuentro para los equipos. Se hacen dos preguntas principales:
· ¿Se puede resolver este problema con una solución existente (reutilizada)? En caso afirmativo, la otra solución utiliza el principio de generalidad.
· ¿Esta herramienta/capacidad es capaz de resolver múltiples problemas? Si es así,debería ser una buena solución generalizada.
· Ventajas de la generalidad:
· El software es más reutilizable porque resuelve problemas más generales y, portanto, puede adaptarse o ampliarse fácilmente para resolver problemas similares.
· El software puede desarrollarse más rápidamente porque se reutilizan módulos/servicios/herramientas de propósito general ya existentes.
Resumen.
Los principios, las técnicas, las metodologías y las herramientas descritas anteriormente ayudan a acelerar el proceso de desarrollo y despliegue de ML, a ahorrar valiosos recursos humanos y de hardware, y permiten escalar con el negocio y, en última instancia, servir a nuestra base de clientes global.
Gracias a Zhu Danickpor ser co-autor de este artículo.
Por favor, suscríbase alblog en Medium o póngase en contacto en ai-blog@paypal.com con cualquier pregunta.
Traducido por Alfredo Barón Ocampo