Resumen del TensorFlow Dev Summit

Omar Sanseviero
AI Learners
Published in
14 min readApr 6, 2018

El viernes 30 de Marzo fue el TensorFlow Dev Summit, un evento en el que se hacen los anuncios de mejoras más importantes de TensorFlow, la herramienta más adoptada para Machine Learning. En este post te resumimos los anuncios más interesantes que se hicieron.

Keynote

En los últimos años hemos visto una revolución en Machine Learning. ML está resolviendo problemas retadores que impactan la vida de todos. Se han logrado avances en muchas áreas, por ejemplo:

  • Astrofísica: Análisis de información de la misión Kepler para descubrir nuevos planetas.
  • Medicina: Uso de técnicas de ML para analizar el riesgo de enfermedades cardiovasculares a partir de la retina.
A partir de la imagen de la retina, se puede predecir cómo son los vasos sanguineos

Todas estas aplicaciones fueron programadas utilizando TensorFlow. TensorFlow ha tenido gran adopción — ha tenido más de 11 millones de descargas en el último año. Es una librería open source con más de 30k commits y casi mil quinientos contribuidores. En los últimos meses han lanzando nuevos APIs de niveles más alto y han seguido con sus esfuerzos para hacerlo más rápido y fácil de usar.

TensorFlow inició como una librería enfocada en Deep Learning, pero se ha convertido en un toolkit de Machine Learning. Dentro de sus objetivos para hacerlo más amigable, se ha iniciado un blog y un canal de Youtube. También se ha lanzado TensorFlow Hub, una herramienta que permite utilizar modelos ya entrenados y empaquetados listos para usar. Hace poco se lanzó un curso completo de Machine Learning, el mismo que toman los ingenieros dentro de Google.

TensorFlow es un toolkit que permite ir desde bajo hasta alto nivel y resolver diferentes tipos de tareas.

Dentro de los anuncios, se habló de mejoras a TensorFlow Lite, que permite lanzar tus modelos en dispositivos móviles. También se anunció soporte a más lenguajes como JavaScript y Swift. Ambos son grandes anuncios que traen muchas implicaciones.

Gran parte del trabajo de equipos dentro de Google Brain es hacer que más gente, incluyendo personas de otros dominios, pueda utilizar Machine Learning en sus campos. Una de las mayores soluciones en la que han trabajado junto a Google Cloud es AutoML. Pero también se anunció Nucleus, una librería para genómica. Se ha utilizado para informática aplicada a la salud.

Muchos problemas médicos se pueden facilitar utilizando técnicas de Computer Vision. Se ha realizado investigación, primero con oftalmólogos generales, y luego con especialistas de retina, para analizar imágenes de ojos y analizar el riesgo de enfermedades cardiovasculares de manera no intrusiva. El resultado fue que se desarrollaron modelos con el mismo nivel que los especialistas de retina.

Esto ha llevado a descubrimientos nuevos. Se dieron cuenta que se podían detectar una variedad de cosas a partir de las imágenes. Ahora, hay una prueba cardiovascular no intrusiva.

Pero también se puede aplicar a otras áreas de medicina para detectar probabilidad de que un paciente vuelva a ser admitido, diagnósticos posibles, medicinas y meses de alto riesgo.

tf.data: Pipelines de entrada flexibles, rápidos, y fáciles de usar

En esta charla se habló de cómo los pipelines de la información de entrada deben de ser:

  • Rápidos: para poder mantenerse a la par con los GPUs y los TPUs
  • Flexibles: deben poder manejar diferentes fuentes de información
  • Fáciles de usar: para poder democratizar el uso de ML
ETL

En estos procesos se suele considerar ETL — Extraer, Transformar, Cargar. Aunque para tareas de programación normales suele ser sencillo, en ML es más retador. Cargar información que puede ir desde GBs a cientos de terabytes, se deben utilizar procesos para distribuir los arreglos y otras fuentes. La manipulación de tanta información se tiene que hacer de maneras diferentes.

Dentro de la discusión del desempeño de redes neuronales, se mencionó que las CNNs ya manejan hasta 13k imágenes por segundo (duplicado en 8 meses). También se habló de flexibilidad: se está extendiendo el soporte para librerías customizadas de C++ y Python. Esto es especialmente útil para las compañías que tengan sus propios formatos para almacenar información. Por último, se habló de la facilidad de uso. TensorFlow es una librería que no es tan amigable para principiantes y se está haciendo esfuerzo para que lo empiece a ser. Dentro de esto hay un cambio a Eager Execution que fue la siguiente charla.

Eager Execution

Eager Execution es un método de escribir código en TF que es orientado a objetos. TensorFlow es un motor de ejecución de grafos para Machine Learning. La idea de representar los problemas como grafos tienen muchas ventajas. Entre ellas, se puede aplicar optimizaciones basadas en grafos, distribución automática y facilidad para hacer deployment a servidores y teléfonos. El cambio a Eager Execution mantiene varias de las mismas ventajas, pero aumenta la facilidad para iterar, inspeccionar y jugar con el modelo. El cambio aumentará la transparencia en los modelos, permitiendo utilizar profilers y debuggers para entender cómo funcionan. También permite hacer cosas interesantes, como tener tus propias funciones de gradients e iterar sobre el dataset en vez de cargarlo todo. Esto también significa que se optimiza mejor la memoria de los GPUs. Por último, varios de los APIs como metrics han sido cambiados. Este es un cambio opcional especialmente útil para la gente que es nueva en ML por la facilidad para interactuar con los modelos y porque es más intuitivo. Te compartimos un demo, la documentación y algunos ejemplos.

Machine Learning en JavaScript

Uno de los anuncios más interesantes, TensorFlow ha sido implementado en JavaScript. Durante años, Python ha sido el lenguaje de programación más popular para computación científica y eso ha hecho que casi todo lo de ML ocurra en Python. JavaScript y el browser tienen mucho que ofrecer a la comunidad. Un ejemplo interesante que existe desde hace tiempo es Playground, una herramienta escrita en 300 líneas de JavaScript normal que permite interactuar con redes neuronales. El problema es que esta no es una librería ni una herramienta reusable.

Ejemplo del Playground

¿Por qué queremos ML en el browser? Algunas de las ventajas son:

  • Nada que instalar ni drivers.
  • Interactivo.
  • Acceso a sensores como cámaras, GPS, acelerómetro, giroscopio, etc.
  • Información se queda en el cliente. Esto es enorme. Significa que podemos entrenar redes neuronales en el browser con información del cliente sin tener que enviarla a servidores y así manteniendo la información confidencial.

En el 2017 se lanzó deeplearn.js. Aceleradas por WebGL, las redes neuronales podían ser entrenadas en el browser. Este proyecto llevó a muchas ideas interesantes y, en este momento, se une a TensorFlow como parte central (core) de TensorFlow.js.

TensorFlow.js habilita muchas cosas. Por ejemplo, permite escribir y entrenar modelos en el browser, permitiendo hacer muchas cosas educativas. Otra cosa que se puede hacer es importar modelos ya entrenados de Python y utilizarlos en JavaScript. También se puede reentrenar modelos importados, así entrenando con información específica de los usuarios y manteniendo su privacidad.

Los browsers usan WebGL para hacer cálculos de álgebra lineal rápidamente.
Ejemplo de Autoencoder en JavaScript
Ejemplo de entrenamiento del modelo

El soporte no sólo es a modelos de TensorFlow, también es para modelos de Keras.

Puedes usar modelos entrenados en Python en JavaScript

En el paso de convertir, se hace optimización de grafos y de pesos para browser caching. Actualmente hay soporte a las 32 capas más comunes. Un demo interesante es una red neuronal que aprende movimientos que haces para jugar Pacman con tu webcam. Se está trabajando para tener soporte en nodejs pronto.

Desempeño de entrenamiento: Guía de usuarios para converger más rápido

Mientras más datos, menor el error

En esta charla se habló del desempeño de la etapa de entrenamiento en los problemas de ML. Para mejorar el desempeño, necesitamos datasets más largos. Una investigación de Baidu mostró la gráfica anterior(está en escala logarítmica), en la que se ve cómo al tener más información, el error es menor. El problema es que estamos llegando a una pared en los límites del hardware, por lo que tenemos que buscar optimizar el desempeño en otras áreas.

En la charla se propusieron optimizaciones en los 3 pasos de un problema de entrenamiento de ML.

La primera fase es el input pipeline. Aquí es donde se recibe la información y se modifica para entrenar el modelo. Esta fase utiliza CPU sobre todo y es donde hay más lugar para mal desempeño. Como fue mencionado en las anteriores charlas, se sigue un proceso ETL (Extract, Transform, Load).

ETL y su uso de hardware

Cada una de estas etapas utilizan diferentes componentes de hardware. El problema con este modelo es que mientras se extrae la información, los otros componentes de hardware no hacen nada.

Los tiempos de cada etapa de ETL

Se puede usar software pipelining para hacer esto. Esta técnica es mucho más rápida y optimiza los recursos. El recurso más importante, el acelerador, se puede usar hasta el 100% del tiempo:

Algo que también se discutió es por qué tener almacenamiento distribuido. Mientras los datasets sigan creciendo, menos van a caber en una sola máquina. Tenerlos distribuidos facilitan su uso. Con estos cambios propuestos, con un Cloud TPU, podemos llegar a recibir 1750 imágenes por segundo, doce veces más rápido que el pipeline inicial. Se pueden hacer técnicas avanzadas de optimización que mejoran el desempeño del CPU (fused dataset operators), llevándonos a 2000 imágenes por segundo. En este punto, el limitante es el acelerador, no el CPU, que es justamente lo que buscábamos.

En la segunda fase es donde se hacen los forward y backward passes en los modelos. Algo interesante que se discutió en la charla es el surgimiento de formatos numéricos interesantes. Casi todos usan fp32 ahora mismo, pero NVIDIA ha hecho mucho trabajo en el formato fp16 que permite tener modelos más grandes y rápidos. También se habló de bfloat16 (brain floating point format). En la parte de hardware, se pueden hacer optimizaciones para que hagan multiplicaciones de matrices de manera más óptima.

En la última fase, actualizar los pesos, se habló de cambios en el hardware. El Cloud TPU puede llegar hasta 3100 imágenes por segundo con todos estos cambios, y ciertos hardwares especializados pueden manejar hasta 6100 imágenes por segundo.

La guía del practicante para los APIs de TF de alto nivel

En esta charla se habló del proceso de un proyecto de ML en diferentes pasos.

  1. TensorFlow Estimators
Estimador

Los estimadores son una librería de alto nivel que te permiten enfocarte en experimentar rápidamente. Es utilizada por miles de ingenieros en Google y la librería open source es la misma que la que se usa internamente. El estimador te da interfaces y herramientas que te facilitan la vida.

Clasificador con estimador

2. Definir Proyecto

Cuando se define el proyecto, se debe especificar el objetivo, la información que se tiene y definirlo como un problema de ML.

Hay estimadores ya implementados que se usan en muchos productos. Estos se encargan de la implementación para que te puedas enfocar en tu problema específico. Tiene inicializaciones por default razonables. Esto hace fácil experimentar con diferentes features. Hacer un experimento rápido para establecer una base a partir de las métricas es buena idea.

3. Features

A la hora de hacer las columnas de features, hay que definir de qué manera hay que digerir la información para el modelo. Utilizar columnas de features facilita la interacción con nuevos features.

4. Soluciones ya implementadas

