Advertisement
DavidsonDFGL

readme

Sep 28th, 2018
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. Pontifícia Universidade Católica de Minas Gerais
  2. Computação Paralela
  3.  
  4. Projeto 01 – Implementação Paralela de uma Técnica de Inteligência
  5. Artificial
  6.  
  7. Davidson Francis Gonçalves de Lima
  8. Guilherme David Matias Ferreira
  9. Rama Alvim Sales Schiavo
  10.  
  11. 1) Genann
  12. ---------
  13.  
  14. Genann (https://github.com/codeplea/genann) é uma simples rede neural
  15. de código aberto com suporte a backpropagation escrita em ANSI C.
  16. Consiste apenas de 2 arquivos (genann.c, genann.h) e pode ser facilmen-
  17. te incluída em qualquer projeto.
  18.  
  19. 2) Base de dados
  20. ----------------
  21.  
  22. A base de dados utilizada é a famosa IRIS, que consiste na classifi-
  23. cação de três tipos de plantas Iris (Setosa, Versicolor e Virgínica)
  24. baseado na altura e largura das pétalas e sépalas. Possui 150
  25. instâncias (50 instâncias de cada classe) e 4 atributos de tipo 'real'.
  26.  
  27. Uma classe é linearmente separável das outras duas, enquanto a última
  28. não é. Portanto, embora pequena, é uma boa base para testes de aprendi-
  29. zado de máquina.
  30.  
  31. 3) Compilação
  32. -------------
  33.  
  34. O processo de compilação é bem simples, e pode ser feito com a seguinte
  35. linha de código: gcc iris.c genann.c -o iris -lm, acrescente -fopenmp
  36. para testar a versão paralela ou configure o número de threads via a
  37. variável de ambiente OMP_NUM_THREADS.
  38.  
  39. 4) Alterações
  40. -------------
  41.  
  42. Foram feitas duas alterações no código:
  43.  
  44. 1a) Realizada no genann.c, essa alteração permite paralelizar o loop
  45. que percorre todos os neurônios de uma determinada camada.
  46.  
  47. --- genann-orig.c 2018-09-27 20:05:34.344235604 -0300
  48. +++ genann.c 2018-09-27 21:37:06.000000000 -0300
  49. @@ -317,6 +317,7 @@
  50. /* Find first weight in following layer (which may be hidden or output). */
  51. double const * const ww = ann->weight + ((ann->inputs+1) * ann->hidden) + ((ann->hidden+1) * ann->hidden * (h));
  52.  
  53. + #pragma omp parallel for
  54. for (j = 0; j < ann->hidden; ++j) {
  55.  
  56. double delta = 0;
  57.  
  58. 2a) Realizada no iris.c, essa alteração permite paralelizar os treina-
  59. mentos, i.e: executar e vincular blocos de entradas para determinadas
  60. threads do sistema. Foi a modificação que de fato introduziu SpeedUp
  61. ao código.
  62.  
  63. --- iris-orig.c 2018-09-27 20:05:45.409235048 -0300
  64. +++ iris.c 2018-09-27 21:36:55.116237575 -0300
  65. @@ -91,7 +91,7 @@
  66.  
  67. /* Train the network with backpropagation. */
  68. printf("Training for %d loops over data.\n", loops);
  69. -
  70. + #pragma omp parallel for
  71. for (i = 0; i < loops; ++i) {
  72. for (j = 0; j < samples; ++j) {
  73. genann_train(ann, input + j*4, class + j*3, .01);
  74.  
  75.  
  76. Discussão sobre o problema
  77. --------------------------
  78.  
  79. Muito embora a aplicação tenha apresentado um SpeedUp máximo de 2.78 para
  80. 8 threads, há alguns pontos que gostaríamos de ressaltar.
  81.  
  82. A abordagem inicial foi executar a aplicação no GProf e Intel Advisor
  83. como forma de identificar os pontos críticos e possivelmente prováveis
  84. de paralelização. Pôde-se perceber então que existem três loops aninha-
  85. dos de destaque na função genann_train(), loops esses que processam as
  86. camadas, neurônios e as saídas respectivamente.
  87.  
  88. O objetivo então consistia em paralelizar o loop do 'meio', loop este
  89. que realiza a maior parte do trabalho, uma vez que a rede foi configu-
  90. rada para 4 entradas, 1 camada oculta (como forma de maximar o nível
  91. de paralelismo para entradas pequenas), 500 neurônios/camada e 3 saídas.
  92.  
  93. Embora este objetivo tenha sido realizado conforme abordado na seção
  94. 4-1a), não houve um speedup e esta modificação foi incluída e menciona-
  95. da aqui apenas para fins de constatação.
  96.  
  97. ---
  98. Com a falta de sucesso com o objetivo 1a), nosso segundo objetivo passou
  99. a ser a modificação realizada em 2a). Como dito anteriormente, esta mo-
  100. dificação consiste na paralelização dos treinamentos, e, embora tenha
  101. garantido um speedup de cerca de ~2.71 para 4 cores (parcode) há
  102. algumas coisas que gostaríamos de ressaltar:
  103.  
  104. O treinamento de rede neural sequencial e a paralela apresentam ligeiras
  105. diferenças na taxa de acerto. Essas diferenças são de certa forma signi-
  106. ficativas pois há dependência de dados. A forma como a paralelizaçâo da
  107. rede neural foi implementada trata cada conjunto de treinamento como uma
  108. thread. Há 3 saidas em cada thread e a rede neural usa backpropagation
  109. para ser treinada.
  110.  
  111. Foram realizados testes para 64, 256, 500 e 5000 treinamentos, e,
  112. obteve-se uma taxa de acerto maior na rede neural sequencial até cerca
  113. 64 treinamentos. A partir daí, os treinamentos da rede neural paralela
  114. apresentaramm mais acertos do que a sequencial, chegando às vezes a mais
  115. de 98% com uma quantidade de 5000 treinamentos, enquanto a sequencial não
  116. passa de 98%.
  117.  
  118. O grupo especula que ao realizar o treinamento com backpropagation, a
  119. rede neural deixou de alterar alguns pesos e gravou outros. A longo
  120. prazo, esses pesos sofreram um efeito colateral (não vamos chamar de
  121. erro aqui), que serviram para aproximar ainda mais do resultado desejado,
  122. aumentando a taxa de acerto em cerca de 1%. É necessário entender o que
  123. acontece do ponto de vista estatístico, já que a rede neural paralela,
  124. ao realizar o join, trata certas variáveis que exercem impacto na mudan-
  125. ça de pesos. Utilizando o Intel Inspector, foram identificadas 3 con-
  126. diçôes de corrida, como pode ser observado na imagem (imagens/insp.png)
  127. inclusive no acesso ao valor dos pesos.
  128.  
  129. Talvez seja possivel aumentar ainda mais a taxa de acerto da rede neu-
  130. ral se esse efeito de gravação de pesos for identificado e puder ser
  131. induzido naturalmente em uma rede neural paralela.
  132.  
  133. Tempos (parcode)
  134. ----------------
  135.  
  136. Foram realizados os seguintes testes com a base IRIS, na rede abaixo:
  137. 5000 treinamentos
  138. 4 entradas
  139. 1 camada oculta
  140. 500 neurônios por camada oculta
  141. 3 saídas
  142.  
  143. Sequencial:
  144. ~~~~~~~~~~~
  145.  
  146. real 1m5.698s
  147. user 1m4.906s
  148. sys 0m0.776s
  149.  
  150. Paralelo:
  151. ~~~~~~~~~
  152.  
  153. 2 threads:
  154. real 0m48.641s
  155. user 1m29.166s
  156. sys 0m0.840s
  157. SpeedUP: 1.35
  158.  
  159. 4 threads:
  160. real 0m24.183s
  161. user 1m32.600s
  162. sys 0m0.772s
  163. SpeedUP: 2.71
  164.  
  165. 8 threads:
  166. real 0m23.614s
  167. user 1m33.192s
  168. sys 0m0.760s
  169. SpeedUP: 2.78
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement