MNIST-3LNN-CUDA

3-Layer Neural Network for MNIST Handwriting Recognition with CUDA

by Stefan Büttner and Fabio Hellmann

Agenda

Einführung

Neuronales Netzwerk

"Neuronale Netze beziehen sich auf das Neuronennetz des menschlichen Gehirns. Dieses dient als Analogie und Inspiration für in Computern simulierte künstliche neuronale Netze. Diese Analogie steht bei heutigen Arbeiten zu neuronalen Netzen jedoch häufig nicht mehr im Vordergrund." - Neuronale Netze
(Günter Daniel Rey / Karl F. Wender)

Aufgabe

  • 3-Layer Neuronales Netzwerk
    • MNIST Testdaten
    • Parallelisierung
    • CUDA

Realisierung

Sequentiell

Grundlage: "Simple 3-Layer Neural Network for MNIST Handwriting Recognition" - Matt Lind

  • MNIST Datensatz
    • 60.000 Trainingsdaten
    • 10.000 Testdaten
  • C → C++
  • Sequentiell → Sequentiell / Parallel / CUDA / Verteilt
  • C Struktur → Objektorientierte / Abstrakte Struktur

Parallel

Strategien zur Parallelisierung

  • Session - Unabhängige Netzwerke mit unterschiedlichen Startwerten
  • Exemplar - Trainingsdaten aufgesplittet in mehreren Netzwerken abarbeiten und anschließend zusammenführen
  • Node - Die Neuronen werden von Threads bearbeitet
  • Weight - Die Kanten, die Neuronen verbinden, werden von Threads bearbeitet

CUDA

Parallelisierung
  • Matrix Operationen
  • Anwendung der Aktivierungsfunktion
  • Batch-Verarbeitung

CUDA

Verteilt

Performance

Ausführungsart >93% >94% >95%
Sequentiell 9.01534 15.7818 33.7251
Parallel 8.92147 15.8313 23.4899
CUDA ... ... ...
Sequentiell-Verteilt* 2.04115 2.66057 2.85507
Parallel-Verteilt* 8.04285 9.80803 12.9221
CUDA-Verteilt* ... ... ...
* Verteilt auf 10 Prozesse (1 Master / 9 Slaves)

Fazit

Schlecht

  • Schwer zu debuggen
  • CUDA Implementierung funktioniert noch nicht

Gut

  • Aktuelles spannendes Thema
  • Basic Implementierung eines Neuronalen Netzes
  • Gesteigertes Verständnis für Neuronale Netze
  • Intensive Auseinandersetzung mit C++/CUDA