Supercomputacion para inteligencia artificial con el Marenostrum de Barcelona

Introducción del libro  DEEP LEARNING introducción práctica con Kera

La supercomputación, corazón de Deep Learning y la inteligencia artificial

Seguramente, a estas alturas algunos lectores ya se han planteado la pregunta: ¿por qué un investigador en supercomputación se ha puesto a investigar Deep Learning?

En realidad, hace años que empecé a interesarme por cómo la supercomputación podía contribuir a mejorar los métodos de Machine Learning; entonces, en 2006, empecé a codirigir tesis doctorales con un gran amigo y catedrático del departamento de Computer Science de la UPC, Ricard Gavaldà[1] , experto en Machine Learning y Data Mining.

Pero no fue hasta el septiembre del 2013, momento en el que ya disponía de una base relativamente sólida de conocimiento sobre Machine Learning,  que empecé a centrar mi interés en Deep Learning, cuando, gracias al investigador de nuestro departamento Computer Architecture de la UPC Jordi Nin[2], cayó en mis manos el artículo Building High-level Features Using Large Scale Unsupervised Learning[3], escrito por investigadores de Google. En este artículo presentado en el congreso International Conference in Machine Learning del año anterior, los autores explicaban cómo entrenaron un modelo Deep Learning en un cluster de 1 000 máquinas con 16 000 cores. Me alegré muchísimo de ver como   la supercomputación permitía acelerar este tipo de aplicaciones, como escribí en mi blog[4] unos meses más tarde, justificando las razones que llevaron al grupo a añadir este foco en su roadmap de investigación.

Gracias a la ley de Moore[5], en el año 2012, cuando estos investigadores de Google escribieron este artículo,  disponíamos de supercomputadores que permitían resolver problemas que hubieran sido intratables unos pocos años antes debido a la capacidad de computación. Por ejemplo, el computador al que yo tenía acceso en el año 1982, donde ejecuté mi primer programa con tarjetas perforadas, era un Fujitsu que permitía ejecutar algo más de un millón de operaciones por segundo. 30 años después, en el 2012, el supercomputador Marenostrum que teníamos por aquel entonces en el Barcelona Supercomputer Center–Centro Nacional de Supercomputación[6]  (BSC), era solo 1 000 000 000  veces más rápido que el ordenador en el que yo empecé.

Con la actualización de aquel año, el supercomputador MareNostrum presentaba un rendimiento máximo teórico de 1,1 Petaflops (1 100 000 000 000 000 operaciones de coma flotante por segundo[7]). Lo conseguía con          3 056 servidores con un total de 48 896 cores  y 115 000 Gibabytes de memoria principal total albergados en 36 racks. Por aquel entonces el supercomputador Marenostrum estaba considerado como uno de los más rápidos del mundo,  concretamente en la posición trigésimosexta, en  la lista TOP500[8], que se actualiza cada medio año y ordena los 500 supercomputadores más potentes del mundo.  Adjunta pueden ver una fotografía donde se observan los racks de computación del Marenostrum que se albergaban en la capilla de Torres Girona del campus nord de la UPC en Barcelona[9].

La primera GPU en la competición Imagenet

Fue entonces cuando empecé a tomar conciencia de la aplicabilidad de la supercomputación a esta nueva área de investigación; al empezar a buscar artículos de investigación sobre el tema,  descubrí la existencia de la competición de Imagenet  y de los resultados del equipo de la universidad de Toronto en la competición el año 2012[10].  La competición ImageNet (Large Scale Visual Recognition Challenge[11]) se realizaba desde el 2010, y por aquel entonces se había convertido en un referente en la comunidad de visión por computador para el reconocimiento de objetos a gran escala. En 2012 Alex Krizhevsky, Ilya Sutskever y Geoffrey E. Hilton emplearon por primera vez aceleradores hardware GPU (graphical processing units)[12], usados ya en ese momento en los centros de supercomputación como el nuestro en Barcelona para aumentar la velocidad de ejecución de aplicaciones que requieren realizar muchos cálculos.

Por ejemplo, en aquella época el BSC disponía ya de un supercomputador llamado MinoTauro, de 128 nodos  Bull505, equipados con 2 procesadores Intel y 2 GPUs Tesla M2090 de NVIDIA cada uno de ellos. Con un rendimiento pico de 186 Teraflops[13], puesto en marcha en septiembre del año 2011 (como curiosidad, en aquel entonces fue considerado como el supercomputador con mayor eficiencia energética de Europa según la lista Green500[14]).

Hasta el 2012, el incremento de capacidad de computación que cada año conseguíamos de los ordenadores era gracias a la mejora de la CPU. Sin embargo, desde entonces el incremento de capacidad de computación para  Deep Learning no ha sido solo gracias a ellas, sino también a los nuevos sistemas masivamente paralelos basados en aceleradores GPU, que resultan decenas de veces más eficientes que las CPU tradicionales.

Las GPU se desarrollaron originalmente para acelerar el juego 3D que requiere el uso repetido de procesos matemáticos que incluyen distintos cálculos sobre matrices. Inicialmente, compañías como NVIDIA y AMD desarrollaron estos chips rápidos y masivamente paralelos para tarjetas gráficas dedicadas a videojuegos: pronto se vio que las GPU útiles para juegos 3D eran muy adecuadas también para acelerar cálculos sobre matrices numéricas; por ello, este hardware en realidad benefició a la comunidad científica, y en el 2007 NVIDIA lanzó el lenguaje de programación CUDA[15] para poder programar sus GPU. Gracias a ello, centros de investigación en supercomputación como el BSC empezaron a usar clusters de GPU para acelerar aplicaciones numéricas.

Pero como veremos en este libro, las redes neuronales artificiales básicamente realizan operaciones matriciales que son también altamente paralelizables. Y esto es lo que hizo en 2012 el equipo de Alex Krizhevsky: entrenó su algoritmo Deep Learning AlexNet con GPU. Desde entonces se empezaron a usar las GPU para esta competición, y en estos momentos todos los grupos que investigan en Deep Learning están usando este hardware o alternativas equivalentes que han aparecido recientemente.

Crecimiento exponencial de la capacidad de computación como motor del Deep Learning

Ya he dicho que el hito del equipo de Krizhevsky fue un punto de inflexión importante en el campo de Deep Learning, y desde entonces se han ido sucediendo resultados espectaculares, uno tras otro, con un crecimiento exponencial de resultados cada vez más sorprendentes.

Pero yo creo que la investigación en este campo ha estado guiada en gran parte por los hallazgos experimentales más que por la teoría, en el sentido de que estos avances espectaculares en el área a partir del 2012 solo han sido posibles gracias a que la computación que se requería para poderlos llevar a cabo estaba disponible; de esta manera, los investigadores de este campo han podido poner a prueba y ampliar viejas ideas, a la vez que han avanzado con nuevas que requerían muchos recursos de computación.

Recientemente OpenAI[16] ha publicado en su blog un estudio[17] que corrobora precisamente esta visión que estoy defendiendo. Concretamente, presentan un análisis en el que se confirma que, desde 2012, la cantidad de computación disponible para generar modelos de inteligencia artificial ha aumentado exponencialmente a la vez que afirman que las mejoras en la capacidad de cálculo han sido un componente clave del progreso de la inteligencia artificial.

En  este mismo artículo presentan una gráfica[18] impresionante para sintetizar los resultados de su análisis:

La gráfica muestra la cantidad total de cálculos, en Petaflop por día, que se han  utilizado para entrenar redes neuronales que, como comentaremos más adelante, tienen nombre propio y son referentes en la comunidad de Deep Learning. Recordemos que un “petaflop / s-day”, el eje vertical del gráfico que está en escala logarítmica,  equivale a realizar 1 000 000 000 000 000 operaciones de redes neuronales por segundo durante un día (s-day), o un total de aproximadamente 100 000 000 000 000 000 000 operaciones, independientemente de la precisión numérica (lo que hace que “FLOP” sea un término quizás impreciso en este artículo, a mi entender).

Aceleración de Deep Learning con sistemas paralelos

Las tareas de entrenar redes Deep Learning requieren una gran cantidad de computación y, a menudo, también necesitan el mismo tipo de operaciones matriciales que las aplicaciones intensivas en cálculo numérico, lo que las hace similares a las aplicaciones tradicionales de supercomputación. Por lo tanto, las aplicaciones Deep Learning funcionan muy bien en sistemas de computación que usan aceleradores como GPU o field-programmable gate arrays  (FPGA), que se han utilizado en el campo de la supercomputación (o computación de altas prestaciones, High Performance Computing, HPC)  durante más de una década dentro de los muros de los centros de supercomputación. Esos dispositivos se enfocan en el rendimiento computacional al especializar su arquitectura en utilizar el alto paralelismo de datos en las cargas de trabajo HPC. Y precisamente estas técnicas se pueden usar también para acelerar los algoritmos de aprendizaje automático de Deep Learning.

