“GPU killed the CPU star”, o cómo la GPU será la nueva CPU

Fran Ramírez    28 septiembre, 2020

¿Por qué se utilizan las tarjetas gráficas para Machine Learning y en concreto, en Deep Learning? En este post vamos a explicar qué papel juegan las GPUs en las redes neuronales, por qué están desplazando a las CPUs y la auténtica revolución que ha supuesto el reciente lanzamiento de nueva gama de tarjetas RTX de NVidia.

Cómo funciona el Deep Learning

El Deep Learning se basa principalmente en la utilización de varios tipos de redes neuronales. Estas redes, deben entrenarse previamente (training) y es este proceso es el que realmente cuesta más desde el punto de vista computacional y por lo tanto, de tiempo. En esa fase se produce una entrada de datos (input) los cuales se procesan a través de las diferentes capas de la red neuronal (layers y hidden layers) generando los valores que denominamos pesos o weights. Esos pesos son los que vamos ajustando para conseguir la mejor predicción posible a la salida de la red neuronal. Y estas operaciones pueden llegar a ser desde miles hasta varios millones.

Una red neuronal tiene una estructura perfecta para poder procesar todos los cálculos en paralelo y esto encaja perfectamente con la arquitectura de la GPU, como veremos más adelante. Básicamente una red neuronal ejecuta cálculos de funciones “sencillas” como por ejemplo de activación, un poco más complejos para el coste o incluso más avanzados para el Gradiente o para Backpropagation, sin olvidarnos el cálculo de matrices y vectores.

Pero este tipo de operaciones  sabe perfectamente ejecutarlas una CPU, entonces,

¿Por qué es mejor una GPU?

Ventajas de las GPUs

Básicamente podemos resumirlo en dos puntos principales, el procesamiento en paralelo gracias a sus “cores” o núcleos (luego lo explicaremos) y por otro lado el ancho de banda (bandwith) o la velocidad de proceso o gestión de esos datos (es decir, la velocidad de acceso de lectura y/o escritura en la memoria RAM o VRAM).

Figura 1. Red Neuronal Multicapa, el cálculo de cada entrada se puede paralelizar así como el de las capas intermedias y ocultas. Fuente.
Figura 1. Red Neuronal Multicapa, el cálculo de cada entrada se puede paralelizar así como el de las capas intermedias y ocultas. Fuente.

Los núcleos o cores de una GPU

Para entender el concepto de core o núcleo, podemos remitirnos a la prehistoria mas lejana cuando los ordenadores tenían un solo core o CPU, como por ejemplo el Pentium, el 386 o el mítico 486. Es decir, realmente sólo podían realizar una tarea real al mismo tiempo, aunque es posible simular multitarea (multitasking) asignando tiempo y proceso utilizando los llamados hilos o threads. En cambio, hoy día las CPU tienen varios cores muy potentes y complejos, lo que les permite realizar todo tipo de operaciones avanzadas.

Las GPU por otra parte, tienen cores más específicos, centrados sobre todo en operaciones matemáticas. Estos cores de GPU no tienen la complejidad de los cores de las CPU pero tienen la gran ventaja de su número y poder de este modo, dividir el trabajo entre ellos para optimizar cálculos complejos. Es decir, mientras un core de CPU está calculando los valores que antes hemos comentado, en una GPU se está repartiendo esa tarea entre los diferentes cores para procesarlas en paralelo. Pero aún queda un elemento que aporta cierta ventaja a las GPU.

Ancho de Banda o bandwith, el factor principal

El ancho de banda es lo que realmente marca la diferencia a la hora de entender el por qué las GPU son más rápidas que las CPU.

Toda GPU tiene su propia memoria RAM o VRAM. Cuando una CPU ejecuta una operación, esta tiene que sincronizarse con los ciclos de reloj y por lo tanto, está “atada” en parte a esta secuencia para poder acceder a la memoria o realizar otras operaciones de entrada y salida. Y todos sabemos que los dataset y los modelos en Machine Learning,  sobre todo en Deep Learning son realmente grandes (por eso interesa tener una GPU con cuanta más RAM mejor).

Una GPU en cambio puede transferir de manera más rápida toda esa información a su propia RAM ya que no está supeditada a los límites ni a las tareas extras que tiene una CPU. Es decir, su diseño de hardware está optimizado para poder trabajar a mayor velocidad contra la memoria.

Si además añadimos la división en diferentes cores (por ejemplo, la NVidia RTX 2080 tiene 46 cores) obtenemos un componente de hardware que es prácticamente una CPU dedicada a gráficos (y por lo tanto, a cálculos matemáticos). Por ejemplo, una buena CPU puede tener de media 50Gb/s mientras que una GPU puede llegar a tener hasta 936 Gbps de ancho de banda, esta última es la velocidad de la RTX 3090.

Figura 2. Vista general de los componentes internos de una CPU y sus operaciones. Fuente
Figura 2. Vista general de los componentes internos de una CPU y sus operaciones. Fuente

CUDA y CUDA cores

CUDA (Computed Unified Device Architecture) es una plataforma creada por NVidia, centrada en la computación en paralelo utilizando la GPU. Esta plataforma está disponible para los lenguajes de programación como C o C++ (ojo, y Fortran nada menos) y está integrado también en librerías como PyTorch. Es decir, CUDA nos permite crear programas basados en la paralelización. Es tan popular que hoy día se ha convertido en casi un estándar para realizar este tipo de aplicaciones y procesos.

Existen multitud de librerías las cuales se van incrementando a medida que sale una nueva versión (en este enlace podéis encontrar más información). Algunas operaciones comunes que se realizan con esta tecnología con renderización de imágenes 3D, simulación de líquidos, simulación de Física en general, texturas, etc. También existe una librería llamada cuDNN (CUDA Deep Neural Network) centrada en las rutinas básicas que se aplican a las redes neuronales en Deep Learning, como convolución, capas de activación, etc.

Los CUDA cores utilizan una técnica denominada Stream Processing (AMD tiene una línea de productos para competir con NVidia), y se puede decir que son parecidos al núcleo de una CPU, pero diseñados para realizar operaciones específicas orientadas en principio a gráficos (pero no olvidemos que no son más que operaciones matemáticas). Mientras una CPU potente destinada al mercado doméstico como por ejemplo, AMD Ryzen Threadripper, puede tener hasta 48 cores pero algunas GPU tope de gama actuales pueden tener más de 10.000.

Por supuesto, un core de CPU no es comparable en complejidad y procesamiento con un CUDA core, ya que un core CPU tiene que estar al tanto de otras operaciones como I/O, interrupciones, memoria, cálculos y un largo etcétera. Por lo tanto, el número de CUDA cores no es sinónimo de rendimiento, es necesario sumar otros factores como los que ya hemos comentado anteriormente (arquitectura, ancho de banda, RAM, etc).

Figura 3. Flujo de procesamiento CUDA. Fuente.
Figura 3. Flujo de procesamiento CUDA. Fuente.

Tensor Cores

Un tensor es básicamente un objeto matemático para representar tipos de datos, en concreto una matriz, con varias dimensiones. La operación matemática más utilizada por los tensores es la multiplicación de matrices y los tensor core saben realizarlas especialmente bien. Cada tensor core puede ejecutar operaciones sobre matrices pequeñas de 4×4 por cada ciclo de reloj de la GPU, explicado de mala manera y rápida (aquí tienes más información detallada).

Volviendo a la multiplicación de matrices (factor esencial para entender la importancia de los tensor core), realizar esta operación en matrices de 4×4 requiere 64 operaciones de multiplicación y 48 sumas a lo que hay que añadir también la acumulación de los resultados. La complejidad se incrementa a medida que crecen las dimensiones del tensor y esto es justo lo que ocurre en las operaciones de Deep Learning pero también en Ray Tracing.

En el siguiente vídeo se explica en profundidad cómo funcionan los tensor cores:

… Y entonces llegó la revolución

Hace más o menos un mes, exactamente el 2 de septiembre de este año, NVidia sacó al mercado su nueva gama de tarjetas RTX, la RTX 3070, RTX 3080 y la RTX 3090. Y nadie se esperaba el terremoto tecnológico que iba a provocar.

Hasta ese momento, las tarjetas gráficas (o GPU, Graphics Processing Unit) asequibles para poder entrenar y ejecutar modelos avanzados basados en Deep Learning de una forma decente, costaban desde 6.000€ (Tesla K40), pasando por los aproximadamente 1.000€ que cuesta una RTX 2080 ti, la más asequible de la gama alta.

