"New Neural" ist ein Open-Source-Projekt für neuronale Netzwerke für die MetaTrader 5-Plattform. - Seite 58

 
TheXpert:
???
Andrei TheXpert, wenn Sie A sagen, sagen Sie B. Was ist Ihrer Meinung nach der größte Engpass der NS?
 
Urain:
Das spielt keine Rolle.
 
TheXpert:
Es spielt keine Rolle.

Ich möchte mich weiterentwickeln, verschiedene Meinungen hören und Schlussfolgerungen ziehen.

Ich möchte mich weiterentwickeln, ich möchte verschiedene Meinungen und Schlussfolgerungen hören.

 

GPU Cuda ist eine mächtige Sache. Ich hatte Code, der 2-3 Stunden lang auf 16 Intel Tracks (4-Core CPU) lief. Und mit 300+ CUDA Kernen lief die gleiche Strecke in 10 Minuten, was beeindruckend war. Aber die Entwicklung des Kuda-Codes war sehr kompliziert: Man musste alle Berechnungen im Code manuell in parallele Threads aufteilen und den Speicher optimieren (leider haben die Kuda-Kerne wenig Speicher). Es lag nicht in meiner Macht - ein kluger Programmierer half mir. Ich habe immer noch Angst vor seinem Code und nehme alle Änderungen an meinem ursprünglichen (nicht parallelisierten) Code vor. Ich habe eine Meinung entwickelt: Wenn der Algorithmus stabil ist, kann er mit Hilfe eines kompetenten Programmierers optimiert und auf die GPU übertragen werden - Autodidakten wie ich können das nicht. Wenn Sie sofort mit GPU-Code für einen gut trainierten Algorithmus beginnen, wird es lange dauern, ihn zu umgehen. Ich beginne immer mit einfachem, aber nicht optimalem Code, den ich selbst verstehen kann, und erst wenn ich die erwarteten Ergebnisse erhalte, beginne ich, ihn zu optimieren. Ich bin ein Chaot, kein Programmierer :)

 
gpwr:

GPU Cuda ist eine mächtige Sache. Ich hatte Code, der 2-3 Stunden lang auf 16 Intel Tracks (4-Core CPU) lief. Und mit 300+ CUDA Kernen lief die gleiche Strecke in 10 Minuten, was beeindruckend war. Aber die Entwicklung des Kuda-Codes war sehr kompliziert: Man musste alle Berechnungen im Code manuell in parallele Threads aufteilen und den Speicher optimieren (leider haben die Kuda-Kerne wenig Speicher). Es lag nicht in meiner Macht - ein kluger Programmierer half mir. Ich habe immer noch Angst vor seinem Code und nehme weiterhin alle Änderungen an meinem ursprünglichen (nicht parallelisierten) Code vor. Ich habe eine Meinung entwickelt: Wenn der Algorithmus stabil ist, kann er mit Hilfe eines kompetenten Programmierers optimiert und auf die GPU übertragen werden - Autodidakten wie ich können das nicht. Wenn Sie sofort mit einem GPU-Code für einen gut trainierten Algorithmus beginnen, wird es lange dauern, ihn zu umgehen. Ich beginne immer mit einfachem, aber nicht optimalem Code, den ich selbst verstehen kann, und erst wenn ich die erwarteten Ergebnisse erhalte, beginne ich, ihn zu optimieren. Ich bin ein Chaot, kein Programmierer :)

Deshalb wünschen wir uns den Rat eines Spezialisten auf dem Gebiet des GPU-Computings. yu-sha und JavaDev, ay!

Ich interessiere mich für die folgenden Fragen:

1. Welche Aspekte sollten als erstes untersucht werden, wenn ein Projekt (oder seine einzelnen Module) auf der GPU berechnet wird, um ein mühsames Redesign in der Zukunft zu vermeiden?

2. Was sind die Speichergrenzen für GPU-Kerne? Ist es möglich, den gesamten Laufzeitcode im Speicher unterzubringen (Zehn- und Hunderttausende von Takten)?

Soweit solche, allgemeine Fragen. Ausführlichere werden wohl später folgen.

 
joo:

Wir bitten daher um den Rat eines Experten für GPU-Computing. yu-sha und JavaDev, au!

Sie interessieren sich für die folgenden Fragen:

1. Welche Aspekte sollten bei der Erstellung eines Projekts (oder seiner einzelnen Module) auf der GPU in erster Linie beachtet werden, um spätere lästige Umgestaltungen zu vermeiden?

2. Was sind die Speichergrenzen für GPU-Kerne? Ist es möglich, den gesamten Laufzeitcode im Speicher unterzubringen (Zehn- und Hunderttausende von Takten)?

Soweit solche, allgemeine Fragen. Ausführlichere werden wohl später folgen.

Warum sollte man sich bei einem Projekt, das für den allgemeinen Gebrauch bestimmt ist, überhaupt mit einem Cuda beschäftigen? Einige Benutzer haben einen Cuda, andere haben einen anderen, und wieder andere haben überhaupt keinen Cuda. Ich habe zum Beispiel kein Cuda auf meinem Arbeitslaptop. Derselbe Netzwerkcode wird je nach Anzahl der Cuda-Kerne und des Speichers sehr unterschiedlich sein. Besser wäre es, diese Netzwerk-Engine zunächst für normale Intel-Prozessoren zu schreiben, damit sie jeder nutzen kann, und sie dann für Kuda zu optimieren, wenn das sinnvoll ist. Übrigens ist es besser, den Motor so zu gestalten, dass er in der Cloud funktioniert. Ich bin mit Cloud Computing nicht vertraut. Ist da überhaupt etwas drin?
 