Por ello, a partir del 2012 y hasta el 2014, los investigadores en Deep Learning empezaron a usar sistemas con GPU. La ventaja, además, es que estos algoritmos de aprendizaje escalaban perfectamente cuando podíamos poner más de una GPU en un nodo. La siguiente gráfica, extraída de uno de nuestros artículos de investigación[19], muestra como aumentando el número de GPU se puede acelerar el proceso de aprendizaje:

Aceleración de Deep Learning con sistemas distribuidos

La gran capacidad de computacional disponible permitió a la comunidad Deep Learning avanzar y poder diseñar redes neuronales cada vez más y más complejas, volviendo a requerir más capacidad de computación que la que podía ofrecer un servidor con múltiples GPU.  Por ello a partir del 2014 para acelerar aún más el cálculo requerido, este se empezó a distribuir entre múltiples máquinas con varias GPU conectadas por una red. Esa solución había sido, nuevamente, adoptada y muy conocida anteriormente en la comunidad de investigadores en supercomputación, específicamente en la interconexión de máquinas mediante redes ópticas con baja latencia,  que permitían hacer esto de manera muy eficiente.

En la siguiente  gráfica se muestra cómo se puede acelerar el mismo algoritmo anterior con varias máquinas que cada una tiene 4 GPU[20]:

También librerías del estándar de pasos de mensaje como Message Passing Interface (MPI[21]), usadas en la comunidad científica de supercomputación desde hace decenios, se están ahora usando en Deep Learning distribuido.

Aceleración del Deep Learning con hardware especializado

Pero a partir de 2016, además de todas las anteriores innovaciones en supercomputación, empezaron a aparecer chips de procesado especialmente pensados para algoritmos Deep Learning. Por ejemplo, en 2016 Google anunció que había construido un procesador dedicado llamado Tensor Processing Unit (TPU)[22]. Desde entonces Google ya ha desarrollado 3 versiones de TPU, la última presentada en su conferencia IO[23], donde afirmaron que es 8 veces más potentes que la versión anterior. Además, ahora ya no solo la arquitectura es específica para entrenar redes neuronales, sino también para la etapa de inferencia.

En la siguiente gráfica obtenida del blog de Google Cloud[24] podemos ver una comparativa de predicciones por segundo que se obtienen en una escala logarítmica para los tres diferentes tipos de arquitectura.

La aceleración de Deep Learning con hardware especializado no ha hecho más que empezar tanto para la etapa de entrenamiento como la etapa de inferencia si tenemos en cuenta que están apareciendo numerosas empresas que están diseñando y empezando a producir chips específicos para inteligencia artificial[25]. Veremos grandes avances en breve, estoy seguro.

Una nueva generación de supercomputadores diseñados para Deep Learning e Inteligencia Artificial

Y ahora estamos ante la convergencia de las tecnologías de inteligencia artificial y la supercomputación que pronto formará parte de la oferta que ofrecerán las empresas proveedoras de sistemas informáticos al mundo industrial y empresarial.

Un ejemplo de lo que estará dentro de un tiempo en el mercado es una parte del actual supercomputador Marenostrum del Barcelona Supercomputing Center (BSC). MareNostrum es el nombre genérico que utiliza el BSC para referirse a las diferentes actualizaciones de su supercomputador más emblemático y el más potente de España, y hasta hoy se han instalado cuatro versiones desde 2004[26]. En estos momentos el Marenustrum es el supercomputador más heterogéneo del mundo, con todo tipo de hardware experimental disponible en el mercado, puesto que su propósito es que sirva de plataforma de experimentación para diseñar futuros  supercomputadores.

Esto se concreta en que la capacidad de cálculo del MareNostrum 4 actual está repartida en dos partes totalmente diferenciadas: un bloque de propósito general y un bloque de tecnologías emergentes. El bloque de tecnologías emergentes está formado por clústeres de tres tecnologías diferentes que se irán incorporando y actualizando a medida que estén disponibles. Se trata de tecnologías que actualmente se están desarrollando en Estados Unidos y Japón para acelerar la llegada de la nueva generación de supercomputadores pre-exascala.

Una de ellas está basada en el sistema IBM diseñado especialmente para aplicaciones Deep Learning e inteligencia artificial[27];  IBM ha creado todo el stack de software necesario para ello. En el momento de escribir este libro ya se dispone del hardware y en breve se instalará[28] el paquete de software PowerAI[29], que convertirá este hardware de supercomputación en una máquina especialmente destinada a la inteligencia artificial. A través de este software estarán disponibles para los investigadores de redes neuronales los principales frameworks de Deep Learning como TensorFlow (y Keras, incluido en el paquete de Tensorflow), Caffe, Chainer, Torch y Theano.

En cuanto al hardware, esta parte del Marenostrum consta de dos nodos de acceso y un cluster de 52 nodos basado en IBM Power 9 y NVIDIA V100 con sistema operativo Linux y interconectados por una red infiniband a 100 Gigabits por segundo. Cada nodo está equipado con 2 procesadores IBM POWER9 que disponen de 20 cores físicos cada uno y con 512GB de memoria. Cada uno de estos procesadores POWER9 están conectados a dos GPU NVIDIA V100 (Volta) con 16GB de memoria, en total 4 GPU por nodo.

Las nuevas GPU NVIDIA V100 son las GPU más avanzada hasta el momento[30] para acelerar aplicaciones de inteligencia artificial que equivalen a 100 CPUs según NVIDIA[31]. Esto lo consiguen emparejando sus CUDA cores con 640 tensor core, que no tenían la familia anterior de GPU Pascal. Los tensor core están específicamente diseñados para multiplicar dos matrices de 4×4 elementos en formato de coma flotante y permite también la acumulación de una tercera matriz, pudiendo así ejecutar de manera muy rápida las operaciones básicas de redes neuronales tanto en la fase de inferencia como de la de entrenamiento.

Además, esta nueva versión de GPU actualiza el bus con el sistema NVLINK 2.0[32] que permite un alto ancho de banda con seis links que pueden llegar a trasferir 50GBytes por segundo. Aunque tradicionalmente el bus NVLINK estaba originalmente pensado para conectar las GPUs, esta versión permite conectar también GPU y CPU. Otro elemento importante es el acceso a la  memoria, que ha mejorado respecto a las versiones anteriores y permite anchos de banda de hasta 900 GigaBytes por segundo.

Les describo todo este detalle para que no les sorprenda que con solo 3 racks del Marenostrum actual (los de que se ven en la fotografía) se disponga de 1,5 Petaflops de rendimiento máximo teórico, mucho más  que los 1,1 Petaflops que tenía en el 2012 el Marenostrum 3 en 36 racks (foto anterior).

En resumen, no quería darles una clase de arquitectura de computadores, pero sí explicar con ejemplos reales y cercanos a nosotros que la capacidad de computación está evolucionado de forma exponencial y ha permitido, como decía antes, probar nuevas ideas o ampliar las viejas, pues muchos de los avances en el área de Deep Learning des del 2012  ha estado guiados por los hallazgos experimentales con estos supercomputadores.

Sin embargo, sin ninguna duda otros factores han contribuido a desencadenar el resurgimiento de la inteligencia artificial, es cierto que no se debe solo a la supercomputación. A todos nos viene a la cabeza el fenómeno del Big Data. Pero hay otros que quizás al lector no le sea tan familiar; en el siguiente capítulo presentaremos algunos de ellos.


Referencias:

[1] Página personal de Ricard Gavaldà [online]. Disponible en: http://www.lsi.upc.edu/~gavalda/

[2] Pagina personal de Jordi Nin [online]. Disponible en: https://www.linkedin.com/in/ninjordi/

[3] Quoc Le and Marc’Aurelio Ranzato and Rajat Monga and Matthieu Devin and Kai Chen and Greg Corrado and Jeff Dean and Andrew Ng, Building High-level Features Using Large Scale Unsupervised Learning .International Conference in Machine Learning, ICML 2012 [online]. Disponible en: https://arxiv.org/abs/1112.6209 [Accedido: 12/02/2018]

[4] Blog de Jordi Torres. “Barcelona Supercomputing Center starts to work on Deep Learning” Junio 2014). [online]. Disponible en: http://torres.ai/barcelona-supercomputing-center-starts-to-works-on-deep-learning/

[5] Ley de Moore. Wikipedia. [online]. Disponible en: https://es.wikipedia.org/wiki/Ley_de_Moore [Accedido: 12/03/2018]

[6] Página web del Barcelona Supercomputing Center. http://www.bsc.es

[7]  Operaciones de coma flotante por segundo. Wikipedia. [online]. Disponible en: https://es.wikipedia.org/wiki/Operaciones_de_coma_flotante_por_segundo [Accedido: 12/03/2018]

[8] Top 500 List – November 2012. [online] Disponible en: https://www.top500.org/list/2012/11/?_ga=2.211333845.1311987907.1527961584-375587796.1527961584 [Accedido: 12/03/2018]

[9] Marenostrum 3. Barcelona Supercomputing Center. [online]. Disponible en: https://www.bsc.es/marenostrum/marenostrum/mn3 [Accedido: 12/03/2018]

[10] Krizhevsky, A., Sutskever, I. and Hinton, G. E. ImageNet Classification with Deep Convolutional Neural Networks NIPS 2012: Neural Information Processing Systems, Lake Tahoe, Nevada [online]. Disponible en:http://www.cs.toronto.edu/~kriz/imagenet_classification_with_deep_convolutional.pdf

[11]  Russakovsky, O., Deng, J., Su, H. et al. Int J Comput Vis (2015) 115: 211. https://doi.org/10.1007/s11263-015-0816-y  https://arxiv.org/abs/1409.0575

[12] Wikipedia. Unidad de procesamiento gráfico o GPU. [online] Disponible en: https://es.wikipedia.org/wiki/Unidad_de_procesamiento_gráfico [Accedido: 12/02/2018]

[13] TeraFlops es una medida de rendimiento en informática, especialmente en cálculos científicos. Se refiere a 1 000 000 000 000 operaciones en coma flotante por segundo.

[14] Véase https://www.top500.org/green500/

[15]Wikipedia. CUDA. [online]. Disponible en:  https://es.wikipedia.org/wiki/CUDA

[16] Véase https://openai.com

[17] Véase https://blog.openai.com/ai-and-compute/

[18] https://blog.openai.com/content/images/2018/05/compute_diagram-log@2x-3.png

[19] Campos, V., F. Sastre, M. Yagues, J. Torres, and X. Giro-I-Nieto. Scaling a Convolutional Neural Network for Classification of Adjective Noun Pairs with TensorFlow on GPU Clusters. 2017 17th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGRID)

[20] Campos, V., F. Sastre, M. Yagues, M. Bellver, X. Giro-I-Nieto, and J. Torres. Distributed training strategies for a computer vision deep learning algorithm on a distributed GPU cluster. Procedia Computer Science. Elsevier. Volume 108, Pag. 315-324. https://doi.org/10.1016/j.procs.2017.05.074

[21] MPI Wikipedia. https://es.wikipedia.org/wiki/Interfaz_de_Paso_de_Mensajes

[22] Wikipedia. Tensor Processing Unit. [online]. Disponible en:  https://en.wikipedia.org/wiki/Tensor_processing_unit [Accedido: 20/04/2018]

[23] Conferencia Google IO 2018 (8-10 mayo 2018). Videos de todas las sesiones. [online]. Disponible en: https://www.youtube.com/playlist?list=PLOU2XLYxmsIInFRc3M44HUTQc3b_YJ4-Y [Accedido: 16/05/2018]

[24]  Véase https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu

[25] Big Bets on A.I. Open a New Frontier for Chip Start-Ups, Too. The New York Times. January 14, 2018 [online]. Disponible en: https://www.nytimes.com/2018/01/14/technology/artificial-intelligence-chip-start-ups.html [Accedido: 20/04/2018]

[26] Marenostrum. Barcelona Supercomputing Center [online] Disponible en : https://www.bsc.es/marenostrum/marenostrum [Accedido: 20/05/2018]

[27] IBM Power System AC922 Introduction and Technocal Overview- IBM RedBooks by Andexandre Bicas Caldeira. March 2018. [online]. Disponible en http://www.redbooks.ibm.com/redpapers/pdfs/redp5472.pdf  [Accedido: 20/05/2018]

[28] En el momento de escribir el libro no se ha instalado este software (solo el hardware está preparado), pero está previsto que esté disponible antes del verano del 2018.

[29] IBM PowerAI: Deep Learning Unleashed on IBM Power Systems Servers. IBM RedBooks. March 2018. [online]. Disponible en   https://www.dropbox.com/s/fd3oiuttqdeilut/IBMpowerAI.pdf?dl=0  [Accedido: 20/05/2018]

[30] Justo en el momento de finalizar el contenido de este libro NVIDIA ha presentado una nueva versión de las V100 con 32 GB de memoria. [online]. Disponible en https://www.top500.org/news/nvidia-refreshes-v100-gpus-upgrades-dgx-lineup/

[31] Tesla V100 NVIDIA web. [online]. Disponible en  http://www.nvidia.com/v100 [Accedido: 20/03/2018]

[32] CTE-POWER User’s Guide. Barcelona Supercomputing Center 2018 [online]. Disponible en https://www.bsc.es/user-support/power.php [Accedido: 20/05/2018]