Forum: PC-Programmierung 2018 CUDA / OpenCL - wie nutzen?


von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Hallo zusammen,
wir möchten neuronale Netze ausprobieren. Seit Geoffrey E. Hinton 2007 
hat die künstliche Intelligenz einen großen Sprung gemacht. Deep 
Learning geht nun - 10 Jahre später - mit einer 300€-Grafikkarte oder 
einer 2000€- Coprozessor-Karte auch zuhause.

C# wäre cool, C oder C++ gehen aber auch.

Welche Grafikkarte sollten wir uns z.B. kaufen?

Ich habe gehört, NVIDIA/CUDA sei besser als AMD/OpenCL.

Hat jemand Erfahrungen und kann und kann uns (meinem Sohn und mir) den 
Einstieg erleichtern?

Was sollten wir kaufen?

Geht Deep Learning mit C# und Visual Studio? Oder was sollten wir als 
IDE nutzen?

VG Torsten

von TestX (Gast)


Lesenswert?

eine IDE ist dein kleinstes problem. wenn du vernünftig einsteigen 
willst brauchst du ein framework wie zB tensorflow. das nimmt dir sehr 
sehr viel ab...allerdings ist die eintiegshürde auch sehr hoch.

hast du schon eine konkrete anwendung mit entsprechenden trainingsdaten 
? wenn nicht solltest du erstmal hier anfangen bevor du loslegen 
kannst..

von deeplearn (Gast)


Lesenswert?

Hi,

OpenCL funktioniert auf vielen Plattformen (AMD, NVIDIA, Intel, ... ), 
CUDA ist dagegen auf NVIDIA beschränkt aber dafür ein wenig 
performanter. Ich würde daher erst einmal mein Glück mit OpenCL 
versuchen. Ich habe mir für den Einstieg eine NVIDIA 1050TI gekauft. Die 
bietet ein gutes Preis-Leistungsverhältnis und reicht für den Einsteig 
(selbstentwicklung oder Tensorflow etc.) mehr als aus.

Gruß

von Billy (Gast)


Lesenswert?

Torsten C. schrieb:
> Geht Deep Learning mit C# und Visual Studio?

Klar, du kannst in CUDA oder OpenCL eine C#-VM implementieren. Überhaupt 
kein Problem.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Tensorflow kannte ich noch nicht. Danke.
Wenn man danach googelt, dann hagelt es nur so an Infos.
Keine Ahnung, warum ich das nicht gefunden habe.

Ich installiere mir das mal unter Windows und schaue, wie weit ich damit 
komme:
https://www.tensorflow.org/install/install_windows

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

aus dem "Getting started"
 Getting Started With TensorFlow

This guide gets you started programming in TensorFlow. Before using this 
guide, install TensorFlow. To get the most out of this guide, you should 
know the following:

    How to program in Python.

von Donni D. (Gast)


Lesenswert?

TensorFlow oder CNTK angucken

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Mike B. schrieb:
> How to program in Python.
Ja, Mist. Ich bin in C# zuhause. Ich befürchte, da muss man wohl durch?

Billy schrieb:
> Klar, du kannst in CUDA oder OpenCL eine C#-VM implementieren.
Wie ist das gemeint? Ich dachte wohl eher umgekehrt, z.B. wie mit der
Task Parallel Library (TPL) mit "Parallel.ForEach()" z.B.
https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop

Donni D. schrieb:
> CNTK angucken

Schaue ich mir an. :) Danke, klingt gut:
> CNTK can be included as a library in your C# programs
https://docs.microsoft.com/en-us/cognitive-toolkit/

von Neugieriger (Gast)


Lesenswert?

Wie ist das eigentlich, brauch man für solche Spielereien zwei 
Grafikkarten? Also eine, die den Monitor bedient, und eine, auf der man 
Berechnungen durchführt?

Oder läuft die normale Monitor-Anzeige und die Berechnung neuronaler 
Netze simultan auf einer einzigen eingebauten Grafikkarte im PC?

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Neugieriger schrieb:

> Oder läuft die normale Monitor-Anzeige und die Berechnung neuronaler
> Netze simultan auf einer einzigen eingebauten Grafikkarte im PC?

solange du da keine tollen Games nebenbei zockst sollten CUDA und OpenCL 
sowieso exclusiven Zugriff auf die Recheneinheiten haben

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Das^^ ist ja mysteriös:
Nehmen wir an, es ist sowohl eine Nvidia Geforce GTX 1050 Ti (wie bei 
deeplearn^^) und eine Nvidia Geforce GTX 750 Ti (wie in meinem 
Windows-PC) eingesteckt.

Geht das überhaupt? Kann man dann beide parallel mit CUDA/OpenCL 
nutzen?

Oder hat Grafik Vorrang vor CUDA/OpenCL? Oder umgekehrt?
Und ist für Linux und Win10 die Antwort die gleiche?

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Lesenswert?

Torsten C. schrieb:
> Mike B. schrieb:
>> How to program in Python.
> Ja, Mist. Ich bin in C# zuhause. Ich befürchte, da muss man wohl durch?

Nun, sagen wir so: in der wissenschaftlichen und der professionellen 
Datenanalyse ist Python sehr stark vertreten, weil es einerseits sehr 
leicht zu lernen, schreiben und lesen ist, und andererseits durch die 
Einbindung von nativem Code enorm performant sein kann. Obendrein bringt 
Python mit Matplotlib, Bokeh, Holoviews oder Datashader leistungsfähige 
Frameworks zur Datenvisualisierung mit.

Und genau deswegen, weil Python mittlerweile in der Datenanalyse so eine 
Art Industriestandard geworden ist, bieten etwa 
MachineLearning-Frameworks wie Tensorflow und scikit-learn entweder 
Python-Support an oder sind gleich in Python implementiert. Deswegen 
bieten auch Frameworks zum Distributed Computing wie Apache Spark native 
Python-Unterstützung an... ;-)

Trotzdem ist Python so einfach, daß es in Großbritannien mittlerweile 
sogar schon an Grundschulen als erste Programmiersprache gelehrt wird. 
Für jemand mit Programmiererfahrung, insbesondere in einer 
objektorientierten Sprache wie C#, C++, oder Java, ist das Lernen von 
Python nach meinen Erfahrungen mit mir selbst, meinen Kollegen und 
einigen Freunden ein Kinderspiel.

Wenn Du es versuchen möchtest, würde ich Dir für Windows die 
Distribution "Anaconda" empfehlen, die neben den Standardpaketen schon 
viele Libraries, Frameworks und Werkzeuge für Scientific Computing, 
Machine Learning und Datenvisualisierung mitbringt.

Ansonsten, nur so eine Idee: Machine Learning und solche Dinge kann man 
zunächst auch auf der CPU machen und braucht nicht zwingend eine GPU. 
Die GPU wird erst dann interessant, wenn die Geschichte besonders 
performant werden soll, etwa um Daten in Echtzeit verarbeiten zu können. 
Bis Ihr an dem Punkt seid, würde ich den Erwerb einer eigenen 
Grafikkarte für dieses Thema zunächst zurückstellen -- die Preise sinken 
kontinuierlich und die Leistungsfähigkeit der Karten steigt schnell. 
Machine Learning ist recht komplex -- und bis Ihr Euch da ohne 
Vorkenntnisse hineingearbeitet habt, kosten die Top-Grafikkarten von 
heute nur noch die Hälfte und werden für dasselbe Geld vermutlich 
schnellere Karten erhältlich sein. YMMV.

von Daniel A. (daniel-a)


Lesenswert?

Eine GPU ist einfach ein relativ hoch spezialisierter Prozessor der 
viele gleichartige Operationen paralel ausführen kann. Ein bischen 
Fenster zeichnen kostet da nicht viel rechenleistung, aber wenn man will 
kann man ja trotzdem auf das ganze GUI zeug verzichten.