Por supuesto, hay otros modelos como la mía personal, una RTX 2070 super, por unos aproximadamente 400€. Este modelo es bastante decente para ciertas operaciones de Machine Learning pero se queda justa si aplicamos el los últimos algoritmos de Deep Learning. Además, como le ha pasado a otros “afortunados” como yo, la compramos hace poco tiempo, pensando que era imposible que NVidia sacara algo mejor por ese mismo precio. Pues amigas y amigos, eso es exactamente lo que ha ocurrido…

Estos nuevos modelos se basan en la tecnología denominada Ampere (la anterior se llamaba Turing, un nombre infinitamente mejor). La RTX 3070 es aproximadamente un 40% más potente que una RTX 2080 ti (sí, has leído bien), pero al módico precio de 500€. Pero además, la RTX 3090, la superior de la gama, es mejor que una Tesla, pero en vez de costar 6.000€, esta pasa a costar aproximadamente 1.200€.

Así, de golpe y porrazo, además de cargarse el mercado actual de las tarjetas gráficas y sobre todo hacer que me arrepienta de la compra de mi RTX 2070 super, tenemos que admitir que esta decisión (posiblemente motivada por el empuje de las nuevas consolas que vienen) está siendo toda una revolución en mundo de la Inteligencia Artificial.

La HPC (High Performance Computing) ya no es sólo para centro de datos y empresas. Ahora ya es posible entrenar y ejecutar modelos de Deep Learning avanzados en la tarjeta gráfica de casa.

Figura 4. Presentación de la tecnología Ampere de Nvidia. Fuente.

La integración GPU y CPU en la era de la Inteligencia Artificial

El tándem CPU y GPU está y estará durante mucho tiempo a la orden del día. Pero con el tiempo, y esto es una opinión personal, las CPU irán convergiendo hacia un híbrido GPU/CPU, donde incluso me atrevería a decir que la tecnología aplicada al diseño de GPUs tendrán más peso a la hora de realizar tareas asignadas habitualmente a las CPUs llegando a un modelo totalmente híbrido.

De hecho hoy día ya existen CPUs con GPU integrada, las denominadas APUs y aunque estas no están centradas en el Machine Learning (no olvidemos su capacidad de cálculo y paralelismo), son bastante potentes y pueden ser la primera aproximación a la integración GPU/CPU.

Estamos comenzado a entender, comprender y sobre todo a encontrar aplicaciones de Deep Learning en nuestro día a día. Poco a poco se hará inevitable diseñar y fabricar CPUs con GPUs integradas orientadas a Deep Learning para ejecutar nuestro sistema operativo favorito. Las funciones y tareas que realiza una CPU posiblemente sean sustituidas por modelos GPU a medida que avancemos en esa integración de la Inteligencia Artificial con la informática actual.

Conclusión

Esta integración ya ocurrió en el pasado con los famosos co-procesadores matemáticos. Las viejas CPUs realizaban perfectamente cálculos matemáticos, pero para realizarlos con más precisión y rapidez, se inventaron unos procesadores optimizados para este tipo de cálculos.

Al final esas técnicas se integraron dentro de una misma CPU llegando a los modelos actuales que conocemos aunque aún se fabrican algunos modelos para diseños específicos. Por cierto, este fantástico vídeo creado por los míticos “Mythbusters” es un gran ejemplo de las diferencias entre GPU vs CPU (un poco exagerado pero mola):

Estamos viviendo una época fantástica en la tecnología y sobre todo en la Inteligencia Artificial, la cual no sólo tendrá un impacto en la sociedad sino también en el diseño y fabricación de hardware (placas base, CPUs, etc) cada vez más orientado a estas nuevas técnicas y algoritmos.

Ya hoy día, por sólo 500€ podemos comprar una tarjeta gráfica totalmente excepcional para ejecutar muchos de los algoritmos más sofisticados en Deep Learning. Un ejemplo más de la integración en nuestro día a día de las técnicas más avanzadas en el mundo de la Inteligencia Artificial.

Por cierto, las GPU también sirven para jugar 😉

Para mantenerte al día con LUCA visita nuestra página web suscríbete a LUCA Data Speaks o síguenos en TwitterLinkedIn YouTube

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *