¿Por qué la optimización del aprendizaje profundo es más rápida en las CPU que en las GPU?

Las GPU son tontas con una gran barriga. Pueden hacer ciertas tareas muy bien y rápido como comer y dormir. Sin ofender a nadie.

Las CPU son inteligentes pero con un estómago pequeño. No se puede comer mucho, incluso si le gusta pedir todo el menú. De nuevo, sin ofender a nadie.

Básicamente, las GPU tienen muchos más núcleos que una CPU y también tienen una memoria dedicada para su uso. Y son muy buenos en un conjunto particular de tareas.

Las CPU son buenas para realizar cualquier tarea de propósito general.

Entonces tu pregunta es incorrecta. Es al revés. Deep Learning es mucho más rápido en una GPU. Deep Learning es una serie de manipulaciones de Matrix. Las GPU tienen una gran memoria y son muy buenas en esa tarea. Si bien CPu es lento porque tiene muy poca memoria propia cuando se trata de aprendizaje “profundo”.

Una red neuronal simple no muestra mucha diferencia en una CPU o una GPU.

No estoy de acuerdo con tu opinión / hecho. Creo que las GPU son adecuadas para el aprendizaje profundo.

La razón de esto es el ancho de banda de la memoria y no necesariamente el paralelismo. En resumen y en orden de importancia:

  1. Memoria principal de alto ancho de banda
  2. Ocultar latencia de acceso a memoria bajo paralelismo de subprocesos
  3. El registro grande y rápido y la memoria L1 que es fácilmente programable son los componentes que hacen que las GPU sean tan adecuadas para el aprendizaje profundo.

Para ir en detalle , primero debe comprender que las CPU están optimizadas para la latencia, mientras que las GPU están optimizadas para el ancho de banda. Puede visualizar esto como una CPU que es un Ferrari y una GPU como un gran camión. La tarea de ambos es recoger paquetes de una ubicación aleatoria A y transportar esos paquetes a otra ubicación aleatoria B. La CPU (Ferrari) puede recuperar algo de memoria (paquetes) en su RAM rápidamente mientras la GPU (camión grande) es más lenta al hacer eso (latencia mucho más alta). Sin embargo, la CPU (Ferrari) necesita ir y venir muchas veces para hacer su trabajo (ubicación A -> recoger 2 paquetes -> ubicación B … repetir) mientras que la GPU puede obtener mucha más memoria a la vez (ubicación A -> recoger 100 paquetes -> ubicación B … repetir).

En otras palabras, la CPU es buena para obtener pequeñas cantidades de memoria rápidamente (5 * 3 * 7), mientras que la GPU es buena para obtener grandes cantidades de memoria (Multiplicación matricial: (A * B) * C). Las mejores CPU tienen aproximadamente 50 GB / s, mientras que las mejores GPU tienen un ancho de banda de memoria de 750 GB / s. Por lo tanto, cuanto más grandes sean sus operaciones computacionales en términos de memoria, mayor será la ventaja de las GPU sobre las CPU. Pero aún existe la latencia que puede afectar el rendimiento en el caso de la GPU. Un camión grande puede recoger muchos paquetes con cada recorrido, pero el problema es que está esperando mucho tiempo hasta que llegue el próximo conjunto de paquetes. Sin resolver este problema, las GPU serían muy lentas incluso para grandes cantidades de datos. Entonces, ¿cómo se resuelve esto?

Si le pide a un camión grande que realice una serie de recorridos para buscar paquetes, siempre esperará mucho tiempo la próxima carga de paquetes una vez que el camión haya partido para hacer el siguiente recorrido: el camión es lento. Sin embargo, si ahora utiliza una flota de Ferrari y grandes camiones (paralelismo de subprocesos), y tiene un gran trabajo con muchos paquetes (grandes fragmentos de memoria, como matrices), esperará un poco el primer camión, pero después que no tendrá tiempo de espera en absoluto, porque descargar los paquetes lleva tanto tiempo que todos los camiones se colocarán en cola en la ubicación de descarga B para que siempre tenga acceso directo a sus paquetes (memoria). Esto oculta efectivamente la latencia para que las GPU ofrezcan un ancho de banda alto al tiempo que ocultan su latencia bajo el paralelismo de subprocesos, por lo que para grandes porciones de memoria, las GPU proporcionan el mejor ancho de banda de memoria y casi no tienen inconvenientes debido a la latencia a través del paralelismo de subprocesos. Esta es la segunda razón por la cual las GPU son más rápidas que las CPU para el aprendizaje profundo. Como nota al margen, también verá por qué más hilos no tienen sentido para las CPU: una flota de Ferrari no tiene ningún beneficio real en ningún escenario.

Pero las ventajas para la GPU no terminan aquí. Este es el primer paso donde la memoria se obtiene de la memoria principal (RAM) a la memoria local en el chip (caché L1 y registros). Este segundo paso es menos importante para el rendimiento, pero aún se suma al liderazgo de las GPU. Todos los cálculos que se ejecutan ocurren en registros que están directamente conectados a la unidad de ejecución (un núcleo para CPU, un procesador de flujo para GPU). Por lo general, tiene la memoria L1 rápida y registra muy cerca del motor de ejecución y desea mantener estas memorias pequeñas, para que el acceso sea rápido. La mayor distancia al motor de ejecución reduce drásticamente la velocidad de acceso a la memoria, por lo que cuanto mayor sea la distancia para acceder a ella, más lenta será. Si hace que su memoria sea cada vez más grande, entonces a su vez es más lento acceder a su memoria (en promedio, encontrar lo que quiere comprar en una tienda pequeña es más rápido que encontrar lo que quiere comprar en una tienda enorme, incluso si saber dónde está ese artículo). Por lo tanto, el tamaño es limitado para los archivos de registro: estamos al límite de la física aquí y cada nanómetro cuenta, queremos mantenerlos pequeños.

La ventaja de la GPU es que puede tener un pequeño paquete de registros para cada unidad de procesamiento (procesador de vapor o SM), de los cuales tiene muchos. Por lo tanto, podemos tener en total mucha memoria de registro, que es muy pequeña y, por lo tanto, muy rápida. Esto lleva a que el tamaño agregado de los registros de la GPU sea más de 30 veces mayor en comparación con las CPU y aún el doble de rápido, lo que se traduce en una memoria de registro de hasta 14 MB que funciona a 80 TB / s. A modo de comparación, el caché CPU L1 solo funciona a aproximadamente 5 TB / s, que es bastante lento y tiene un tamaño de aproximadamente 1 MB; Los registros de CPU generalmente tienen tamaños de alrededor de 64-128 KB y funcionan a 10-20 TB / s. Por supuesto, esta comparación de números es un poco defectuosa porque los registros operan de manera un poco diferente a los registros de GPU (un poco como manzanas y naranjas), pero la diferencia de tamaño aquí es más crucial que la diferencia de velocidad y hace la diferencia.

Como nota al margen, la utilización completa del registro en las GPU parece ser difícil de lograr al principio porque es la unidad de cálculo más pequeña que debe ajustarse a mano para un buen rendimiento. Pero NVIDIA ha desarrollado buenas herramientas de compilación aquí que indican exactamente cuándo está utilizando demasiados o muy pocos registros por procesador de flujo. Es fácil modificar su código de GPU para utilizar la cantidad correcta de registros y caché L1 para un rendimiento rápido. Esto le da a las GPU una ventaja sobre otras arquitecturas como Xeon Phis, donde esta utilización es difícil de lograr y difícil de depurar, lo que al final hace que sea difícil maximizar el rendimiento en un Xeon Phi.

Lo que esto significa al final es que puede almacenar una gran cantidad de datos en sus cachés L1 y registrar archivos en GPU para reutilizar mosaicos convolucionales y de multiplicación de matrices. Por ejemplo, los mejores algoritmos de multiplicación de matrices usan 2 mosaicos de 64 × 32 a 96 × 64 números para 2 matrices en caché L1, y un mosaico de registro de números de 16 × 16 a 32 × 32 para las sumas de salidas por bloque de hilo (1 bloque de hilo = hasta 1024 hilos; tiene 8 bloques de hilos por procesador de flujo, hay 60 procesadores de flujo en total para toda la GPU). Si tiene una matriz de 100 MB, puede dividirla en matrices más pequeñas que se ajusten a su caché y registros, y luego multiplicar la matriz con tres mosaicos de matriz a velocidades de 10-80 TB / s, ¡eso es rápido! Esta es la tercera razón por la cual las GPU son mucho más rápidas que las CPU, y por qué son tan adecuadas para el aprendizaje profundo.

