Main Content

Trainieren von flachen Netzen mit Prozessoren und Grafikkarten

Parallel Computing Toolbox

Tipp

Dieser Abschnitt enthält eine Beschreibung flacher Netze. Informationen zu Deep Learning finden Sie dagegen unter Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.

Für das Training und die Simulation neuronaler Netze sind zahlreiche parallele Berechnungen erforderlich. Mehrkernprozessoren (CPUs), Grafikkarten ( GPUs) und Computercluster mit mehreren Prozessoren und Grafikkarten sind in der Lage, die Vorteile der parallelen Berechnungen zu nutzen.

Wenn die Deep Learning Toolbox™ und die Parallel Computing Toolbox™ kombiniert werden, können mehrere Prozessorkerne und Grafikkarten eines einzigen Computers das Training und die Simulation großer Probleme beschleunigen.

Im Folgenden wird eine Sitzung für Single-Thread-Standardtraining und -Simulation beschrieben. (Zwar werden die Vorteile der Parallelität bei großen Problemen am deutlichsten, doch in diesem Beispiel wird ein kleiner Datensatz verwendet, der bereits in der Deep Learning Toolbox enthalten ist.)

[x, t] = bodyfat_dataset;
net1 = feedforwardnet(10);
net2 = train(net1, x, t);
y = net2(x);

Worker für parallele Prozessoren

Intel®-Prozessoren werden mit bis zu acht Kernen geliefert. Workstations mit zwei Prozessoren können also mit bis zu 16 Kernen ausgestattet sein und in Zukunft könnten es sogar noch mehr werden. Die parallele Nutzung mehrerer Prozessorkerne kann Berechnungen erheblich beschleunigen.

Starten Sie den aktuellen parallelen Pool oder rufen Sie ihn ab und sehen Sie sich die Anzahl der Worker im Pool an.

pool = gcp;
pool.NumWorkers

Wenn Sie keine Lizenz für die Parallel Computing Toolbox besitzen, wird ein Fehler angezeigt.

Wenn ein paralleler Pool geöffnet ist, legen Sie für die Funktion train die Option 'useParallel' auf 'yes' fest, um anzugeben, dass Training und Simulation für den gesamten Pool ausgeführt werden sollen.

net2 = train(net1,x,t,'useParallel','yes');
y = net2(x,'useParallel','yes');

Berechnung mit der Grafikkarte

Grafikkarten können auf einer einzelnen Karte mit tausenden Kernen ausgestattet sein und sind bei parallelen Algorithmen wie neuronalen Netzen äußerst effizient.

Mithilfe von gpuDeviceCount können sie überprüfen, ob eine unterstützte Grafikkarte in Ihrem System verfügbar ist. Verwenden Sie die Funktion gpuDevice, um Informationen zur aktuell ausgewählten Grafikkarte zu überprüfen, oder wählen Sie eine andere Grafikkarte aus.

gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available

Wenn Sie keine Lizenz für die Parallel Computing Toolbox besitzen, wird der Fehler „Undefined function or variable“ (Nicht definierte Funktion oder Variable) angezeigt.

Wenn Sie die Grafikkarte ausgewählt haben, legen Sie für die Funktion train oder sim die Option 'useGPU' auf 'yes' fest, um das Training oder die Simulation mit dieser Grafikkarte auszuführen.

net2 = train(net1,x,t,'useGPU','yes');
y = net2(x,'useGPU','yes');

Berechnung mit mehreren Grafikkarten/Prozessoren

Sie können mehrere Grafikkarten verwenden, um ein höheres Maß an Parallelität zu erzielen.

Nach dem Öffnen eines parallelen Pools legen Sie sowohl 'useParallel' als auch 'useGPU' auf 'yes' fest, um alle Grafikkarten und Prozessorkerne auf einem einzelnen Computer zu nutzen. Jeder Worker, der einer eindeutigen Grafikkarte zugeordnet ist, verwendet diese Grafikkarte. Der übrige Teil der Worker führt Berechnungen auf deren Prozessorkern aus.

net2 = train(net1,x,t,'useParallel','yes','useGPU','yes');
y = net2(x,'useParallel','yes','useGPU','yes');

Bei einigen Problemen lässt sich durch den gemeinsamen Einsatz von Grafikkarten und Prozessoren die höchste Rechengeschwindigkeit erzielen. Bei anderen Problemen können die Prozessoren möglicherweise nicht mit den Grafikkarten mithalten, sodass die ausschließliche Verwendung von Grafikkarten die bessere Geschwindigkeit bietet. Legen Sie 'useGPU' auf 'only' fest, um die parallele Berechnung auf Worker mit eindeutigen Grafikkarten zu begrenzen.

net2 = train(net1,x,t,'useParallel','yes','useGPU','only');
y = net2(x,'useParallel','yes','useGPU','only');

Clusterberechnung mit MATLAB Parallel Server

MATLAB® Parallel Server™ ermöglicht Ihnen die Nutzung aller Prozessoren und Grafikkarten in einem Netzwerkcluster von Computern. Um einen Cluster zu nutzen, öffnen Sie einen parallelen Pool mit einem Clusterprofil. Verwenden Sie auf der Registerkarte MATLAB Home im Bereich Environment (Umgebung) das Menü Parallel, um Profile zu verwalten und auszuwählen.

Nach dem Öffnen eines parallelen Pools trainieren Sie das Netz durch Aufrufen der Funktion train mit den Optionen 'useParallel' und 'useGPU'.

net2 = train(net1,x,t,'useParallel','yes');
y = net2(x,'useParallel','yes');

net2 = train(net1,x,t,'useParallel','yes','useGPU','only');
y = net2(x,'useParallel','yes','useGPU','only');

Lastverteilung, große Probleme und mehr

Weitere Informationen zur parallelen Berechnung mit der Deep Learning Toolbox finden Sie im Abschnitt Shallow Neural Networks with Parallel and GPU Computing, wo auch andere Themen vorgestellt werden, z. B. die manuelle Verteilung von Datensätzen auf Prozessor- und Grafikkarten-Worker, um die Unterschiede hinsichtlich Systemgeschwindigkeit und Speicher optimal zu nutzen.

Durch die manuelle Verteilung der Daten können die Worker-Daten auch nacheinander geladen werden, sodass die Größe der Datensätze nur durch den gesamten Arbeitsspeicher eines Clusters und nicht durch den Arbeitsspeicher eines einzelnen Computers begrenzt wird. Dadurch können Sie neuronale Netze auch für sehr große Probleme einsetzen.