Desde la última década, hemos visto cómo las GPU entraban en escena con más frecuencia en campos como la HPC (computación de alto rendimiento) y el campo más popular, es decir, los juegos. Las GPUs han mejorado año tras año y ahora son capaces de hacer cosas increíblemente grandes, pero en los últimos años, están llamando aún más la atención debido al aprendizaje profundo.

Como los modelos de aprendizaje profundo pasan una gran cantidad de tiempo en el entrenamiento, incluso las potentes CPUs no eran lo suficientemente eficientes para manejar tantos cálculos en un momento dado y esta es el área donde las GPUs simplemente superaron a las CPUs debido a su paralelismo. Pero antes de entrar en profundidad, vamos a entender primero algunas cosas sobre la GPU.

¿Qué es la GPU?

Una GPU o ‘Unidad de Procesamiento Gráfico’ es una versión en miniatura de un ordenador completo pero sólo dedicado a una tarea específica. Es diferente a una CPU que realiza múltiples tareas al mismo tiempo. La GPU viene con su propio procesador que está incrustado en su propia placa base junto con v-ram o ram de vídeo, y también un diseño térmico adecuado para la ventilación y la refrigeración.

GPUs para Deep Learning

Fuente(Gamers Nexus)

En el término ‘Unidad de Procesamiento de Gráficos’, ‘Gráficos’ se refiere a la representación de una imagen en coordenadas específicas en un espacio 2d o 3d. Una ventana de visualización o punto de vista es la perspectiva de un espectador que mira a un objeto, dependiendo del tipo de proyección utilizado. La rasterización y el trazado de rayos son algunas de las formas de renderizar escenas en 3D, y ambos conceptos se basan en un tipo de proyección denominado proyección en perspectiva. ¿Qué es la proyección en perspectiva?

En resumen, es la forma en que se forma una imagen en un plano de vista o lienzo donde las líneas paralelas convergen a un punto de convergencia llamado ‘centro de proyección’ también como el objeto se aleja del punto de vista parece ser más pequeño, exactamente como nuestros ojos retratan en el mundo real y esto ayuda en la comprensión de la profundidad en una imagen, que es la razón por la que produce imágenes realistas.

Además las GPUs también procesan geometría compleja, vectores, fuentes de luz o iluminaciones, texturas, formas, etc. Como ahora tenemos una idea básica sobre la GPU, vamos a entender por qué es muy utilizada para el aprendizaje profundo.

¿Por qué las GPU son mejores para el aprendizaje profundo?

Una de las características más admiradas de una GPU es la capacidad de computar procesos en paralelo. Aquí es donde entra en juego el concepto de computación paralela. Una CPU, en general, completa su tarea de forma secuencial. Una CPU puede dividirse en núcleos y cada núcleo se encarga de una tarea a la vez. Supongamos que una CPU tiene 2 núcleos. Entonces dos procesos de tareas diferentes pueden ejecutarse en estos dos núcleos logrando así la multitarea.

Pero aún así, estos procesos se ejecutan de manera serial.

GPUs para el aprendizaje profundo

Fuente(Ejemplos de ejemplo)

Esto no significa que las CPUs no sean lo suficientemente buenas. De hecho, las CPUs son realmente buenas en el manejo de diferentes tareas relacionadas con diferentes operaciones como el manejo de sistemas operativos, la entrega de hojas de cálculo, la reproducción de videos HD, la extracción de grandes archivos zip, todo al mismo tiempo. Estas son algunas cosas que una GPU simplemente no puede hacer.

¿Dónde está la diferencia?

GPUs para Deep Learning

Fuente(NVIDIA)

Como se ha comentado anteriormente una CPU está dividida en múltiples núcleos para que puedan encargarse de múltiples tareas al mismo tiempo, mientras que la GPU tendrá cientos y miles de núcleos, todos ellos dedicados a una única tarea. Se trata de cálculos sencillos que se realizan con mayor frecuencia y son independientes entre sí. Y ambos almacenan los datos que se necesitan con frecuencia en sus respectivas memorias caché, siguiendo así el principio de «referencia de localidad».

GPUs para Deep Learning

Fuente(NVIDIA)

Hay muchos programas y juegos que pueden aprovechar las GPUs para su ejecución. La idea detrás de esto es hacer que algunas partes de la tarea o el código de la aplicación sean paralelos, pero no los procesos completos. Esto se debe a que la mayoría de los procesos de la tarea tienen que ser ejecutados de manera secuencial solamente. Por ejemplo, el inicio de sesión en un sistema o aplicación no necesita hacerse en paralelo.

Cuando hay una parte de la ejecución que puede hacerse en paralelo, simplemente se traslada a la GPU para su procesamiento, mientras que la tarea secuencial se ejecuta en la CPU y, a continuación, ambas partes de la tarea se combinan de nuevo.

En el mercado de las GPU, hay dos actores principales: AMD y Nvidia. Las GPUs de Nvidia son ampliamente utilizadas para el aprendizaje profundo porque tienen un amplio soporte en el software del foro, los drivers, CUDA y cuDNN. Así que en términos de IA y aprendizaje profundo, Nvidia es el pionero durante mucho tiempo.

Se dice que las redes neuronales son vergonzosamente paralelas, lo que significa que los cálculos en las redes neuronales se pueden ejecutar en paralelo fácilmente y son independientes entre sí.

GPUs para el Aprendizaje Profundo

Algunos cómputos como el cálculo de los pesos y las funciones de activación de cada capa, la retropropagación pueden llevarse a cabo en paralelo. Las GPUs de Nvidia vienen con núcleos especializados conocidos como núcleos CUDA que ayudan a acelerar el aprendizaje profundo.

