Post on 04-Jul-2015
Implementacion de un modulo para el entrenamiento yevaluacion de redes neuronales mediante GPUs
Adrian Palacios
Universidad Politecnica de Valencia
27 de Septiembre del 2012
1 de 27
Introduccion
• Las redes neuronales artificiales son un modelo matematicoutilizado en diversas areas por su capacidad de aprendizaje a partirde muestras.
• El algoritmo de aprendizaje mas popular es el Backpropagation(BP), un algoritmo iterativo de descenso por gradiente.
• Uno de los problemas de este modelo es que se necesita realizaruna gran cantidad de calculos para resolver algunos problemas,llegando a necesitar incluso semanas de CPU para su complecion.
• El objetivo de este proyecto es mejorar una implementacion yaexistente del algoritmo BP, incluyendo una nueva version enlenguaje CUDA que posibilite la ejecucion de este algoritmo enGPUs.
2 de 27
Forma matricial del algoritmo BP
En un diseno estandar, la red tendrıa el siguiente aspecto para redescon conexiones todos a todos y usando la forma matricial de BP:
io
i+1 o
o+1
s
s
3 de 27
Aportaciones
1. Rediseno del algoritmo BP para ejecutarse en CPU: Se hamejorado e implementado el diseno de redes neuronales en April(realizado en C++) para mejorar la ejecucion del algoritmo BP enCPU.
2. El modo “bunch”: Nueva formulacion del BP en modo “bunch”con momentum y weight decay, algo que no esta en la literatura.
3. Diseno del algoritmo BP para ejecutarse en GPU: Sobre eldiseno anterior, se han anadido los elementos necesarios para quela ejecucion ıntegra del BP pueda ser efectuada en GPU.
4. Experimentacion exhaustiva: La implementacion ha sido validadamediante la resolucion de un conjunto de tareas complejas y se haelaborado un estudio sobre la influencia de los parametros en ellas.
4 de 27
Aportacion 1: Diseno del BP
• El BP de April ha sufrido cambios desde 2005 para cumplir nuevosrequisitos: Rediseno aprovechando los conocimientos previos.
• Otras implementaciones ofrecen flexibilidad a costa de eficiencia(neuronas independientes) o eficiencia utilizando topologıasespecializadas. Este diseno combina lo mejor de ambasaproximaciones.
• El modo “on-line” ha sido mejorado.
5 de 27
Aportacion 2: El modo bunch
Diseno de la red sin bunch:
i
o
i+1 o
o+1
s
s
Diseno de la red con bunch (b muestras):
b
i
o
i+1
bo
b
o+1
s
s
6 de 27
Bibliotecas de algebra lineal
La API de BLAS declara un conjunto de funciones aplicables sobrevectores y matrices.
Esta se divide en 3 niveles:
• Nivel 1: Operaciones aplicables sobre un conjunto de vectores, dela forma y ← αx + y .
• Nivel 2: Operaciones aplicables sobre matrices y vectores, de laforma: y ← αAx + βy .
• Nivel 3: Operaciones aplicables sobre un conjunto de matrices, dela forma: C ← αAB + βC .
7 de 27
Implementaciones de la API de BLAS
Las bibliotecas que implementan esta API aceleran la ejecucion deeste tipo de operaciones mediante el uso de:
• Instrucciones vectoriales especializadas.
• Memoria alineada.
• Multiples nucleos de la CPU.
• La GPU.
En este proyecto se usan tres implementaciones de la API de BLAS:
• ATLAS: Una biblioteca de codigo abierto que podemos usar paracualquier tipo de procesador.
• Intel MKL: La biblioteca de Intel. Permite el uso de multiplesnucleos del procesador.
• CUBLAS: La biblioteca de CUDA. Permite el uso de la GPU.8 de 27
Aportacion 3: Implementacion con CUDA
Las GPUs son procesadores SIMD con unos300 nucleos (comparado con los 8 de unaCPU), pensados inicialmente para calculo degraficos 3D, pero utilizados en el campo dela computacion de altas prestaciones.
Las GPU de Nvidia disponen de laarquitectura CUDA que facilita la realizacionde operaciones de forma paralela, mediante eluso del lenguaje CUDA.
9 de 27
Bloques de memoria y wrappers
Hemos disenado una clase pararepresentar memoria compartida entreCPU y GPU: El bloque de memoria. Estosbloques de memoria se encargan desuministrar el tipo de memoria pedido deforma actualizada.
Tambien se han disenado los wrapperspara el algebra lineal, que nos permitenrealizar la llamada de funciones dealgebra lineal de forma independendientea la biblioteca usada para compilar.
10 de 27
Aportacion 4: Experimentacion
Correccion: La correccion de todas las versiones ha sido validadamediante la resolucion de las tareas dıgitos y xor.
Rendimiento: El rendimiento ha sido valorado en base a la resolucionde una tarea no trivial, en donde se realiza:
1. Un barrido de parametros del entrenamiento.
2. Un barrido de topologıas.
3. Un estudio del paralelismo.
11 de 27
Experimentacion: Rendimiento (Tarea)
La tarea MNIST es una tarea de clasificacion de dıgitos manuscritosformada a partir de las bases de datos publicadas por el NIST. Elcorpus de entrenamiento esta formado por 60000 imagenes de28× 28 pıxeles cada una.
Las redes con las cuales realizaremos el entrenamiento compartenestas caracterısticas:
• La capa de entrada estara formada por 784 neuronas.
• La capa de salida estara formada por 10 neuronas.
• La funcion de activacion en las capas ocultas sera la tangentehiperbolica y en la capa de salida sera la softmax.
• La funcion de error de la red sera la entropıa cruzada.
12 de 27
Experimentacion: Rendimiento (Parte 1)
Objetivo: Buscar un conjunto de parametros cuyo resultadorepresente un buen compromiso entre el error de validacion y eltiempo de ejecucion.
Se realizaran un total de 132 experimentos por build, resultantes delas 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
Experimentacion: Rendimiento (Parte 1)
Errores de validacion 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
Err
or
en v
alid
acio
n (
%)
Valor bunch
ATLAS MKL
CUDAminimo
14 de 27
Experimentacion: 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
Tie
mpo (
segundos)
Valor bunch
ATLASMKL
CUDAminimo
15 de 27
Experimentacion: Rendimiento (Parte 2)
Objetivo: Encontrar un numero de neuronas en las capas ocultas quedisminuya el error en los conjuntos de test y validacion.
Se realizaran 30 experimentos para cada build, resultantes de lassiguientes 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
Experimentacion: Rendimiento (Parte 2)
Errores de clasificacion del conjunto de validacion y test respecto alnumero 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
Err
or
en v
alid
acio
n (
%)
Neuronas en la primera capa
0 neuronas32 neuronas64 neuronas
128 neuronas256 neuronas
1
1.5
2
2.5
3
3.5
4
32 64 128 256 512 1024
Err
or
en test (%
)
Neuronas en la primera capa
0 neuronas32 neuronas64 neuronas
128 neuronas256 neuronas
17 de 27
Experimentacion: Rendimiento (Parte 2)
Errores de clasificacion del conjunto de validacion y test respecto alnumero 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
Err
or
en v
alid
acio
n (
%)
Neuronas en la primera capa
0 neuronas32 neuronas64 neuronas
128 neuronas256 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
Err
or
en test (%
)
Neuronas en la primera capa
0 neuronas32 neuronas64 neuronas
128 neuronas256 neuronas
18 de 27
Experimentacion: Rendimiento (Parte 3)
Objetivo: Examinar que ocurre al lanzar varios experimentos enparalelo, para encontrar el modo de ejecucion con mayorproductividad.
Se realizaran experimentos para las siguientes combinaciones devalores:
• Numero de experimentos: 1, 2 y 4.
• Nucleos a usar por cada proceso: 1, 2 y 4.
19 de 27
Experimentacion: Rendimiento (Parte 3)
Tiempos wall por epoca respecto al numero de nucleos empleados enla ejecucion del experimento para la build con MKL:
0
1
2
3
4
5
6
7
8
9
10
1 2 4
Tie
mpo w
all
(segundos)
Valor OMP_NUM_THREADS
1 hilo2 hilos paralelos4 hilos paralelos
20 de 27
Experimentacion: Rendimiento (Parte 3)
Tiempos wall por epoca respecto al numero de nucleos empleados enla ejecucion del experimento para la build con CUDA:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
1 2 4
Tie
mpo w
all
(segundos)
Valor OMP_NUM_THREADS
1 hilo2 hilos paralelos4 hilos paralelos
21 de 27
Experimentacion: Rendimiento (Parte 3)
Analisis de la productividad al lanzar varios procesos de formaconcurrente usando la build con MKL:
Valor de Hilos Tiempo ProductividadOMP NUM THREADS concurrentes por epoca por epoca
1 1 4,017 4,0172 1 2,671 2,6714 1 2,062 2,0621 2 4,266 2,1332 2 2,893 1,44654 2 3,496 1,7481 4 4,733 1,183252 4 5,158 1,28954 4 8,074 2,0185
22 de 27
Uso de la aplicacion
April esta siendo utilizado en numerosos trabajos de investigaciondesde el ano 2005 aproximadamente.
La nueva implementacion del BP de April ya esta siendo utilizadapara tareas de limpieza de imagenes, traduccion automatica [Zam12]y prediccion de temperaturas [ZRP+].
Estamos preparando un artıculo en donde se describen lasaportaciones de la herramienta April para enviarlo a alguna revista ocongreso relacionado con el reconocimiento de formas.
23 de 27
Conclusiones
Los objetivos que nos habıamos propuesto al principio del proyectohan sido alcanzados con exito:
1. Se ha hecho un rediseno completo de las redes neuronales de Aprilpara ejecutar el algoritmo BP en CPU de un modo eficiente.
2. Este diseno incluye la formulacion del BP en modo “bunch” conmomentum y weight decay.
3. Sobre el nuevo diseno, se ha incorporado la opcion de utilizar laGPU para efectuar los calculos de forma paralela y eficiente.
4. Exhaustiva experimentacion para comprobar la correccion y elrendimiento de la aplicacion. Estudio del efecto de determinadosparametros de entrenamiento y configuracion sobre tareas notriviales (MNIST).
24 de 27
Cuantificando la mejora
April: Unas 600 veces mas rapido que SNNS (utilizado en practicas deRedes 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
Ampliaciones futuras
Algunas de las propuestas para ampliar la herramienta son:
• Interfaz grafica.
• Adaptacion al uso de otras librerıas.
• Uso de multiples GPUs, computacion en grid.
• Implementacion de otros algoritmos con GPU.
26 de 27
¿Preguntas?
Para conocer mas sobre el proyecto, la memoria estara disponible parasu consulta en el Repositorio Institucional de la UPV (RiuNet).
Muchas gracias por asistir a esta exposicion.
27 de 27