Ich empfehle OpenCL, Nvidia ist mir wegen ihrem anti competitiven 
Verhalten, ihren zahlreichen Patenten und Proprietären 
eigenentwicklungen schon lange ein Dorn im Auge.

Torsten C. schrieb:
> Geht das überhaupt? Kann man dann beide parallel mit CUDA/OpenCL
> nutzen?
>
> Oder hat Grafik Vorrang vor CUDA/OpenCL? Oder umgekehrt?
> Und ist für Linux und Win10 die Antwort die gleiche?

Wann die karte was macht ist (normalerweise) sache des OS und dessen 
Grafigkartentreiber. Alle heutigen Systeme können damit umgehen, wenn 
mehrere Anwendungen die Karte benötigen.

Es gibt diverse standardisierte APIs um mit Grafigkarten zu 
interagieren. Für Berechnungen eben OpenCL. Die OpenCL API sieht vor, 
dass man zunächst einen OpenCL context erstellt. Dabei kann man angeben, 
welche Geräte man verwenden will: 
https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clCreateContext.html
https://gist.github.com/courtneyfaulkner/7919509
Bei der 3D Grafik API Vulkan ist dies genauso, bei deren Vorgänger 
OpenGL hingegen wählt die OpenGL implementierung aus welches Gerät 
verwendet wird.

Torsten C. schrieb:
> Billy schrieb:
>> Klar, du kannst in CUDA oder OpenCL eine C#-VM implementieren.
> Wie ist das gemeint? Ich dachte wohl eher umgekehrt, z.B. wie mit der
> Task Parallel Library (TPL) mit "Parallel.ForEach()" z.B.
> 
https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop

Wenn du OpenCL verwenden willst, kannst du zwar mit einer beliebigen 
Sprache die Daten zur Grafikkarte senden usw., aber die eigentlichen 
Berechnungen wirst du dann doch in OpenCL schreiben müssen.

PS: Achte beim Graphikkartenkauf darauf eine zu nehmen die aktuellen 
OpenCL und GLSL versionen unterstützen. Ich hatte schon schlechte 
erfahrungen bei NVIDIA, wo aktuelle Gameingkarten nur relativ alte 
OpenCL und GLSL versionen hatten, wärend vergleichbare teurere Business 
modelle neuere versionen hatten, vermutlich damit Game entwickler die 
nicht sowieso Nvidias lösungen nutzen nicht das volle Potential der 
Hardware der Konkurrenz ausnutzen können, aber das ist reine 
Spekulation...

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Torsten C. schrieb:
> Das^^ ist ja mysteriös:
> Nehmen wir an, es ist sowohl eine Nvidia Geforce GTX 1050 Ti (wie bei
> deeplearn^^) und eine Nvidia Geforce GTX 750 Ti (wie in meinem
> Windows-PC) eingesteckt.
>
> Geht das überhaupt? Kann man dann beide parallel mit CUDA/OpenCL
> nutzen?
ich denke ja, da bei beiden vor der Berechnung der Rechner auf alle 
möglichen Recheneinheiten durchsucht wird
dabei ist es egal, wenn zwei unterschiedliche GK drin sind, Hauptsache 
sie lassen sich als passende Devices ansprechen

CUDA nimmt nur CUDA-fähige Graphikkerne, ob das mittlerweile auch AMD-GK 
umfasst weiss ich gar nicht, ansonsten eben ausschliesslich GK mit 
nVidia-Kernen

https://de.wikipedia.org/wiki/OpenCL#Architektur
OpenCL nimmt sowohl GPU als auch CPU, und dort jeweils die einzelnen 
Kerne als eigenständige Recheneinheiten

bei beiden Ansätzen wird die Rechenlast automatisch auf alle 
Recheneinheiten verteilt

> Oder hat Grafik Vorrang vor CUDA/OpenCL? Oder umgekehrt?
wie gesagt, wenn du nebenbei keine Spiele zockst, also 
DirectX-Anwendungen am Laufen hast, kann das egal sein
ansonsten dürfte die Last für die Spiele und die Berechnungen automtisch 
aufgeteilt werden

> Und ist für Linux und Win10 die Antwort die gleiche?
k.A., ich weiss nur, dass Linus Thorvalds nicht umsonst immer auf nvidia 
schimpft, die Treiber-Unterstützung nvidia-Linux war zumindest mal 
mangelhaft, das betraf dann sicher auch CUDA

Wenn du ihn nicht brauchst kannst du Linux ohne Desktop starten was eine 
ganze Menge Last vom Rechner nimmt, Speicher- und CPU-Auslastung sind 
entsprechend niedriger. Ob dann CUDA/OpenCL aber ansprechbar sind weiss 
ich auch nicht.
Versuch das mal mit Win10...

von Flaschensammler Troll (Gast)


Lesenswert?

Vergiss Neuronale Netze. Das ist schon lange ein totes Pferd, auf das 
immer wieder Neue aufsteigen, weil man nochmals ein Paper rausdruecken 
kann.
Macht sich gut in Patenten und Werbung, da man nichts offenlegen muss.
Neuronale Netze lernen und vergleichen Muster. Bedeutet man muss es 
trainieren, und kann nachher etwas aehnliches hinwerfen, das dann 
erkannt werden kann. Allerdings gibt es kein inkrementelles Lernen. Dh 
wenn die Buchstaben A-Y erkannt werden, kann man nicht Z hinzufuegen, 
sondern muss A-Z neu lernen lassen.

von Andreas R. (daybyter)


Lesenswert?

Wenn man das Lernen automatisieren kann, ist das doch nicht so schlimm?

Kennst Du eine Technologie, die NN auf deren Domänen ersetzen kann? Ich 
bin ja auch ein Freund von regelbasierten Systemen, muss aber zugeben, 
dass wir die auf vielen Gebieten kaum realisieren können, weil wir 
Menschen die Regeln nicht mehr überblicken können.

von Rolf M. (rmagnus)


Lesenswert?

Flaschensammler Troll schrieb:
> Vergiss Neuronale Netze. Das ist schon lange ein totes Pferd, auf das
> immer wieder Neue aufsteigen, weil man nochmals ein Paper rausdruecken
> kann.

Nein. Das Thema neuronale Netze fängt gerade erst so richtig an.

> Macht sich gut in Patenten und Werbung, da man nichts offenlegen muss.
> Neuronale Netze lernen und vergleichen Muster. Bedeutet man muss es
> trainieren, und kann nachher etwas aehnliches hinwerfen, das dann
> erkannt werden kann. Allerdings gibt es kein inkrementelles Lernen. Dh
> wenn die Buchstaben A-Y erkannt werden, kann man nicht Z hinzufuegen,
> sondern muss A-Z neu lernen lassen.

Inzwischen gibt es schon neuronale Netze, die andere neuronale Netze 
erstellen und trainieren.

Für mein Verständnis ist ein Problem neuronaler Netze, dass es, wenn was 
nicht so tut, wie es soll, schwierig wird, zu verstehen, warum und das 
zu beheben.

von Andreas R. (daybyter)


Lesenswert?

Ja,  man weiss halt nicht so genau, welche Regeln das System da 
eigentlich lernt. Deshalb find ich den Einsatz im militärischen oder 
auch Finanzbereich schon bischen bedenklich.