¿Qué es CUDA?

CUDA significa ‘Compute Unified Device Architecture’ (Arquitectura de Dispositivos de Computación Unificada) que fue lanzada en el año 2007, es una forma en la que se puede lograr la computación paralela y aprovechar al máximo la potencia de la GPU de una manera optimizada, lo que resulta en un rendimiento mucho mejor durante la ejecución de tareas.

Imagen para el puesto

Fuente(NVIDIA)

El kit de herramientas CUDA es un paquete completo que consiste en un entorno de desarrollo que se utiliza para crear aplicaciones que hagan uso de las GPU. Este conjunto de herramientas contiene principalmente el compilador c/c++, el depurador y las librerías. Además, el runtime de CUDA tiene sus drivers para poder comunicarse con la GPU. CUDA también es un lenguaje de programación que está hecho específicamente para instruir a la GPU en la realización de una tarea. También se conoce como programación para la GPU.
A continuación se muestra un sencillo programa «hello world» para hacerse una idea de cómo es el código CUDA.

/* hello world program in cuda *\#include<stdio.h>#include<stdlib.h>#include<cuda.h>__global__ void demo() { printf("hello world!,my first cuda program");}int main() { printf("From main!\n"); demo<<<1,1>>>(); return 0;}

Imagen para el post

output

¿Qué es cuDNN?

Imagen para el post

Fuente(Hyper Linuxer)

cuDNN es una librería de redes neuronales que está optimizada para la GPU y puede aprovechar al máximo la GPU Nvidia. Esta librería consiste en la implementación de convolución, propagación hacia adelante y hacia atrás, funciones de activación y pooling. Es una librería imprescindible sin la cual no se puede utilizar la GPU para el entrenamiento de redes neuronales.

¡Un gran salto con los núcleos Tensor!

Atrás en el año 2018, Nvidia lanzó una nueva línea de sus GPUs, es decir, la serie 2000. También llamada RTX, estas tarjetas vienen con núcleos tensoriales que se dedican al aprendizaje profundo y se basan en la arquitectura Volta.

Imagen para el post

Fuente(Anand Tech)

Los núcleos tensoriales son núcleos particulares que realizan la multiplicación de matrices de 4 x 4 FP16 y la suma con matrices de 4 x 4 FP16 o FP32 en media precisión, la salida será el resultado de una matriz de 4 x 4 FP16 o FP32 con precisión completa.
Nota: ‘FP’ significa punto flotante para entender más sobre el punto flotante y la precisión revisa este blog.

Como declaró Nvidia, la nueva generación de núcleos tensoriales basados en la arquitectura volta es mucho más rápida que los núcleos CUDA basados en la arquitectura Pascal. Esto dio un gran impulso al aprendizaje profundo.

Imagen para el post

Fuente(NVIDIA)

En el momento de escribir este blog, Nvidia anunció la última serie 3000 de su línea de GPUs que vienen con arquitectura Ampere. En ella, han mejorado el rendimiento de los núcleos tensoriales en 2 veces. También traen nuevos valores de precisión como TF32(tensor float 32), FP64(floating point 64). El TF32 funciona igual que el FP32 pero con speedup de hasta 20x, como resultado de todo esto Nvidia, afirma que el tiempo de inferencia o entrenamiento de los modelos se reducirá de semanas a horas.

AMD vs Nvidia

Imagen para el post

Fuente(Tom’s Hardware)

Las GPUs de AMD son decentes para juegos pero en cuanto el aprendizaje profundo entra en escena, entonces simplemente Nvidia está muy por delante. Esto no significa que las GPU de AMD sean malas. Es debido a la optimización del software y los conductores que no se actualiza activamente, en el lado de Nvidia tienen mejores conductores con actualizaciones frecuentes y en la parte superior de que CUDA, cuDNN ayuda a acelerar el cálculo.

Algunas bibliotecas conocidas como Tensorflow, PyTorch soporte para CUDA. Significa que las GPUs de nivel básico de la serie GTX 1000 pueden ser utilizadas. Por parte de AMD, tiene muy poco soporte de software para sus GPUs. En cuanto al hardware, Nvidia ha introducido núcleos tensoriales dedicados. AMD tiene ROCm para la aceleración, pero no es tan bueno como los núcleos tensoriales, y muchas bibliotecas de aprendizaje profundo no soportan ROCm. Durante los últimos años, no se notó un gran salto en términos de rendimiento.

Debido a todos estos puntos, Nvidia simplemente sobresale en el aprendizaje profundo.

Resumen

Para concluir de todo lo que hemos aprendido está claro que a partir de ahora Nvidia es el líder del mercado en términos de GPU, pero realmente espero que incluso AMD se pone al día en el futuro o al menos hacer algunas mejoras notables en la próxima línea de sus GPUs como ya están haciendo un gran trabajo con respecto a sus CPUs i.

El alcance de las GPU en los próximos años es enorme a medida que hacemos nuevas innovaciones y avances en el aprendizaje profundo, el aprendizaje automático, y HPC. La aceleración de la GPU siempre será útil para que muchos desarrolladores y estudiantes se introduzcan en este campo, ya que sus precios también son cada vez más asequibles. También gracias a la amplia comunidad que también contribuye al desarrollo de la IA y la HPC.

Acerca del autor

Prathmesh Patil

Prathmesh Patil

Entusiasta del ML, Data Science, desarrollador de Python.

LinkedIn: https://www.linkedin.com/in/prathmesh

Deja una respuesta

Tu dirección de correo electrónico no será publicada.