Die ursprüngliche Frage in diesem Beitrag lautete: Wie können Keras und Tensorflow mit einer AMD-GPU ausgeführt werden?
Die Antwort auf diese Frage lautet wie folgt:
1.) Keras funktioniert, wenn Sie dafür sorgen können, dass Tensorflow ordnungsgemäß funktioniert (optional in Ihrer virtuellen / Conda-Umgebung).
2.) Damit Tensorflow auf einer AMD-GPU funktioniert, wie andere angegeben haben, besteht eine Möglichkeit darin, Tensorflow für die Verwendung von OpenCl zu kompilieren. Lesen Sie dazu den unten stehenden Link. Der Kürze halber fasse ich hier die erforderlichen Schritte zusammen:
Sie benötigen AMDs proprietäre Treiber. Diese sind derzeit nur unter Ubuntu 14.04 verfügbar (die Version vor Ubuntu hat beschlossen, die Darstellung der Benutzeroberfläche zu ändern). Die Unterstützung für Ubuntu 16.04 ist beim Schreiben dieses Beitrags auf einige GPUs über AMDProDrivers beschränkt. Leser, die tiefes Lernen auf AMD-GPUs betreiben möchten, sollten sich dessen bewusst sein!
Zum Kompilieren von Tensorflow mit OpenCl-Unterstützung müssen Sie außerdem die folgenden Voraussetzungen erfüllen und installieren: OpenCl-Header, ComputeCpp.
Nachdem die Voraussetzungen erfüllt sind, konfigurieren Sie Ihren Build. Beachten Sie, dass es drei Optionen zum Kompilieren von Tensorflow gibt: Std Tensorflow (stabil), Benoits Steiners Tensorflow-opencl (entwicklungsbezogen) und Luke Iwanskis Tensorflow-opencl (sehr experimentell), die Sie aus Github ziehen können. Beachten Sie auch, dass bei der Entscheidung, aus einer der opencl-Versionen zu erstellen, die Frage zur Verwendung von opencl fehlt, da davon ausgegangen wird, dass Sie es verwenden. Umgekehrt bedeutet dies, dass Sie bei der Konfiguration über den Standard-Tensorflow "Ja" auswählen müssen, wenn das Konfigurationsskript Sie auffordert, opencl und "NO" für CUDA zu verwenden.
Führen Sie dann folgende Tests durch:
$ bazel test --config = sycl -k --test_timeout 1600 - // Tensorflow / ... - // Tensorflow / Contrib / ... - // Tensorflow / Java / ... - // Tensorflow / Compiler / ...
Update: Dies in meinem Setup zu tun, dauert in meinem Setup außerordentlich lange. Der Teil, der lange dauert, sind alle laufenden Tests. Ich bin mir nicht sicher, was dies bedeutet, aber viele meiner Tests laufen nach 1600 Sekunden ab. Die Dauer kann wahrscheinlich auf Kosten weiterer Test-Timeouts verkürzt werden. Alternativ können Sie den Tensorfluss auch ohne Tests aufbauen. Zum Zeitpunkt dieses Schreibens hat das Ausführen der Tests bereits 2 Tage gedauert.
Oder bauen Sie das Pip-Paket einfach so:
bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package
Bitte lesen Sie den Blog-Beitrag bei Codeplay: Lukas Iwansky hat erst am 30. März 2017 einen umfassenden Tutorial-Beitrag darüber veröffentlicht, wie Tensorflow mit OpenCl funktioniert. Dies ist also ein sehr aktueller Beitrag. Es gibt auch einige Details, über die ich hier nicht geschrieben habe.
Wie in den vielen obigen Beiträgen angegeben, sind kleine Informationen über die Interwebs verteilt. Was Lukas 'Beitrag in Bezug auf den Wert hinzufügt, ist, dass alle Informationen an einem Ort zusammengefasst wurden, was die Einrichtung von Tensforflow und OpenCl etwas weniger entmutigend machen sollte. Ich werde hier nur einen Link bereitstellen:
https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
Eine etwas vollständigere Anleitung wurde hier veröffentlicht:
http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/
Es unterscheidet sich hauptsächlich dadurch, dass dem Benutzer ausdrücklich mitgeteilt wird, dass er:
- Erstellen Sie Symlinks zu einem Unterordner
- und installieren Sie dann Tensorflow über den Befehl "python setup.py Develop".
Beachten Sie, dass oben ein alternativer Ansatz unter Verwendung von Tensorflow-cl erwähnt wurde:
https://github.com/hughperkins/tensorflow-cl
Ich kann derzeit nicht erkennen, welcher Ansatz besser ist, obwohl dieser Ansatz anscheinend weniger aktiv ist. Es werden weniger Probleme veröffentlicht und es finden weniger Konversationen zur Behebung dieser Probleme statt. Letztes Jahr gab es einen großen Schub. Seit November 2016 sind weitere Pushs abgeklungen, obwohl Hugh anscheinend vor einigen Tagen einige Updates zum Zeitpunkt des Schreibens dieses Beitrags veröffentlicht hat. (Update: Wenn Sie einen Teil der Dokumentations-Readme lesen, ist diese Version von Tensorflowo nur noch auf Community-Unterstützung angewiesen, da der Hauptentwickler mit dem Leben beschäftigt ist.)
UPDATE (25.04.2017): Ich habe einige Anmerkungen zum Testen von tensorflow-opencl unten.
- Der zukünftige Benutzer dieses Pakets sollte beachten, dass die Verwendung von opencl bedeutet, dass der gesamte Rechenaufwand auf die GPU verlagert wird. Ich erwähne dies, weil ich persönlich dachte, dass die Rechenarbeitslast zwischen meiner CPU und der iGPU aufgeteilt werden würde. Dies bedeutet, dass die Leistung Ihrer GPU sehr wichtig ist (insbesondere Bandbreite und verfügbarer VRAM).
Im Folgenden finden Sie einige Zahlen zur Berechnung einer Epoche unter Verwendung des CIFAR10-Datensatzes für MY SETUP (A10-7850 mit iGPU). Ihr Kilometerstand wird mit ziemlicher Sicherheit variieren!
- Tensorflow (über Pip-Installation): ~ 1700 s / Epoche
- Tensorflow (mit SSE + AVX): ~ 1100 s / Epoche
- Tensorflow (mit opencl & iGPU): ~ 5800 s / Epoche
Sie können sehen, dass in diesem speziellen Fall die Leistung schlechter ist. Ich schreibe dies folgenden Faktoren zu:
- Die iGPU hat nur 1 GB. Dies führt zu viel Hin- und Herkopieren zwischen CPU und GPU. (Opencl 1.2 kann noch keine Daten über Zeiger übertragen. Stattdessen müssen Daten hin und her kopiert werden.)
- Die iGPU verfügt nur über 512 Stream-Prozessoren (und eine Speicherbandbreite von 32 Gbit / s), die in diesem Fall mit SSE4 + AVX-Befehlssätzen langsamer als 4 CPUs sind.
- Die Entwicklung von Tensorflow-Opencl befindet sich 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, erhalten Sie mit Sicherheit viel bessere Leistungszahlen. Mich würde interessieren, welche Zahlen die Leute erreichen, um zu wissen, was möglich ist.
Ich werde diese Antwort weiterhin beibehalten, wenn Updates veröffentlicht werden.
3.) Derzeit wird ein alternativer Weg angedeutet, der die RocM-Initiative von AMD und die miOpen-Bibliothek (cuDNN-Äquivalent) verwendet. Dies sind / werden Open-Source-Bibliotheken sein, die tiefes Lernen ermöglichen. Die Einschränkung ist, dass die RocM-Unterstützung derzeit nur für Linux existiert und dass miOpen noch nicht veröffentlicht wurde, aber Raja (AMD-GPU-Leiter) hat in einer AMA gesagt, dass es möglich sein sollte, mit den oben genannten Informationen tiefes Lernen durchzuführen AMD-GPUs. Tatsächlich ist Support nicht nur für Tensorflow geplant, sondern auch für Cafe2, Cafe, Torch7 und MxNet.