Uber Ha Estado Creando Silenciosamente Uno De Los Stacks Open Source De Deep Learning Más Impresionantes Del Mercado

Jesus Rodriguez
Apr 16, 2020

Contents Outline

Uber Ha Estado Creando Silenciosamente Uno De Los Stacks Open Source De Deep Learning Más Impresionantes Del Mercado

Apr 16, 2020 9 minutes read

Veamos algunos de los principales proyectos de código abierto de machine learning de Uber



La inteligencia artificial (IA) ha sido una tendencia tecnológica atípica. En un ciclo tecnológico tradicional, la innovación suele comenzar con las nuevas empresas que tratan de disrumpir a los titanes de la industria.

En el caso de la IA, la mayor parte de la innovación en el espacio ha venido de los grandes laboratorios corporativos de empresas como Google, Facebook, Uber o Microsoft. Esas empresas no sólo están liderando impresionantes vías de investigación sino que también abren regularmente nuevos frameworks y herramientas que agilizan la adopción de las tecnologías de la IA.

En ese contexto, Uber ha surgido como uno de los contribuyentes más activos a las tecnologías de IA de código abierto en los ecosistemas actuales. En sólo unos pocos años, Uber ha abierto regularmente proyectos de código abierto en diferentes áreas del ciclo de vida de la IA. Hoy, me gustaría revisar algunos de mis favoritos.

Uber es un campo de juego casi perfecto para las tecnologías de IA. Combina todos los requisitos tradicionales de la IA de una empresa de tecnología a gran escala con un asiento en primera fila para los primeros escenarios de transporte de la IA. Como resultado, Uber ha estado construyendo aplicaciones de machine y deep learning a través de escenarios muy diversos que van desde clasificaciones de clientes hasta vehículos de autónomos.

Muchas de las tecnologías utilizadas por los equipos de Uber han sido de fuente abierta y han recibido elogios de la comunidad de machine learning. Veamos algunas de mis favoritas:

Nota: No estoy cubriendo tecnologías como Michelangelo o PyML, ya que están bien documentadas al ser de código abierto.

Ludwig: Una caja de herramientas para modelos de machine learning sin código



Ludwig es una caja de herramientas basada en TensorFlow que permite entrenar y probar modelos de aprendizaje profundo sin necesidad de escribir código. Conceptualmente, Ludwig fue creado bajo cinco principios fundamentales:

  • No se requiere código: no se necesitan habilidades de programación para entrenar un modelo y usarlo para obtener predicciones.
  • Generalidad: un nuevo enfoque basado en el tipo de datos para el diseño de modelos de aprendizaje profundo que hace que la herramienta sea utilizable en muchos casos de uso diferentes.
  • Flexibilidad: los usuarios experimentados tienen un amplio control sobre la construcción de modelos y el entrenamiento, mientras que los recién llegados la encontrarán fácil de usar.
  • Extensibilidad: es fácil añadir una nueva arquitectura de modelo y nuevos tipos de datos de características.
  • Comprensibilidad: los internos de los modelos de aprendizaje profundo se consideran a menudo cajas negras, pero proporcionamos visualizaciones estándar para comprender su rendimiento y comparar sus predicciones.

Utilizando Ludwig, un científico de datos puede entrenar un modelo de aprendizaje profundo simplemente proporcionando un archivo CSV que contiene los datos de entrenamiento así como un archivo YAML con las entradas y salidas del modelo.

Utilizando esos dos puntos de datos, Ludwig realiza una rutina de aprendizaje de múltiples tareas para predecir todas las salidas simultáneamente y evaluar los resultados.

Bajo cubierta, Ludwig proporciona una serie de modelos de aprendizaje profundo que se evalúan constantemente y pueden combinarse en una arquitectura final.

El equipo de ingeniería de Uber explica este proceso usando la siguiente analogía: "si las librerías de aprendizaje profundo proporcionan los bloques de construcción para hacer un edificio, Ludwig proporciona los edificios para hacer una ciudad, y usted puede elegir entre los edificios disponibles o añadir su propio edificio al conjunto de los disponibles".

Pyro: Un lenguaje de programación probabilístico nativo




Pyro es un lenguaje de programación probabilístico profundo (PPL) lanzado por Uber AI Labs. Pyro está construido sobre PyTorch y se basa en cuatro principios fundamentales:

  • Universal: Pyro es un PPL universal - puede representar cualquier distribución de probabilidad computable. ¿Cómo? Comenzando desde un lenguaje universal con iteración y recursión (código Python arbitrario), y luego agregando muestreo aleatorio, observación e inferencia.
  • Escalable: Pyro escala a grandes conjuntos de datos con poca sobrecarga sobre el código escrito a mano. ¿Cómo? Construyendo modernas técnicas de optimización de cajas negras, que usan mini lotes de datos, para aproximar la inferencia.
  • Mínimalista: Pyro es ágil y mantenible. ¿Cómo? Pyro se implementa con un pequeño núcleo de poderosas abstracciones componibles. Siempre que es posible, el trabajo pesado se delega a PyTorch y otras bibliotecas.
  • Es flexible: Pyro apunta a la automatización cuando se quiere y al control cuando se necesita. ¿Cómo? Pyro utiliza abstracciones de alto nivel para expresar modelos generativos y de inferencia, mientras que permite a los expertos personalizar fácilmente la inferencia.

Estos principios a menudo llevan la implementación de Pyro en direcciones opuestas. Ser universal, por ejemplo, requiere permitir una estructura de control arbitraria dentro de los programas Pyro, pero esta generalidad hace difícil la escalada. Sin embargo, en general, Pyro logra un brillante equilibrio entre estas capacidades haciendo uno de los mejores PPL para aplicaciones del mundo real.

Manifold: Un conjunto de herramientas de depuración e interpretación para modelos de aprendizaje automático




Mainfold es una tecnología Uber para depurar e interpretar modelos de machine learning a escala. Con Manifold, el equipo de ingeniería de Uber quería lograr algunos objetivos muy tangibles:

  • Depurar errores de código en un modelo de aprendizaje automático.
  • Comprender las fortalezas y debilidades de un modelo tanto en forma aislada como en comparación con otros modelos.
  • Comparar y ensamblar diferentes modelos.
  • Incorporar los conocimientos adquiridos a través de la inspección y el análisis de rendimiento en las iteraciones del modelo.

Para lograr esos objetivos, Manifold segmenta el análisis de machine learning en tres fases principales: Inspección, Explicación y Refinamiento.

  • Inspección: En la primera parte del proceso de análisis, el usuario diseña un modelo e intenta investigar y comparar el resultado del modelo con otros existentes. Durante esta fase, el usuario compara las métricas de rendimiento típicas, como la exactitud, la precisión/recordancia y la curva característica de funcionamiento del receptor (ROC), para tener información sobre si el nuevo modelo supera a los existentes.
  • Explicación: En esta fase del proceso de análisis se intenta explicar las diferentes hipótesis formuladas en la fase anterior. Esta fase se basa en el análisis comparativo para explicar algunos de los síntomas de los modelos específicos.
  • Refinamiento: En esta fase, el usuario intenta verificar las explicaciones generadas en la fase anterior codificando en el modelo los conocimientos extraídos de la explicación y probando el rendimiento.


Plato: Un framework para la construcción de agentes de conversación a escala



Uber construyó el Plato Research Dialogue System (PRDS) para abordar los desafíos de la construcción de aplicaciones de conversación a gran escala. Conceptualmente, el PRDS es un framework para crear, entrenar y evaluar agentes de IA conversacionales en diversos entornos. Desde un punto de vista funcional, el PRDS incluye los siguientes bloques de construcción:

  • Reconocimiento del habla (transcribir el discurso al texto)
  • Comprensión del lenguaje (extrae el significado de ese texto)
  • Seguimiento del Estado (información agregada sobre lo que se ha dicho y hecho hasta ahora)
  • Llamada a la API (búsqueda en una base de datos, consulta a una API, etc.)
  • Política de diálogo (generar un significado abstracto de la respuesta del agente)
  • Generación del lenguaje (convertir el significado abstracto en texto)
  • Síntesis del habla (convertir el texto en discurso)

El PRDS se diseñó teniendo en cuenta la modularidad para incorporar la investigación de vanguardia en sistemas conversacionales, así como la evolución continua de cada componente de la plataforma.

En el PRDS, cada componente puede ser entrenado ya sea en línea (a partir de interacciones) o fuera de línea e incorporarse al núcleo del motor. Desde el punto de vista del entrenamiento, el PRDS soporta interacciones con usuarios humanos y simulados.

Estos últimos son comunes para poner en marcha agentes de IA conversacionales en escenarios de investigación, mientras que los primeros son más representativos de interacciones en vivo.

Horovod: Un framework para el entrenamiento de deep learning a escala




Horovod es una de los stacks de ML de Uber que se ha hecho muy popular en la comunidad y que ha sido adoptada por equipos de investigación de potencias de la IA como DeepMind u OpenAI. Conceptualmente, Horovod es un framework para ejecutar trabajos de entrenamiento de aprendizaje profundo distribuido a escala.

Horovod aprovecha los stacks de interfaz de paso de mensajes como OpenMPI para permitir que un trabajo de entrenamiento se ejecute en una infraestructura altamente paralela y distribuida sin ninguna modificación. 

Ejecutar un trabajo de entrenamiento distribuido de TensorFlow en Horovod se logra en cuatro simples pasos:

  • hvd.init() inicializa Horovod.
  • config.gpu_options.visible_device_list = str(hvd.local_rank()) asigna una GPU a cada uno de los procesos de TensorFlow.
  • opt=hvd.DistributedOptimizer(opt) envuelve cualquier optimizador regular de TensorFlow con el optimizador Horovod que se encarga de promediar los gradientes usando el anillo de reducción.
  • hvd.BroadcastGlobalVariablesHook(0) difunde las variables del primer proceso a todos los demás procesos para asegurar una inicialización consistente.

Uber AI Research: Una fuente regular de investigación de IA

Por último, debemos mencionar la activa contribución de Uber a la investigación de la IA. Muchos de los lanzamientos de código abierto de Uber están inspirados en sus esfuerzos de investigación. El sitio web de Investigación de IA de Uber es un fenomenal catálogo de artículos que destacan el último esfuerzo de Uber en la investigación de la IA.

Estas son algunas de las contribuciones del equipo de ingeniería de Uber que han sido adoptadas regularmente por la comunidad de investigación y desarrollo de la IA. A medida que Uber continúa implementando soluciones de IA a escala, deberíamos ver frameworks nuevos e innovadores que simplifiquen la adopción del aprendizaje automático por parte de los científicos de datos e investigadores.
Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!