2017-07-09 4 views
4

Der Master-Zweig encog-core-java verfügt nicht mehr über eine Encog.getInstance().getCL()-Methode oder expliziten Zugriff auf die OpenCL-Geräte (vgl. LeadTune's encog-java example: BenchmarkCL basierend auf Encog 2).OpenCL-Backend in Java Encog 3

Stattdessen werden wir auf die ConcurrentTrainingManager verwiesen, die magisch GPUs zusammen mit den CPUs erkennt, obwohl die Implementierung davon sehr unklar ist.

Die einzige andere Erwähnung von OpenCL im Quellcode ist in ResilientPropagation, wo das OpenCL-Geräteobjekt als ein optionaler Konstruktorparameter beansprucht wird, aber es ist nicht.

Weiß jemand, ob die OpenCL-Unterstützung einfach aus Encog entfernt wurde, ohne die JavaDocs zu aktualisieren? Besser noch, könnte jemand bitte ein funktionierendes Beispiel für OpenCL-gestütztes maschinelles Lernen auf Encog 3.x bereitstellen?

My attempt ein TrainingJob zum ConcurrentTrainingManager gescheitert einreichen, weil ich nicht verstehen konnte, wie StrategyRPROPJob für meine eine Ausbildung zu setzen.

+2

Ich werde einfach sagen (nur weil jeff dl4j erwähnt): Wir werden nicht OpenCL unterstützen entweder. Wir haben das Fachwissen, um gpus zu machen. Was wir * nicht * haben, sind die Anreize. AMD hat noch viel mehr zu tun, um dies für jeden zu tun. Sie haben in letzter Zeit einen Schritt dazu gemacht, aber es ist immer noch keine Tonne. –

+2

@AdamGibson, ich glaube nicht, dass dies ein AMD-Problem ist. Dies ist ein Open-Source-Problem. Obwohl es stimmt, dass nVidia derzeit den GPU-Markt kontrolliert, ist ihre CUDA kein Open-Source-Standard. OpenCL ist. So wird HiP, der geplante Nachfolger von OpenCL, dessen Syntax unverkennbar CUDA-artig ist. – Inon

+1

@AdamGibson Ich stimme Inon hier zu: OpenCL ist ein ** offener ** Standard und kann mit AMD GPUs und CPUs (!), Aber auch mit Intel CPUs und NVIDIA GPUs verwendet werden - auch mit Android-Geräten. Es ist eher so, dass NVIDIA keinen Anreiz hat, ihre OpenCL-Unterstützung zu verbessern: Sie sind mit ihrem Fast-Monopol von CUDA vertraut. Außerdem sind die APIs für gängige Aufgaben so auffallend ähnlich, dass der Hauptunterschied zwischen OpenCL und CUDA darin besteht, dass die erste offen und die zweite proprietär ist - es geht nicht so sehr um * technische * Unterschiede. – Marco13

Antwort

3

Als Antwort auf meine entsprechenden GH issue, schrieb Jeff Heaton:

OpenCL wird derzeit nicht von Encog unterstützt. GPU-Programmierung ist nicht etwas, an dem ich gerade arbeite. Wenn jemand etwas in diesem Bereich beitragen möchte, wäre das großartig. Aber in TensorFlow und Deeplearning4J gibt es bereits eine Menge neuronaler GPU-Arbeiten, ich werde nicht versuchen, das selbst zu kopieren. Außerdem liegt die GPU-Programmierung außerhalb meines Spezialgebiets.

Als Alternative empfehle ich Ivan Vasilev des Neural Networks, die ich mit OpenCL vergewissert haben, 2.

+0

FYI: Um einige Verwirrung hoffentlich zu beseitigen, habe ich die Encog GPU-Seite aktualisiert, um die neueste Version von Encogs Nicht-Unterstützung von GPU widerzuspiegeln. http://www.heatonresearch.com/encog/encog_gpu.html – JeffHeaton