27
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

Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

Embed Size (px)

Citation preview

Page 1: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 2: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 3: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 4: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 5: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 6: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 7: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 8: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 9: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 10: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 11: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 12: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 13: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 14: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 15: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 16: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 17: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 18: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 19: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 20: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 21: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 22: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 23: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 24: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 25: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 26: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

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

Page 27: Implementación de un módulo para el entrenamiento y evaluación de redes neuronales mediante GPUs

¿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