Login
Newsletter
Werbung

Do, 26. Dezember 2013, 15:00

GPU-Computing mit R

Geschwindigkeitsmessungen in R

Nachfolgend wird eine einfach zu programmierende Geschwindigkeitsmessung mit dem R-Paket gputools auf einem lokalen Rechner mit einer NVIDIA Quadro 410 Grafikkarte und unter Verwendung der in der Einleitung bereits angesprochenen Amazon-GPU-Instanz »cg1.4xlarge« mit dem Ubuntu Server 12.04 LTS Systemabbild »ami-c87b6fbc« gezeigt. Es wurde jeweils zwischen der verwendeten CPU und GPU verglichen.

Matrixmultiplikation mit CPU und GPU

Markus Lilienthal und Markus Herrmann

Matrixmultiplikation mit CPU und GPU

Das erste Beispiel zeigt eine Matrixmultiplikation von zwei mit normalverteilten Zufallszahlen gefüllten Matrizen der Dimension 3000x3000 auf einem herkömmlichen Arbeitsplatzrechner mit einer AMD A8-5500 4-Kern CPU und einer NVIDIA Quadro 410 mit 192 CUDA-Kernen:

> n<-3000 
> set.seed(100)
> M1=matrix(rnorm(n^2),ncol=n)
> M2=matrix(rnorm(n^2),ncol=n) 

> system.time(M1%*%M2) 
user        system      elapsed
35.642      0.056       35.758
> system.time(gpuMatMult(M1, M2))
user        system      elapsed
5.144       0.032       5.187

Das folgende Beispiel wurde auf der Amazon-GPU-Instanz mit zwei Intel Xeon X5570 CPUs und zwei NVIDIA »Tesla« M2050 GPUs berechnet. Hier erfolgt eine Matrixmultiplikation von zwei mit normalverteilten Zufallszahlen gefüllten Matrizen der Dimension 5000x5000:

> n=5000 
> set.seed(100) 
> M1=matrix(rnorm(n^2),ncol=n) 
> M2=matrix(rnorm(n^2),ncol=n) 

> system.time(M1%*%M2) 
user        system      elapsed 
161.930     0.140       162.036 
> system.time(gpuMatMult(M1, M2)) 
user        system      elapsed 
0.792       0.280       1.073

Bei beiden Szenarien wurde eine Überlegenheit der GPU-gestützten Berechnung beobachtet. Konnten schon beim lokalen Vergleich spürbare Geschwindigkeitsvorteile, Faktor 6-8, beobachtet werden, so zeigt die Nutzung der Tesla-GPU eine massive Beschleunigung. Hier dauerte die CPU-gestützte Berechnung 161,930 Sekunden, die GPU-gestützte Berechnung jedoch nur 0,792 Sekunden.

Diese Ergebnisse sind allerdings auch kritisch zu hinterfragen. So sind diese Messungen natürlich von der individuellen Systemkonfiguration und der gewählten Aufgabenstellung abhängig. Zudem konnte mit dem vorhandenen lokalen Testsystem (unter Verwendung der NVIDIA Quadro 410) eine Matrixmultiplikation mit Matrizen der Dimension 5000x5000 mangels Arbeitsspeichers schon nicht mehr durchgeführt werden. Insofern müssen die Komplexität beziehungsweise Dimensionen der Tests immer auch an die Leistungsfähigkeit der für die Tests verwendeten Grafikkarte angepasst werden.

Dennoch machen diese Ergebnisse mit Nachdruck deutlich, dass Matrixmultiplikationen durch entsprechende Hardware und gputools extrem beschleunigt werden können und man somit in der Lage ist, stunden- oder tagelange Rechenprozeduren deutlich zu verkürzen. Nun muss nur noch abgewogen werden, ob dieser Geschwindigkeitsvorteil die monetären Kosten ausgleicht.

Hier schließt sich dann der Kreis zu der Empfehlung, die CUDA-basierte Entwicklung, wenn möglich, lokal durchzuführen. Unter Minderung der Dimensionen kann bei einer Vielzahl von Aufgabenstellungen ohne den Kostendruck, der durch die Anmietung eines Hochleistungssystems entstehen würde, ausgiebig getestet werden.

Fazit

Die Nutzung von GPUs für statistische Berechnungen in R ist eine interessante Option. Da auf den meisten Desktop-Rechnern Grafikkarten installiert sind, benötigt man für den Einstieg oft nicht einmal neue Hardware. Wem die Heim-Grafikkarte nicht ausreicht, dem werden Cloud-Angebote für Gelegenheitsprojekte empfohlen. Die Einrichtung ist allgemein recht unproblematisch. In R selbst kann man entweder auf einige bereits existierende Pakete zurückgreifen oder auch eigene Bibliotheken schreiben. Da der Funktionsumfang der verfügbaren Pakete leider noch sehr übersichtlich ist, wird man schnell das Bedürfnis entwickeln, letztere Option auszuprobieren. Dennoch können allein die verfügbaren Pakete beachtliche Geschwindigkeitsvorteile mit sich bringen. Die Beschleunigungsfaktoren bei speziellen Operationen liegen im dreistelligen Bereich.

Ein paar Mankos sollten allerdings nicht unerwähnt bleiben:

  • NVIDIAs CUDA-Plattform ist momentan dominierend. Wünschenswert wäre eine stärkere Öffnung hin zu offenen Plattformen (OpenCL).
  • GPU-Einsatz lohnt sich nur dann, wenn die Fixkosten durch die Übertragung zwischen dem Arbeitsspeicher der GPU und der CPU im Vergleich zum Gesamtzeitverbrauch der Berechnung klein ist. Der Einsatz lohnt sich also nur bei rechenintensiven Aufgaben.
  • Da der Arbeitsspeicher einer GPU recht knapp bemessen ist, passen sehr große Daten nur scheibchenweise dort hinein. Die Programmierung wird dann zusätzlich aufwändig.

Wünschenswert wäre ein noch stärkeres Engagement der R-Entwicklergemeinschaft, entsprechende Funktionalitäten über fertige Pakete auch Laien verfügbar zu machen. Dies wäre für viele R-Nutzer eine große Bereicherung.

Autoreninformation

Markus Lilienthal und Markus Herrmann sind beide in der Marktforschung tätig. Lilienthal hat über den Einsatz von Cloud Computing promoviert und arbeitet intensiv mit R. Herrmann ist im Bereich Computational Statistics beschäftigt.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung