Ich fange an, Keras zu lernen, von dem ich glaube, dass es eine Schicht über Tensorflow und Theano ist. Ich habe jedoch nur Zugriff auf AMD-GPUs wie den AMD R9 280X.
Wie kann ich meine Python-Umgebung so einrichten, dass ich meine AMD-GPUs über die Keras / Tensorflow-Unterstützung für OpenCL nutzen kann?
Ich laufe unter OSX.
python
python-2.7
opencl
tensorflow
keras
Nyxynyx
quelle
quelle
Antworten:
Ich schreibe ein OpenCL 1.2-Backend für Tensorflow unter https://github.com/hughperkins/tensorflow-cl
Diese Tensorflussgabel für OpenCL weist die folgenden Eigenschaften auf:
Dies ist nicht die einzige verfügbare OpenCL-Gabel von Tensorflow. Es gibt auch eine Gabel, die von Codeplay https://www.codeplay.com unter Verwendung von Computecpp, https://www.codeplay.com/products/computesuite/computecpp entwickelt wird. Ihre Gabel hat für mich höhere Anforderungen als meine eigene wissen, auf welchen spezifischen GPU-Geräten es funktioniert. Sie müssen die Platform Support Notes (unten auf der Seite "computecpp") überprüfen, um festzustellen, ob Ihr Gerät unterstützt wird. Die Codeplay-Gabel ist eigentlich eine offizielle Google-Gabel, die sich hier befindet: https://github.com/benoitsteiner/tensorflow-opencl
quelle
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:
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.
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!
Sie können sehen, dass in diesem speziellen Fall die Leistung schlechter ist. Ich schreibe dies folgenden Faktoren zu:
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.
quelle
Man kann AMD GPU über das PlaidML Keras Backend verwenden.
Am schnellsten : PlaidML ist häufig 10-mal schneller (oder mehr) als gängige Plattformen (wie TensorFlow-CPU), da es alle GPUs unterstützt, unabhängig von Marke und Modell. PlaidML beschleunigt das Deep Learning auf AMD-, Intel-, NVIDIA-, ARM- und eingebetteten GPUs.
Am einfachsten : PlaidML ist einfach zu installieren und unterstützt mehrere Frontends (Keras und ONNX derzeit).
Kostenlos : PlaidML ist vollständig Open Source und basiert nicht auf Herstellerbibliotheken mit proprietären und restriktiven Lizenzen.
Für die meisten Plattformen ist der Einstieg in das beschleunigte Deep Learning so einfach wie das Ausführen einiger Befehle (vorausgesetzt, Sie haben Python (v2 oder v3) installiert):
Wählen Sie den Beschleuniger aus, den Sie verwenden möchten (viele Computer, insbesondere Laptops, verfügen über mehrere):
Versuchen Sie als Nächstes, die Inferenzleistung von MobileNet zu vergleichen:
Oder trainieren Sie MobileNet:
plaidbench --batch-size 16 keras --train mobilenet
Um es mit Keras Set zu benutzen
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
Für mehr Informationen
https://github.com/plaidml/plaidml
https://github.com/rstudio/keras/issues/205#issuecomment-348336284
quelle
import plaidml.keras
plaidml.keras.import_backend()
from keras import backend as K
Dies ist eine alte Frage, aber seit ich die letzten Wochen damit verbracht habe, es selbst herauszufinden:
Nachdem ich 3-4 Wochen lang versucht hatte, OpenCL usw. herauszufinden, fand ich dieses Tutorial, um Ihnen den schnellen Einstieg zu erleichtern. Es ist eine Schritt-für-Schritt-Anleitung, um hipCaffe zum Laufen zu bringen. Im Gegensatz zu nVidia stellen Sie bitte sicher, dass Sie Hardware unterstützt haben !!!! https://rocm.github.io/hardware.html . Denken Sie, Sie können es ohne die unterstützte Hardware zum Laufen bringen? Viel Glück. Du wurdest gewarnt. Sobald Sie ROCM eingerichtet haben (UND DIE ÜBERPRÜFUNGSTESTS AUSFÜHREN), finden Sie hier das hipCaffe-Tutorial. Wenn Sie ROCM eingerichtet haben, führen Sie innerhalb von 10 Minuten einen MNIST-Validierungstest durch - süß! https://rocm.github.io/ROCmHipCaffeQuickstart.html
quelle
Theano hat Unterstützung für OpenCL , aber es ist immer noch in einem frühen Stadium. Theano selbst ist nicht an OpenCL interessiert und ist auf Community-Unterstützung angewiesen .
Die meisten Operationen sind bereits implementiert, und es geht hauptsächlich darum, die gegebenen Operationen zu optimieren und zu optimieren.
Um das OpenCL-Backend nutzen zu können, müssen Sie sich selbst erstellen
libgpuarray
.Aus persönlicher Erfahrung kann ich Ihnen sagen, dass Sie mit etwas Glück CPU-Leistung erhalten. Die Speicherzuordnung scheint sehr naiv implementiert zu sein (daher ist die Berechnung langsam) und stürzt ab, wenn der Speicher knapp wird. Aber ich ermutige Sie, zu versuchen, den Code zu optimieren oder Fehler zu melden.
quelle
Tensorflow 1.3 wurde auf dem AMD ROCm-Stack unterstützt:
Ein vorgefertigtes Docker-Image wurde ebenfalls öffentlich veröffentlicht:
quelle
Wenn Sie Zugriff auf andere AMD-GPUs haben, lesen Sie bitte hier: https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs
Dies sollte Sie in die richtige Richtung für den Tensorflow auf der ROCm-Plattform bringen, aber Sellys Beitrag über https://rocm.github.io/hardware.html ist der Deal mit dieser Route. Diese Seite ist keine vollständige Liste. Ich habe selbst herausgefunden, dass die Xeon E5 v2 Ivy Bridge mit ROCm einwandfrei funktioniert, obwohl sie v3 oder höher auflistet. Grafikkarten sind jedoch etwas wählerischer. gfx8 oder neuer mit ein paar kleinen ausnahmen, polaris und vielleicht andere im laufe der zeit.
UPDATE - Es sieht so aus, als ob hiptensorflow eine Option für die Unterstützung von opencl während der Konfiguration hat. Ich würde sagen, untersuchen Sie den Link, auch wenn Sie nicht über gfx8 + oder polaris gpu verfügen, wenn die opencl-Implementierung funktioniert. Es ist ein langwieriger Prozess, aber ein oder drei Stunden (je nach Hardware) nach einer gut geschriebenen Anweisung sind nicht zu viel zu verlieren, um es herauszufinden.
quelle