Gran parte de TensorFlow es que no tengas que hacer todo tú, sino poder enfocarte en la lógica de tu problema de ML. Hay soluciones como Gradient Boosted Trees ya implementadas.

5. Modelado

Si no estás satisfecho con esas soluciones, puedes implementar tus propios modelos. Algo útil aquí es utilizar transfer learning.

6. Escalar

Ahora que tienes una solución, es hora de escalarla. Los estimadores te permiten replicar a varios GPUs cambiando una sola línea de código. También se puede hacer entrenamiento distribuido.

7. Servir

Ya con el modelo entrenado, es hora de servirlo. Para esto, se puede utilizar TF Serving.

TensorFlow Distribuido

En esta charla se habló de maneras de entrenar más rápido y en paralelo a los modelos. Escalar es esencial para todos y a veces los modelos toman semanas en entrenar, por lo que es necesario ver opciones. Algunas son:

  • Usar GPU
  • Usar múltiples GPUs. El problema con esto es que es necesario escribir mucho código adicional para combinar los gradientes y esto también significa mayor computación.
Uso de varias máquinas
  • Utilizar múltiples máquinas. Aquí el cuello de botella es la comunicación entre las computadoras.
  • Utilizar servidores de parámetros (host con pesos de entrenamiento) y trabajadores (copia del grafo de TensorFlow), la opción que se usa en Google desde el 2012. Los servidores se encargan de realizar las tareas y los trabajadores de actualizar los gradientes. Esto no requiere mucha comunicación, por lo que escala muy bien

Debugging TensorFlow con plugins de TensorBoard

TensorBoard es una colección de GUIs Web de Machine Learning que son portables. Viene con TensorFlow y permite entender cómo funcionan los modelos. Utiliza 14 diferentes aplicaciones web y utiliza un servidor web offline de 2mb. Tiene muchos usos diferentes y es parte de un ecosistema que está creciendo rápidamente y que busca cómo extenderse. Utilizan TypeScript y Polymer en el frontend, Python en el backend y Bazel como herramienta para construir. Es un proyecto retador porque debe funcionar offline y debe poder construirse aunque hayan errores en los modelos. En la charla se mostraron varios plugins nuevos interesantes y se explicó que ahora nosotros podemos hacer nuestros propios plugins.

TensorFlow Lite: ML para dispositivos móviles

Los dispositivos móviles abren muchas puertas al mundo de Machine Learning: Tienen muchos sensores e interactuamos todo el tiempo con ellos. Pero también es algo retador: hay límites en la memoria, no se puede usar mucha energía ni poder computacional. Algunas de las ventajas es que no necesita hacer llamadas a servidores y que la información se queda en el cliente.

Arquitectura con TFLite

TensorFlow Lite es una solución ligera (~75KB vs 1.1mb) que se puede usar tanto en iOS como Android. Utiliza un formato llamado FlatBuffer que tiene pocas dependencias y funcionan más rápido. Esta librería está optimizada para los kernels y puede utilizar coas como el Android Neural Network API.

Se habló de Quantization, una técnica que permite guardar y trabajar con números en representaciones más compactas. Esto permite modelos más pequeños, lo cuál es mejor para dispositivos pequeños y para los procesadores. La velocidad es más rápida, aunque se pierde parte de la precisión.

Velocidad de TensorFlow vs TensorFlow Lite Quantized

Tiene un diseño extendible y con soporte para las 50 operaciones más comunes y los modelos más usados como MobileNet e Inception3. En Google se utilizará para Google Assistant y los relojes. Te compartimos una introducción y un artículo que lo introduce a detalle.

Buscando a partir de ideas: Exploración automática de solución de problemas utilizando ML.

Un problema en varias disciplinas es que la teoría se queda atrás de la práctica. Hasta el momento, se combina la investigación de ML, la intuición de ingeniería y un proceso de prueba y error. Esto requiere creatividad humana. Pero ahora, más que nunca, tenemos mucha información y mucho poder computacional.

Se puede buscar en un espacio de búsqueda utilizando aprendizaje por refuerzo, algoritmos evolutivos y búsqueda aleatoria.

Se puede implementar un espacio de búsqueda una vez en TensorFlow y utilizar esto para producir modelos entrenados para que cumplan cierto desempeño. Esto es el fundamento de AutoML. Con AutoML, tú sólo defines el problema y este te propondrá nuevas redes neuronales que lo resuelvan.

Nucleus: El toolkit de TensorFlow para genómica

En esta charla se habló de Nucleus, un toolkit para genómica. El genoma humano tiene más de 3 mil millones de letras y se considera el modelo de la vida. Trabajar con ella tiene muchos retos algoritmos y computacionales. Algunos de estos son:

  • Mejorar la generación de información experimental, como reducir el ruido en esta.
  • Anotación de genoma de sus elementos funcionales.
  • Identificar ubicaciones donde varía en los individuos.

Muchas oportunidades se abren para genómica con Deep Learning gracias a nuevos datasets, nuevos modelos para representar imágenes y secuencias y éxitos como DeepVariant, una herramienta para identificar cambios en genoma utilizando redes neuronales convolucionales (CNNs).

El objetivo de Nucleus es facilitar la solución de problemas en genómica con TensorFlow. Con esto se lanzarán nuevas librerías, escribirán papers y desarrollarán herramientas de bioinformática nuevas. Nucleus propone formatos uniformes que funciona tanto en C++ como Python y tiene un conjunto de APIs. Pronto Nucleus será integrado en Google Cloud.

Swift para TensorFlow — TFiwS

Uno de los anuncios menos esperados es el nuevo soporte de Swift a nivel compilador. Los desarrolladores de TensorFlow encontraron con una serie de limitaciones en el diseño de Python. Algunas de las características que buscaban era data y control flow, mutabilidad y facilidad para manejo de funciones. Swift trae una nueva gama de capacidades a TensorFlow: tiene un diseño moderno que permite utilizar programación funcional, tiene un intérprete interactivo y un ambiente de cuaderno (como Jupyter). Por último, el diseño del lenguaje es completamente abierto por lo que Google puede contribuir directamente para cumplir las necesidades de TensorFlow.

TensorFlow Hub

Los repositorios nos vuelven mucho más productivos como desarrolladores por su capacidad de compartir código. Esta es la idea detrás de TensorFlow Hub: ser el equivalente de un repositorio de Machine Learning.

Algunos de los ingredientes de ML son los algoritmos, la información, el poder computacional y el expertise humano. TensorFlow Hub contiene módulos ya entrenados, lo cual permite reusarlos y volver a entrenarlos para tus problemas específicos. Contiene módulos para imágenes (NASNet, PNASN), clasificación de texto (redes neuronales para Inglés, Español, Alemán y Japonés, word2vec entrenado en wikipedia, ELMo) y codificadores universales. Mientras tanto, más módulos se están desarrollando para audio, video y más.

Las herramientas para clasificación de texto entrenado con Google News

TensorFlow Extended (TFX)

Hacer Machine Learning en producción no es fácil. Hay muchas cosas de qué preocuparse como extraer los features, servir el modelo y monitorearlo.

Los componentes de ML en producción

TensorFlow anunció el feature más pedido en GitHub: un RESTful API para servir los modelos. Este es un proyecto nuevo y que va a seguir creciendo, pero permite hacer muchas tareas con facilidad, como ingerir datos, analizarlos y validarlos.

Proyecto Magenta: Arte y Música con ML

Cerramos con uno de los proyectos más interesantes: Proyecto Magenta. En este proyecto se hace investigación de modelos generativos que pueden servir como herramientas creativas para artistas. Te compartimos algunos demos interesantes

Si disfrutaste este post, síguenos en Facebook y únete a Meetup.

--

--