Die ursprüngliche Frage zu diesem Post war: Wie Keras und Tensorflow mit einer AMD-GPU zu laufen.
Die Antwort auf diese Frage lautet wie folgt:
1.) Keras wird funktionieren, wenn Sie richtig Tensorflow Arbeit machen kann (optional innerhalb der virtuellen/Conda Umgebung).
2.) Um Tensorflow auf einer AMD GPU arbeiten zu lassen, wie andere bereits gesagt haben, könnte Tensorflow zur Verwendung von OpenCl kompiliert werden. Um dies zu tun, lesen Sie den folgenden Link. Aber zur Kürze fasse ich die erforderlichen Schritte hier zusammen:
Sie benötigen AMDs proprietäre Treiber. Diese sind derzeit nur auf Ubuntu 14.04 verfügbar (die Version vor Ubuntu entschied sich dafür, die Darstellung der UI zu ändern). Die Unterstützung für Ubuntu 16.04 ist am Schreiben dieses Posts, der durch AMDProDrivers auf ein paar GPUs beschränkt ist. Leser, die auf AMD GPUs intensiv lernen wollen, sollten sich dessen bewusst sein!
Zum Kompilieren von Tensorflow mit OpenCl-Unterstützung müssen Sie außerdem die folgenden Voraussetzungen erwerben und installieren: OpenCl-Header, ComputeCpp.
Nachdem die Voraussetzungen erfüllt sind, konfigurieren Sie Ihren Build. Beachten Sie, dass es 3 Möglichkeiten gibt, Tensorflow zu kompilieren: Std Tensorflow (stabil), Benoits Steiner Tensorflow-opencl (Entwicklung) und Luke Iwanskis Tensorflow-opencl (hoch experimentell), die Sie aus GitHub ziehen können. Beachten Sie auch, dass die Frage, ob Sie Opencl verwenden möchten, fehlt, da Sie davon ausgehen, dass Sie sie verwenden. Umgekehrt bedeutet dies, dass Sie, wenn Sie vom Standard tensorflow aus konfigurieren, "Ja" auswählen müssen, wenn das configure-Skript Sie auffordert, opencl zu verwenden und "NO" für CUDA.
Dann Tests laufen in etwa so:
$ bazel Test --config = sycl -k --test_timeout 1600 - // tensorflow/... - // tensorflow/contrib/... - // tensorflow/java/... - // tensorflow /Compiler/...
Update: auf meinem Setup Doing dauert sehr lange auf meinem Setup. Der Teil, der lange dauert, läuft alle Tests. Ich bin mir nicht sicher, was das bedeutet, aber viele meiner Tests sind nach 1600 Sekunden abgelaufen. Die Dauer kann wahrscheinlich auf Kosten von mehr Testzeiten verkürzt werden. Alternativ können Sie den Tensorfluss auch ohne Tests erstellen. Zum Zeitpunkt dieses Schreibens hat das Ausführen der Tests bereits 2 Tage gedauert.
Oder baut nur das Pip-Paket wie so:
bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package
Bitte tatsächlich die Blog-Post über bei Codeplay lesen: Lukas Iwansky veröffentlichte eine umfassende Tutorial Post auf, wie Tensorflow bekommt mit OpenCL arbeitet gerade am 30. März 2017. Das ist also ein sehr neuer Beitrag. Es gibt auch einige Details, über die ich hier nicht geschrieben habe.
Wie in den vielen Posts oben angedeutet, sind kleine Informationen in den Interwebs verteilt. Was Lukas in Bezug auf den Wert hinzufügt, ist die Tatsache, dass alle Informationen an einem Ort zusammengefügt wurden, was die Einrichtung von Tensforflow und OpenCl etwas weniger beängstigend machen sollte. Ich stelle nur einen Link hier:
https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
Eine etwas umfassenderes Freilos hier gepostet wurde:
http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/
Es unterscheidet sich vor allem durch den Benutzer explizit zu sagen, dass er/sie Bedürfnisse:
- erstellen Symlinks in einen Unterordner
- und installieren Sie dann Tensorflow über den Befehl "python setup.py develop".
Hinweis ein alternativer Ansatz oben mit tensorflow-cl erwähnt wurde:
https://github.com/hughperkins/tensorflow-cl
zu diesem Zeitpunkt bin ich nicht in der Lage, zu erkennen, welcher Ansatz besser ist, wenn es, dass dieser Ansatz scheint weniger aktiv ist. Es werden weniger Probleme gemeldet und es finden weniger Konversationen statt, um diese Probleme zu lösen. Im vergangenen Jahr gab es einen großen Schub. Zusätzliche Pushs sind seit November 2016 ausgebrochen, obwohl Hugh vor ein paar Tagen einige Updates vor dem Schreiben dieses Posts gepusht zu haben scheint. (Update: Wenn Sie etwas von der Dokumentation Readme, diese Version von Tensorflowo jetzt nur auf Community-Unterstützung verlässt, wie der Hauptentwickler mit dem Leben beschäftigt ist.)
UPDATE (2017-04-25): Ich habe ein paar Notizen basiert auf Tests Tensorflow-opencl unten.
Der zukünftige Benutzer dieses Pakets sollte beachten, dass die Verwendung von opencl bedeutet, dass das gesamte Heavy-Lift in Bezug auf die Computer auf die GPU verschoben wird. Ich erwähne das, weil ich persönlich dachte, dass die Rechenlast zwischen meiner CPU und iGPU aufgeteilt würde. Dies bedeutet, dass die Leistung Ihrer GPU sehr wichtig ist (insbesondere Bandbreite und verfügbarer VRAM).
Im Folgenden sind einige Zahlen zur Berechnung von 1 Epoche unter Verwendung des CIFAR10-Datensatzes für MEIN SETUP (A10-7850 mit iGPU) aufgeführt. Ihre Laufleistung wird mit ziemlicher Sicherheit variieren!
- Tensorflow (via pip install): ~ 1700 s/Epoche
- Tensorflow (w/SSE + AVX): ~ 1100 s/Epoche
- Tensorflow (w/OpenCL & iGPU): ~ 5800 s/Epoche
Sie können sehen, dass in diesem speziellen Fall die Leistung schlechter ist. Ich schreibe dies den folgenden Faktoren zu:
- Die iGPU hat nur 1 GB. Dies führt zu viel Hin und Her zwischen CPU und GPU. (Opencl 1.2 hat nicht die Fähigkeit, Daten über Zeiger zu übertragen, sondern Daten müssen hin und her kopiert werden.)
- Die iGPU hat nur 512 Stream-Prozessoren (und 32 Gb/s Speicherbandbreite), die in diesem Fall langsamer ist als 4 CPUs mit SSE4 + AVX-Befehlssätzen.
- Die Entwicklung von Tensorflow-Opencl ist in den Anfängen, und viele Optimierungen in SYCL usw. wurden noch nicht durchgeführt.
Wenn Sie eine AMD GPU mit mehr VRAM und mehr Stream-Prozessoren verwenden, werden Sie sicher viel bessere Performance-Zahlen bekommen. Ich würde gerne lesen, welche Zahlen die Leute erreichen, um zu wissen, was möglich ist.
Ich werde weiterhin diese Antwort beibehalten, wenn/wann Updates gepusht werden.
3.) Gegenwärtig wird ein alternativer Weg angeklickt, der die RocM-Initiative von AMD und die Bibliothek miOpen (cuDNN equivalent) verwendet. Dies sind/werden Open-Source-Bibliotheken sein, die tiefes Lernen ermöglichen. Der Vorbehalt ist, dass RocM Support derzeit nur für Linux existiert, und dass miOpen noch nicht veröffentlicht wurde, aber Raja (AMD GPU Kopf) hat in einem AMA gesagt, dass mit dem oben genannten, sollte es möglich sein, tief zu lernen AMD GPUs. Support ist nicht nur für Tensorflow, sondern auch für Cafe2, Cafe, Torch7 und MxNet geplant.
Ich glaube, das neue [Theano Backend] (http://deeplearning.net/software/theano/tutorial/using_gpu.html) wird OpenCL sowie NVIDIA-Karten unterstützen. Was Tensorflow betrifft, gibt es ein [offenes Problem] (https://github.com/tensorflow/tensorflow/issues/22) für OpenCL-Unterstützung; sieht nicht aus wie viel Fortschritt gemacht wurde. – gobrewers14
Es gibt keine Unterstützung für AMD-GPUs in TensorFlow oder den meisten anderen neuronalen Netzwerkpaketen. Der Grund dafür ist, dass NVidia in die schnelle freie Implementierung von neuronalen Netzwerkblöcken (CuDNN) investiert hat, auf die alle schnellen Implementierungen von GPU-Neuralnetzwerken angewiesen sind (Torch/Theano/TF), während AMD diesen Markt nicht zu interessieren scheint. –
Kürzlich kündigte Google an, dass sie AMD-GPUs für ihre Rechenzentren kaufen würden, vermutlich auch für Anwendungen zum maschinellen Lernen. Solch ein Schritt macht keinen Sinn, wenn es keine Roadmap gibt, um GPU generischer zu unterstützen. – Thornhale