Andererseits gibt es im Moment wohl keine ernsthafte Alternative und ich 
befürchte, dass der 1. Rechner, welcher diese Menschen für unnützen 
Ballast hält, wohl auf einem NN basiert.  ;(

Aber man kann es sich aus Konkurrenzgründen halt nicht erlauben, einfach 
auf die Benutzung zu verzichten.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Auf meinem Handy ist 'ne Foto-App, die ein Kästchen um jedes Gesicht 
macht und das geschätzte Alter dazu schreibt. Zugegeben: Manchmal liegt 
die App mit dem Alter total daneben, aber Gesichter erkennt diese App 
zuverlässig. Ich hätte keine Idee, wie man sowas regelbasiert 
programmieren sollte.

Flaschensammler Troll schrieb:
> Das ist schon lange ein totes Pferd
Hast Du den Namen Geoffrey E. Hinton (siehe Ursprungspost) mal gehört? 
Und was meinst Du, wie Alice, Siri und "OK, Google" programmiert wurden? 
Stammt Dein "Flaschensammler-Wissen" aus der Zeit vor 2007?

Wer die Folge noch nicht kennt: cre.fm anno 2015 über Neuronale Netze:
https://cre.fm/cre208-neuronale-netze

deeplearn schrieb:
> Ich habe mir für den Einstieg eine NVIDIA 1050TI gekauft. Die … reicht
> für den Einsteig … mehr als aus.
Und wer später noch mehr Deep-Learning will, der nimmt ein Asrock
H110 Pro BTC+ mit PCIe-Extender/Riser: * scnr * ;)
http://cryptomining-blog.com/8904-trying-out-the-asrock-h110-pro-btc-with-13x-gtx-1070/

VG Torsten,
der mit seiner GTX750Ti noch nix auf die Reihe gebracht hat und gerade 
Trainings- und Test-Daten sammelt.

: Bearbeitet durch User
von uwe (Gast)


Lesenswert?

> Für mein Verständnis ist ein Problem neuronaler Netze, dass es, wenn was
> nicht so tut, wie es soll, schwierig wird, zu verstehen, warum und das
> zu beheben.

Jo, ist halt wie unser Gehirn aufgebaut, daß funktioniert gut aber 
verstehen tun wirs nicht... wenn es mal nicht gut funktioniert wird es 
schwer das zu beheben... da man es nicht versteht...

Irgendwann wird man virtuelle Neurotransmitter, Hormone usw. in diese 
Computergehirne einbauen und sie in eine Virtuelle Umgebung und Körper 
zum lernen setzen... und am Ende haben wir uns selber nachgebaut... und 
unser Universum
(nach seinem Ebenbild geschaffen)... verstehen tun wirs dann 
wahrscheinlich immer noch nicht.

PS: die entwickeln dann auch irgendwann...

von Andreas R. (daybyter)


Lesenswert?

Hallo!

Torsten C. schrieb:
> VG Torsten,
> der mit seiner GTX750Ti noch nix auf die Reihe gebracht hat und gerade
> Trainings- und Test-Daten sammelt.

In welche Richtung möchtest Du denn entwickeln? Ich interessiere mich 
für Trading usw.

von Rolf M. (rmagnus)


Lesenswert?

uwe schrieb:
>> Für mein Verständnis ist ein Problem neuronaler Netze, dass es, wenn was
>> nicht so tut, wie es soll, schwierig wird, zu verstehen, warum und das
>> zu beheben.
>
> Jo, ist halt wie unser Gehirn aufgebaut, daß funktioniert gut aber
> verstehen tun wirs nicht...

Das Gehirn haben wir allerdings auch nicht selbst gebaut, sondern müssen 
es erst aufwändig "reverse engineeren".

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Torsten C. schrieb:
> Auf meinem Handy ist 'ne Foto-App, die ein Kästchen um jedes
> Gesicht
> macht und das geschätzte Alter dazu schreibt.

erstaunlich, was so kleine Prozessoren zu leisten im Stande sind
Bildscan, Formenerkennung und parallele zusätzliche Mustererkennung

und das auf nem Smartphone-Prozessor "so nebenbei" ...

Mal von der ungefragten brachialen Verletzung der Persönlichkeitsrechte 
(Altersschätzung, Recht am eigenen Bild) ganz abgesehen, wofür braucht 
man ne App die einem sagt wie alt irgendjemand ist?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.