KELA Presentacion Costa Rica 2024 - evento Protégeles
Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs
1. Implementaci´on de un m´odulo para el entrenamiento y
evaluaci´on de redes neuronales mediante GPUs
Adri´an Palacios
Universidad Polit´ecnica de Valencia
27 de Septiembre del 2012
1 de 27
2. Introducci´on
• Las redes neuronales artificiales son un modelo matem´atico
utilizado en diversas ´areas por su capacidad de aprendizaje a partir
de muestras.
• El algoritmo de aprendizaje m´as popular es el Backpropagation
(BP), un algoritmo iterativo de descenso por gradiente.
• Uno de los problemas de este modelo es que se necesita realizar
una gran cantidad de c´alculos para resolver algunos problemas,
llegando a necesitar incluso semanas de CPU para su compleci´on.
• El objetivo de este proyecto es mejorar una implementaci´on ya
existente del algoritmo BP, incluyendo una nueva versi´on en
lenguaje CUDA que posibilite la ejecuci´on de este algoritmo en
GPUs.
2 de 27
3. Forma matricial del algoritmo BP
En un dise˜no est´andar, la red tendr´ıa el siguiente aspecto para redes
con conexiones todos a todos y usando la forma matricial de BP:
i o
i+1
o
o+1
s
s
3 de 27
4. Aportaciones
1. Redise˜no del algoritmo BP para ejecutarse en CPU: Se ha
mejorado e implementado el dise˜no de redes neuronales en April
(realizado en C++) para mejorar la ejecuci´on del algoritmo BP en
CPU.
2. El modo “bunch”: Nueva formulaci´on del BP en modo “bunch”
con momentum y weight decay, algo que no est´a en la literatura.
3. Dise˜no del algoritmo BP para ejecutarse en GPU: Sobre el
dise˜no anterior, se han a˜nadido los elementos necesarios para que
la ejecuci´on ´ıntegra del BP pueda ser efectuada en GPU.
4. Experimentaci´on exhaustiva: La implementaci´on ha sido validada
mediante la resoluci´on de un conjunto de tareas complejas y se ha
elaborado un estudio sobre la influencia de los par´ametros en ellas.
4 de 27
5. Aportaci´on 1: Dise˜no del BP
• El BP de April ha sufrido cambios desde 2005 para cumplir nuevos
requisitos: Redise˜no aprovechando los conocimientos previos.
• Otras implementaciones ofrecen flexibilidad a costa de eficiencia
(neuronas independientes) o eficiencia utilizando topolog´ıas
especializadas. Este dise˜no combina lo mejor de ambas
aproximaciones.
• El modo “on-line” ha sido mejorado.
5 de 27
6. Aportaci´on 2: El modo bunch
Dise˜no de la red sin bunch:
i
o
i+1
o
o+1
s
s
Dise˜no de la red con bunch (b muestras):
b
i
o
i+1
b
o
b
o+1
s
s
6 de 27
7. Bibliotecas de ´algebra lineal
La API de BLAS declara un conjunto de funciones aplicables sobre
vectores y matrices.
´Esta se divide en 3 niveles:
• Nivel 1: Operaciones aplicables sobre un conjunto de vectores, de
la forma y ← αx + y.
• Nivel 2: Operaciones aplicables sobre matrices y vectores, de la
forma: y ← αAx + βy.
• Nivel 3: Operaciones aplicables sobre un conjunto de matrices, de
la forma: C ← αAB + βC.
7 de 27
8. Implementaciones de la API de BLAS
Las bibliotecas que implementan esta API aceleran la ejecuci´on de
este tipo de operaciones mediante el uso de:
• Instrucciones vectoriales especializadas.
• Memoria alineada.
• M´ultiples n´ucleos de la CPU.
• La GPU.
En este proyecto se usan tres implementaciones de la API de BLAS:
• ATLAS: Una biblioteca de c´odigo abierto que podemos usar para
cualquier tipo de procesador.
• Intel MKL: La biblioteca de Intel. Permite el uso de m´ultiples
n´ucleos del procesador.
• CUBLAS: La biblioteca de CUDA. Permite el uso de la GPU.
8 de 27
9. Aportaci´on 3: Implementaci´on con CUDA
Las GPUs son procesadores SIMD con unos
300 n´ucleos (comparado con los 8 de una
CPU), pensados inicialmente para c´alculo de
gr´aficos 3D, pero utilizados en el campo de
la computaci´on de altas prestaciones.
Las GPU de Nvidia disponen de la
arquitectura CUDA que facilita la realizaci´on
de operaciones de forma paralela, mediante el
uso del lenguaje CUDA.
9 de 27
10. Bloques de memoria y wrappers
Hemos dise˜nado una clase para
representar memoria compartida entre
CPU y GPU: El bloque de memoria. Estos
bloques de memoria se encargan de
suministrar el tipo de memoria pedido de
forma actualizada.
Tambi´en se han dise˜nado los wrappers
para el ´algebra lineal, que nos permiten
realizar la llamada de funciones de
´algebra lineal de forma independendiente
a la biblioteca usada para compilar.
10 de 27
11. Aportaci´on 4: Experimentaci´on
Correcci´on: La correcci´on de todas las versiones ha sido validada
mediante la resoluci´on de las tareas d´ıgitos y xor.
Rendimiento: El rendimiento ha sido valorado en base a la resoluci´on
de una tarea no trivial, en donde se realiza:
1. Un barrido de par´ametros del entrenamiento.
2. Un barrido de topolog´ıas.
3. Un estudio del paralelismo.
11 de 27
12. Experimentaci´on: Rendimiento (Tarea)
La tarea MNIST es una tarea de clasificaci´on de d´ıgitos manuscritos
formada a partir de las bases de datos publicadas por el NIST. El
corpus de entrenamiento est´a formado por 60000 im´agenes de
28 × 28 p´ıxeles cada una.
Las redes con las cuales realizaremos el entrenamiento comparten
estas caracter´ısticas:
• La capa de entrada estar´a formada por 784 neuronas.
• La capa de salida estar´a formada por 10 neuronas.
• La funci´on de activaci´on en las capas ocultas ser´a la tangente
hiperb´olica y en la capa de salida ser´a la softmax.
• La funci´on de error de la red ser´a la entrop´ıa cruzada.
12 de 27
13. Experimentaci´on: Rendimiento (Parte 1)
Objetivo: Buscar un conjunto de par´ametros cuyo resultado
represente un buen compromiso entre el error de validaci´on y el
tiempo de ejecuci´on.
Se realizar´an un total de 132 experimentos por build, resultantes de
las siguientes combinaciones de valores:
• Bunch: 1, 4, 8, 16, 32, 64, 96, 128, 256, 512 y 1024.
• Factor de aprendizaje: 0,01, 0,02 y 0,04.
• Momentum: 0,0 y 0,02.
• Weight decay: 0,0 y 10−6.
13 de 27
14. Experimentaci´on: Rendimiento (Parte 1)
Errores de validaci´on respecto al valor bunch para todas las builds:
1
1.5
2
2.5
3
3.5
4
1 4 8 16 32 64 96 128 256 512 1024
Errorenvalidacion(%)
Valor bunch
ATLAS
MKL
CUDA
minimo
14 de 27
15. Experimentaci´on: Rendimiento (Parte 1)
Tiempos por ´epoca respecto al valor bunch para todas las builds:
0
0.5
1
1.5
2
2.5
3
3.5
4
1 4 8 16 32 64 96 128 256 512 1024
Tiempo(segundos)
Valor bunch
ATLAS
MKL
CUDA
minimo
15 de 27
16. Experimentaci´on: Rendimiento (Parte 2)
Objetivo: Encontrar un n´umero de neuronas en las capas ocultas que
disminuya el error en los conjuntos de test y validaci´on.
Se realizar´an 30 experimentos para cada build, resultantes de las
siguientes combinaciones de valores:
• Primera capa oculta: 32, 64, 128, 256, 512 y 1024 neuronas.
• Segunda capa oculta: 0, 32, 64, 128 y 256 neuronas.
16 de 27
17. Experimentaci´on: Rendimiento (Parte 2)
Errores de clasificaci´on del conjunto de validaci´on y test respecto al
n´umero de neuronas en la primera capa para la build con MKL:
1
1.5
2
2.5
3
3.5
4
32 64 128 256 512 1024
Errorenvalidacion(%)
Neuronas en la primera capa
0 neuronas
32 neuronas
64 neuronas
128 neuronas
256 neuronas
1
1.5
2
2.5
3
3.5
4
32 64 128 256 512 1024
Errorentest(%)
Neuronas en la primera capa
0 neuronas
32 neuronas
64 neuronas
128 neuronas
256 neuronas
17 de 27
18. Experimentaci´on: Rendimiento (Parte 2)
Errores de clasificaci´on del conjunto de validaci´on y test respecto al
n´umero de neuronas en la primera capa para la build con CUDA:
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
32 64 128 256 512 1024
Errorenvalidacion(%)
Neuronas en la primera capa
0 neuronas
32 neuronas
64 neuronas
128 neuronas
256 neuronas
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
32 64 128 256 512 1024
Errorentest(%)
Neuronas en la primera capa
0 neuronas
32 neuronas
64 neuronas
128 neuronas
256 neuronas
18 de 27
19. Experimentaci´on: Rendimiento (Parte 3)
Objetivo: Examinar qu´e ocurre al lanzar varios experimentos en
paralelo, para encontrar el modo de ejecuci´on con mayor
productividad.
Se realizar´an experimentos para las siguientes combinaciones de
valores:
• N´umero de experimentos: 1, 2 y 4.
• N´ucleos a usar por cada proceso: 1, 2 y 4.
19 de 27
20. Experimentaci´on: Rendimiento (Parte 3)
Tiempos wall por ´epoca respecto al n´umero de n´ucleos empleados en
la ejecuci´on del experimento para la build con MKL:
0
1
2
3
4
5
6
7
8
9
10
1 2 4
Tiempowall(segundos)
Valor OMP_NUM_THREADS
1 hilo
2 hilos paralelos
4 hilos paralelos
20 de 27
21. Experimentaci´on: Rendimiento (Parte 3)
Tiempos wall por ´epoca respecto al n´umero de n´ucleos empleados en
la ejecuci´on del experimento para la build con CUDA:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
1 2 4
Tiempowall(segundos)
Valor OMP_NUM_THREADS
1 hilo
2 hilos paralelos
4 hilos paralelos
21 de 27
22. Experimentaci´on: Rendimiento (Parte 3)
An´alisis de la productividad al lanzar varios procesos de forma
concurrente usando la build con MKL:
Valor de Hilos Tiempo Productividad
OMP NUM THREADS concurrentes por ´epoca por ´epoca
1 1 4,017 4,017
2 1 2,671 2,671
4 1 2,062 2,062
1 2 4,266 2,133
2 2 2,893 1,4465
4 2 3,496 1,748
1 4 4,733 1,18325
2 4 5,158 1,2895
4 4 8,074 2,0185
22 de 27
23. Uso de la aplicaci´on
April est´a siendo utilizado en numerosos trabajos de investigaci´on
desde el a˜no 2005 aproximadamente.
La nueva implementaci´on del BP de April ya est´a siendo utilizada
para tareas de limpieza de im´agenes, traducci´on autom´atica [Zam12]
y predicci´on de temperaturas [ZRP+].
Estamos preparando un art´ıculo en donde se describen las
aportaciones de la herramienta April para enviarlo a alguna revista o
congreso relacionado con el reconocimiento de formas.
23 de 27
24. Conclusiones
Los objetivos que nos hab´ıamos propuesto al principio del proyecto
han sido alcanzados con ´exito:
1. Se ha hecho un redise˜no completo de las redes neuronales de April
para ejecutar el algoritmo BP en CPU de un modo eficiente.
2. Este dise˜no incluye la formulaci´on del BP en modo “bunch” con
momentum y weight decay.
3. Sobre el nuevo dise˜no, se ha incorporado la opci´on de utilizar la
GPU para efectuar los c´alculos de forma paralela y eficiente.
4. Exhaustiva experimentaci´on para comprobar la correcci´on y el
rendimiento de la aplicaci´on. Estudio del efecto de determinados
par´ametros de entrenamiento y configuraci´on sobre tareas no
triviales (MNIST).
24 de 27
25. Cuantificando la mejora
April: Unas 600 veces m´as r´apido que SNNS (utilizado en pr´acticas de
Redes Neuronales).
Un experimento de la primera parte con MNIST:
• Con SNNS: 1 d´ıa y 6 horas.
• Con April: 3 minutos.
TODOS los experimentos de la primera parte con MNIST:
• Con SNNS: 5 meses y 1 semana.
• Con April: 6 horas y 20 minutos.
25 de 27
26. Ampliaciones futuras
Algunas de las propuestas para ampliar la herramienta son:
• Interfaz gr´afica.
• Adaptaci´on al uso de otras librer´ıas.
• Uso de m´ultiples GPUs, computaci´on en grid.
• Implementaci´on de otros algoritmos con GPU.
26 de 27
27. ¿Preguntas?
Para conocer m´as sobre el proyecto, la memoria estar´a disponible para
su consulta en el Repositorio Institucional de la UPV (RiuNet).
Muchas gracias por asistir a esta exposici´on.
27 de 27