Presentando Flyte: Una Plataforma para el Procesamiento de Datos y Machine Learning Basada en la Nube

Antonio Luna
Mar 31 · 5 min read
Image for post
Image for post

Este artículo fue publicado originalmente el 7 de enero 2020 en eng.lyft.com.

Hoy Lyft tiene el agrado de anunciar la liberación del código fuente de Flyte. Flyte es una plataforma de procesamiento distribuido y de programación estructurada de flujos de trabajo altamente concurrentes, escalables y de fácil mantenimiento. Flyte ha estado entrenando modelos y procesando datos en producción dentro de Lyft por ya más de tres años, volviéndose la plataforma de facto para equipos como Pricing (precios), Locations (ubicaciones), Estimated Time of Arrivals (ETA, tiempo estimado de llegada), Mapping (mapas), Self-driving L5 (vehículos autónomos), y más. De hecho, Flyte administra más de 7,000 flujos de trabajo en Lyft, dando un total de 100,000 ejecuciones cada mes, 1 millón de tareas, y 10 millones de contenedores. En este post, vamos a presentarles Flyte, mostrar los tipos de problemas que soluciona y proveer ejemplos de cómo utilizarlo para tus necesidades de procesamiento de datos y machine learning.

Image for post
Image for post
Uno de los muchos flujos de trabajo de Pricing en Lyft, visualizado en Flyte UI. Este flujo de trabajo fue creado por Tim Wang en el equipo de Rider Pricing (Precios para pasajeros).

Problemas resueltos por Flyte

Siendo los datos un activo primordial en las empresas, ejecutar tareas computacionales a gran escala se ha vuelto crítico para el negocio, pero problemático desde un punto de vista operacional. Escalar, monitorear y administrar clústeres de cómputo se vuelve una carga en cada equipo encargado del producto, volviendo lenta cada nueva iteración y por lo tanto, volviendo lenta también la innovación del producto. Encima de todo, estos flujos de trabajo continuamente tienen complejas dependencias de datos. Sin una abstracción de plataforma, el administrar las dependencias de datos se vuelve insostenible y vuelve la colaboración y la reutilización entre equipos imposible.

La misión de Flyte es incrementar la velocidad de desarrollo para machine learning y procesamiento de datos mediante la abstracción de estas tareas adicionales. Hacemos el cómputo confiable, escalable y orquestado un problema resuelto, permitiendo a cualquier equipo enfocarse en la lógica del negocio en lugar de en las máquinas. Además, hacemos posible la colaboración y reutilización para que un problema deba resolverse una sola vez. Esto se vuelve más importante conforme las líneas entre datos y machine learning convergen, así como los roles de quienes trabajan con ellos.

Para darles una mejor idea de como Flyte facilita todo, aquí hay una visión general de algunas características clave:

Hospedado, multi-usuario y sin servidor

Flyte te libera de malabarear con la infraestructura, permitiéndote concentrar en problemas de negocio en lugar de en servidores. Como un servicio multi-usuario, trabajas en tu propio repositorio aislado y lo liberas y escalas sin afectar al resto de la plataforma. Tu código está versionado, contenido junto con sus dependencias y cada ejecución es reproducible.

Parámetros, herencia de datos y caché

Todas las tareas y flujos de trabajo de Flyte tienen entradas y salidas con tipos estrictos. Esto hace posible parametrizar los flujos de trabajo, tener una rica herencia de datos, y usar versiones pre-computadas de artefactos almacenados en caché. Si, por ejemplo, te encuentras realizando optimización de hiperparámetros, puedes fácilmente invocar parámetros distintos con cada ejecución. Adicionalmente, si la ejecución invoca una tarea que ya ha sido computada en una ejecución previa, Flyte usará inteligentemente la salida almacenada en caché, ahorrando tiempo y dinero.

En el ejemplo de arriba, entrenamos un modelo XGBoost utilizando los datos provistos aquí. El flujo de trabajo de machine learning se construye en Python y consiste de las siguientes cuatro tareas, que se alinean con la típica jornada de machine learning:

  1. Preparación de los datos y separación de datos de prueba

Nota cómo cada tarea es parametrizada y con tipos estrictos, haciendo fácil intentar diferentes variantes y usarlas en combinación con otras tareas. Adicionalmente, cada una de estas tareas puede ser arbitrariamente compleja. Con conjuntos de datos grandes, por ejemplo, se prefiere a Spark para la preparación y validación de datos. El entrenamiento del modelo, sin embargo, puede hacerse desde un simple modelo codificado en Python. Por último, observa como pudimos marcar tareas como “cacheables”, lo que puede acelerar dramáticamente las ejecuciones y ahorrar dinero.

Debajo, combinamos estas tareas para crear un flujo de trabajo (o “pipeline”). El flujo de trabajo enlaza las tareas y transfiere los datos entre ellas utilizando un lenguaje específico de dominio (DSL) basado en Python.

Versionado, reproducible, y fácil de compartir

Cada entidad en Flyte es inmutable, con cada cambio explícitamente capturado como una nueva versión. Esto hace que sea fácil y eficiente iterar, experimentar y deshacer cambios en tus workflows. Además, Flyte te permite compartir estas tareas versionadas entre flujos de trabajo, acelerando tu ciclo de desarrollo evitando trabajo repetitivo entre individuos y equipos.

Extensible, modular y flexible.

Los flujos de trabajo suelen componerse de pasos heterogéneos. Un paso, por ejemplo, puede usar Spark para preparar los datos, mientras el siguiente usa estos datos para entrenar un modelo de deep learning. Cada paso puede ser escrito en un lenguaje diferente y utilizar diferentes entornos. Flyte soporta heterogeneidad mediante imágenes de contenedor ligadas a una tarea.

Por extensión, las tareas de Flyte pueden ser arbitrariamente complejas. Pueden ser lo que sea, desde una sencilla ejecucion de contenedor, hasta una petición remota a un cluster de Hive o una ejecución distribuida de Spark. También reconocemos que la mejor tarea para el trabajo puede estar alojada en otro sitio, así que la extensibilidad de tareas puede ser usada para conectar soluciones de un solo punto a Flyte y por lo tanto a tu infraestructura. Específicamente tenemos dos maneras de extender tareas:

Extensiones FlyteKit: Le permite a los colaboradores proveer integraciones rápidas con servicios o sistemas nuevos.

Plugins de Backend: Cuando se desea un control más fino de las semánticas de ejecución de una tarea, Flyte provee plugins. Estos pueden ser usados para crear y manejar recursos de Kubernetes, incluyendo CRDs como Spark-on-K8s, o cualquier sistema remoto como Amazon Sagemaker, Qubole, BigQuery, y más.

Image for post
Image for post
Una visión de alto nivel de la arquitectura de Flyte

En conclusión

Flyte está hecho para dar poder y acelerar la orquestación de machine learning y de datos a la escala requerida por productos modernos, compañías, y aplicaciones. Juntos, Lyft y Flyte han crecido para ver las ventajas masivas que provee una plataforma de procesamiento moderna, y esperamos que al liberar el código de Flyte tú también puedas cosechar los beneficios. Aprende más, involúcrate, y pruébalo visitando www.flyte.org y revisando nuestro Github en https://github.com/lyft/flyte.

Artículo original por Allyson Gale y Ketan Umare. Traducido al español por Antonio Luna, con asistencia de Fernando López.

Si te gustaría unirte a Lyft, estamos contratando! Revisa nuestra pagina de vacantes para mas información.

Lyft Engineering en Español

Publicaciones de Lyft Engineering en Español.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store