gpwr:
Warum sollte man sich bei einem Projekt, das für den allgemeinen Gebrauch bestimmt ist, überhaupt die Mühe machen, einen Cuda zu verwenden? Einige Benutzer haben einen Cuda, andere haben einen anderen, und wieder andere haben überhaupt keinen Cuda. Ich habe zum Beispiel kein Cuda auf meinem Laptop bei der Arbeit. Derselbe Netzwerkcode wird je nach Anzahl der Cuda-Kerne und des Speichers sehr unterschiedlich sein. Besser wäre es, diese Netzwerk-Engine zunächst für normale Intel-Prozessoren zu schreiben, damit sie jeder nutzen kann, und sie dann für Kuda zu optimieren, wenn das sinnvoll ist. Übrigens ist es besser, den Motor so zu gestalten, dass er in der Cloud funktioniert. Ich bin mit Cloud Computing nicht vertraut. Ist da überhaupt etwas drin?
Ich stimme zu, dass Sie zunächst ein Projekt ohne CUDA erstellen müssen. Aber ich habe eine Anmerkung zu dem Beitrag - Sie sollten ihn nicht nur für Intel schärfen, sondern auch AMD nicht vergessen.
 
gpwr:
Warum sollte man sich bei einem Projekt, das für den allgemeinen Gebrauch bestimmt ist, überhaupt die Mühe machen, einen Cuda zu verwenden? Einige Benutzer haben einen Cuda, andere haben einen anderen, und wieder andere haben überhaupt keinen Cuda. Ich habe zum Beispiel kein Cuda auf meinem Laptop bei der Arbeit. Derselbe Netzwerkcode wird je nach Anzahl der Cuda-Kerne und des Speichers sehr unterschiedlich sein. Besser wäre es, diese Netzwerk-Engine zunächst für normale Intel-Prozessoren zu schreiben, damit jeder sie nutzen kann, und sie dann für Kuda zu optimieren, wenn es Sinn macht. Übrigens ist es besser, den Motor so zu gestalten, dass er in der Cloud funktioniert. Ich bin mit Cloud Computing nicht vertraut. Gibt es das überhaupt?

MQ hat Unterstützung für OpenCL in MQL5 versprochen, nicht für CUDA (nur Grafikkarten von nVidia). OpenCL kann auf jeder Hardware mit Multicore-Prozessoren ausgeführt werden, also sowohl auf CPUs als auch auf GPUs (AMD, nVidia und Intel). Ein Projekt, das Berechnungen sowohl auf der CPU als auch auf der GPU unterstützt, ist also für alle geeignet.

Da MQL5 OpenCL unterstützen wird, bedeutet dies, dass Cloud-Agenten GPU-Computing unterstützen werden.

 

Urain:

Man kann nicht immer Recht haben, dafür ist das Open-Source-Projekt ja da, um zu argumentieren und zu beweisen.

Brauche ich das?
 
joo:

Wir bitten daher um den Rat eines Experten für GPU-Computing. yu-sha und JavaDev, ow!

Sie interessieren sich für die folgenden Fragen:

1. Welche Aspekte sollten bei der Erstellung eines Projekts (oder seiner einzelnen Module) auf der GPU in erster Linie beachtet werden, um spätere lästige Umgestaltungen zu vermeiden?

2. Was sind die Speichergrenzen für GPU-Kerne? Ist es prinzipiell möglich, den gesamten ausführbaren Code auf einen separaten Historienlauf im Speicher zu legen (zehn- und hunderttausende von Takten)?

So weit die allgemeinen Fragen. Detailliertere Angaben werden wohl später hinzugefügt werden.

Die wichtigsten Punkte sind:

1) GPUs werden nur für die Ausbildung benötigt

2) Eine erhebliche Leistungssteigerung wird durch die parallele Berechnung von Neuronenwerten in einer Schicht und - was noch wichtiger ist - durch den gleichzeitigen Betrieb von Hunderten von Netzen erreicht.

Maximale Aufteilung des Projekts in autonome Komponenten - worauf ist zu achten?

Der DDR-Speicher der GPU ist mehr als ausreichend, um den Verlauf von Hunderttausenden von Balken zu speichern.

Der Kernspeicher ist stark begrenzt (30-50 KByte). Auch dieses Problem lässt sich durch einfache Programmierung lösen - es lohnt sich, denn der Chipspeicher läuft mit Kernfrequenz und der Zugriff darauf kostet 0 Taktzyklen. Es gibt auch Kernel-Speicherbankkonflikte, die sie ebenfalls umgehen können.

Es gibt eine unangenehme Eigenschaft von Windows - die Treiber werden zurückgesetzt, wenn ein Lauf länger als 5 Sekunden dauert.

Wir können also maximal 100-200 Netzwerke mit ~100 Neuronen für 100k Takte trainieren.

Mit dieser (maximalen) Konfiguration erreichen wir eine Optimierungsgeschwindigkeit von ca. 20-30 Läufen pro Sekunde auf der GTX 460 GPU