Tenga en cuenta que la memoria más lenta siempre domina los cuellos de botella de rendimiento. Si el 95% de los movimientos de su memoria tienen lugar en registros (80 TB / s) y el 5% en su memoria principal (0.75 TB / s), entonces todavía pasa la mayor parte del tiempo en el acceso a la memoria de la memoria principal (aproximadamente 6 veces como mucho).

Por lo tanto, en orden de importancia:

  1. Memoria principal de alto ancho de banda
  2. Ocultar latencia de acceso a memoria bajo paralelismo de subprocesos
  3. El registro grande y rápido y la memoria L1 que es fácilmente programable son los componentes que hacen que las GPU sean tan adecuadas para el aprendizaje profundo.

Fuente: la respuesta de Tim Dettmers a ¿Por qué las GPU son adecuadas para el aprendizaje profundo?

¡Espero que esto ayude! ¡Buena suerte!

Bueno, pero la optimización del aprendizaje profundo es más rápida en las GPU que en las CPU.

Las CPU son microprocesadores de uso general. Se pueden usar para cualquier tipo de tareas, mientras que los GUP están optimizados para realizar algunos trabajos específicos de manera más eficiente.

En general, la GPU se usa para mejorar la salida de gráficos principalmente FPS (fotogramas por segundo). Nuevamente en un solo cuadro, hay varios píxeles dependiendo de la resolución del video. Para colocar los píxeles en su ubicación precisa en la pantalla con las propiedades como densidad de píxeles, color, posición; necesita una serie de cálculos matriciales. Para más FPS; Tiene que calcular muy rápidamente. Por lo tanto, también requiere más memoria para almacenar datos temporales.

La GPU no solo se usa para mejorar la salida de gráficos, sino que también se usa para algunos tipos de funciones similares.

El aprendizaje profundo también es principalmente una serie de manipulación matricial, que es una tarea similar como el procesamiento de gráficos con alto FPS. Por lo tanto, la optimización de aprendizaje profundo es mucho más rápida en GPU que en CPU.

La minería de criptomonedas también es otro ejemplo que usa más GPU en lugar de CPU

More Interesting

¿Qué es la regresión de cresta?

Cómo migrar modelos de aprendizaje automático que están escritos en diferentes lenguajes de programación

¿Por qué el aprendizaje automático se usa mucho para la clasificación de anuncios de Google y menos para su clasificación de búsqueda? ¿Qué llevó a esta diferencia?

¿Cuál es la diferencia entre la agrupación de texto y la clasificación de texto?

Support Vector Machines: ¿Cómo elijo un parámetro de escala de kernel?

Cómo obtener líneas de regresión y encontrar coeficientes de correlación a partir de datos

¿El aprendizaje automático es algo que no llegará demasiado lejos si no tiene la formación académica adecuada? Dado que hay tanto en Internet, ¿se puede entender?

¿Cómo funciona la red de propuestas regionales (RPN) en Faster R-CNN?

¿Cuál es una explicación intuitiva del método de optimización llamado Hessian-free Optimizer (HF) para redes neuronales?

Como principiante en Deep Learning hoy, ¿qué marco debo usar?

¿Cuál es la diferencia entre el filtrado basado en contenido y el filtrado colaborativo?

¿No tener datos temporales en el vector de entrada hace que un RNN-LSTM sea inútil en comparación con otros NN si su salida es una secuencia temporal?

¿Qué métodos de conjunto / aprendizaje automático pueden incorporar covariables que varían con el tiempo?

¿Cuál es el propósito de visualizar las capas de activación en una arquitectura de red neuronal convolucional?

¿R es tan popular solo por las bibliotecas que pueden manejar varias funciones estadísticas?