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

Las CPU están diseñadas para cargas de trabajo informáticas más generales. Las GPU en contraste son menos flexibles, sin embargo, las GPU están diseñadas para calcular en paralelo las mismas instrucciones. Las redes neuronales profundas (DNN) están estructuradas de manera muy uniforme, de modo que en cada capa de la red miles de neuronas artificiales idénticas realizan el mismo cálculo. Por lo tanto, la estructura de un DNN encaja bastante bien con los tipos de cómputo que una GPU puede realizar de manera eficiente.

Las GPU tienen ventajas adicionales sobre las CPU, que incluyen tener más unidades computacionales y tener un mayor ancho de banda para recuperar de la memoria. Además, en aplicaciones que requieren procesamiento de imágenes (es decir, redes neuronales de convolución), se pueden explotar capacidades específicas de gráficos de GPU para acelerar aún más los cálculos.

La principal debilidad de las GPU en comparación con las CPU es que la capacidad de memoria en las GPU es menor que las CPU. La GPU más alta conocida contiene 24 GB de RAM, en contraste, las CPU pueden alcanzar 1 TB de RAM. Una debilidad secundaria es que se requiere una CPU para transferir datos a la tarjeta GPU. Esto tiene lugar a través del conector PCI-E, que es mucho más lento que la memoria de la CPU o GPU. Una debilidad final es que las velocidades de reloj de la GPU son 1/3 de las CPU de gama alta, por lo que en tareas secuenciales no se espera que una GPU funcione comparativamente bien.

En resumen, las GPU funcionan bien con los cálculos de DNN porque (1) las GPU tienen muchos más recursos y un ancho de banda más rápido en la memoria (2) los cálculos de DNN se adaptan bien a la arquitectura de GPU. La velocidad computacional es extremadamente importante porque el entrenamiento de las redes neuronales profundas puede variar de días a semanas. De hecho, muchos de los éxitos de Deep Learning podrían no haberse descubierto si no fuera por la disponibilidad de GPU.

El aprendizaje profundo implica una gran cantidad de multiplicaciones de matrices y otras operaciones que se pueden paralelizar masivamente y, por lo tanto, acelerar en GPU-s.

Una sola GPU puede tener miles de núcleos, mientras que una CPU generalmente no tiene más de 12 núcleos. Aunque los núcleos de GPU son más lentos que los núcleos de CPU, lo compensan con su gran número y memoria más rápida si las operaciones pueden ser paralelas. El código secuencial es aún más rápido en las CPU.

Creo que ya hay buenas respuestas aquí, pero utilizaré una perspectiva diferente para responder esta pregunta, pero literalmente estoy diciendo lo mismo. Si quieres jugar un juego, por ejemplo en PC, puedes elegir una máquina de gama baja con solo una CPU o una máquina de gama alta con una CPU y una GPU. Es muy posible jugar algunos juegos en máquinas de gama baja, pero la velocidad de fotogramas es bastante baja en comparación con las velocidades de fotogramas obtenidas en una máquina de alta gama.

La GPU acelera o acelera los cálculos gráficos muy bien, pero tanto una CPU como una GPU pueden manejar operaciones gráficas solo que este último realiza más rápido debido a la naturaleza distribuida / paralela de la arquitectura con muchos nodos de procesamiento de gama baja.

La arquitectura paralela en una GPU está bien adaptada para operaciones de vectores y matrices. En los gráficos 3D por computadora, hay muchas de esas operaciones, como el cálculo de los efectos de iluminación de mapas normales, efectos 3D, etc. Las GPU se diseñaron para manejar tales operaciones de vectores y matrices en paralelo, a diferencia de una CPU de un solo núcleo que manejaría las operaciones de matriz en el procesamiento de forma serial un elemento a la vez

Esto hace posible jugar juegos a 60 fps con impresionantes imágenes en tiempo real. Ahora, volviendo al aprendizaje profundo, también hay muchas operaciones de vectores y matrices en el aprendizaje profundo, por lo que es intuitivo que el aprendizaje profundo se ejecute varias veces más rápido en una GPU que en una CPU, al igual que un juego se ejecuta más rápido en una GPU en comparación con una CPU

Entonces, la mera razón por la cual las GPU se adaptan bien al aprendizaje profundo es debido a la naturaleza de los cálculos para los que fueron diseñados para acelerar y manejar, resulta ser la misma que las que se encuentran en el aprendizaje profundo. Por lo tanto, los algoritmos de aprendizaje profundo se ejecutan varias veces más rápido en una GPU en comparación con una CPU, los tiempos de aprendizaje se pueden reducir de meses a semanas o incluso un día.

Esta aceleración es importante porque los investigadores o las personas que trabajan con el aprendizaje profundo desearían experimentar con múltiples arquitecturas de aprendizaje profundo como el número de capas, funciones de costos, métodos de regularización, etc.

El aprendizaje profundo no suele funcionar bien la primera vez, por lo que se deben hacer muchos ajustes. Para cada ajuste a la red, debe aprender nuevamente. Ahora imagine esperar durante meses cada vez que modifique su red, eso no es práctico. Desearía una forma más rápida de entrenar su red para no tener que esperar meses cada vez que la ajuste.

La respuesta está en los juegos, ¿por qué no usar una GPU para acelerar el aprendizaje profundo al igual que en los gráficos por computadora?

Espero que esto ayude.

Como muchos han dicho, las GPU son muy rápidas porque son muy eficientes para la multiplicación y convolución de matrices, pero nadie dio una explicación real de por qué esto es así. La verdadera razón de esto es el ancho de banda de la memoria y no necesariamente el paralelismo.

En primer lugar, 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, y (3) registro grande y rápido y memoria L1 que es fácilmente programable son los componentes que hacen que las GPU sean tan adecuadas para aprendizaje profundo.

El aprendizaje profundo requiere MUCHOS cálculos. Por lo general, involucraba una red neuronal con una gran cantidad de nodos, y cada nodo tiene muchas conexiones, que deben actualizarse varias veces durante el aprendizaje.
Por ejemplo, la retropropagación simple para 100 nodos en un solo núcleo de CPU con 100000 iteraciones (que a veces no es suficiente) requiere aproximadamente 15 minutos. Cuando tienes 100000 nodos y 1000000 etapas …
Mientras tanto, las GPU tienen una gran velocidad de reloj en comparación con las CPU. Puede realizar una enorme cantidad de FLOP en un segundo, lo que aumenta enormemente el rendimiento del ajuste.

Bueno, las GPU son buenas para el aprendizaje profundo, pero la CPU se está poniendo al día rápidamente. Si aún no lo ha intentado, use Intel-Caffe (intel / caffe) y vea si obtiene el rendimiento requerido. Solo necesita el conjunto correcto de bibliotecas de software para obtener un buen rendimiento. NVIDIA proporcionó cuDNN que acelera sus marcos de Deep Learning. Intel está tratando de hacer lo mismo con las versiones Intel MKL-DNN e Intel MKL 2017/18.

Tengo algunos resultados muy interesantes en un documento que se presentará en el taller MLHPC 2017 realizado con SC 17 (Denver) este año. Podré compartir los números después de presentar el documento. Mientras tanto, puede intentarlo usted mismo y ver si ayuda. Pude obtener una capacitación bastante buena basada en CPU de AlexNet y ResNet-50 (la CPU Haswell estará a la par / mejor que la GPU Kepler K-80).

Simple, las GPU están construidas específicamente para multiplicaciones matriciales. Es la forma en que se representan los gráficos en 3D.

El aprendizaje profundo al final está representado por matrices de peso y la fase de aprendizaje es solo algunas (muchas) multiplicaciones de matrices.

El aprendizaje profundo consiste en redes neuronales profundas. Estas redes neuronales tienen muchos pesos y sesgos, que son básicamente matrices grandes de números de coma flotante.

Ahora considere su sistema de visualización. Básicamente se construye operando en píxeles y calculando operaciones de punto flotante. Debido a la demanda de gráficos de alta gama (películas, juegos, etc.), la industria de las GPU tuvo que aumentar su rendimiento (la cantidad de instrucciones que un procesador puede ejecutar en la unidad de tiempo). Lo hicieron en parte mediante operaciones paralelas, es decir, manteniendo múltiples líneas de ejecución que ejecutaban instrucciones.

Por cierto, el aprendizaje profundo también requiere operaciones de punto flotante, muchas de las cuales se pueden hacer en paralelo. Era natural entonces, que los entusiastas del aprendizaje profundo vieran rápidamente las GPU.

Créditos de imagen

Nota: SIMD significa que el procesador ejecuta una única instrucción en un múltiple d ata (útil para trabajar con matrices y matrices).

Esta es una gran representación en video de por qué:

El video ilustra que pueden realizar muchos más cálculos a la vez en comparación con las CPU debido al paralelismo y a un ancho de banda mucho mayor, lo que les permite ser excelentes para el aprendizaje profundo que tiene que hacer muchos cálculos.

No lo son

Sin embargo, son mejores que los procesadores Intel de tipo X86 que absorben igualmente todo.

Las GPU son procesadores de flujo que manejan bien los problemas de flujo de datos (unidireccionales) y son buenos si puede adaptar su problema a su arquitectura, generalmente alternando bancos de CPU y memoria. Si sobrepasa sus recursos y necesita intercambiar datos dentro y fuera de los bancos a DRAM, el rendimiento disminuye significativamente, y hay un soporte limitado para hacerlo de manera transparente, por lo que debe aprender CUDA u OpenCL para programarlos.

Como no son particularmente adecuados, hay una nueva cosecha de máquinas que están diseñadas específicamente para tareas de IA.

GPU proporciona muchos núcleos para calcular matemáticas simples. Dado que la fase de entrenamiento del aprendizaje profundo es una serie de muchos cálculos simples, como adiciones y multiplicaciones, la GPU es más adecuada para hacer esas cosas que la CPU.

Pueden multiplicar matrices grandes rápidamente. El cuello de botella del rendimiento en el aprendizaje profundo suele ser la multiplicación de matrices.

Es una y otra vez sorprendente ver cuánta aceleración obtienes cuando usas GPU para el aprendizaje profundo: en comparación con las CPU, las aceleraciones 5x son típicas, pero en problemas más grandes uno puede lograr aceleraciones 10x. Con las GPU puede probar nuevas ideas, algoritmos y experimentos mucho más rápido de lo habitual y obtener comentarios casi inmediatos sobre lo que funciona y lo que no.

More Interesting

Soy gerente de producto no técnico en una empresa de tecnología empresarial. Teniendo en cuenta que la mayoría de los puestos de PM en estos días requieren algunas habilidades técnicas, quiero obtener una mejor comprensión de los roles que juegan los ingenieros de software en las empresas tecnológicas. ¿Dónde comenzaría uno? ¿Debo familiarizarme con lenguajes de programación específicos? ¿O centrarse más en el proceso de cómo se desarrolla el software?

¿Cómo pueden la IA y el aprendizaje automático ayudar a llevar la inclusión social a la India?

¿TensorFlow está sobrevalorado? ¿Merece ser mucho más popular que otros marcos?

¿Se beneficiaría el plan de estudios general de informática de la universidad al dividirse en pistas CS aplicadas y puras?

¿Cuáles son algunas aplicaciones del mundo real de la criptomoneda?

Cómo limpiar mi computadora de todo

¿Podemos utilizar el aprendizaje automático con un clic a través de datos sobre un sistema de recuperación de documentos con un modelo de clasificación?

¿Por qué la función Memory Remap sigue deshabilitándose en mi BIOS?

Cómo trazar puntos GPS en un mapa usando Python

¿Qué es una explicación intuitiva del mecanismo de Laplace?

¿Qué significa RESTful y por qué es significativo?

¿Cuál es la importancia o los beneficios de un algoritmo informático para una persona normal que no es un programador informático?

¿Cuáles son algunos buenos libros sobre aprendizaje automático y aprendizaje profundo?

¿Sobrescribir los datos guardados con una copia guardada desde una unidad flash afecta la calidad del guardado y este guardado eventualmente se corromperá si este proceso se repite?

¿Cómo se mide la memoria de la computadora?