2016-06-18 9 views
35

Ich fange an Keras zu lernen, was meiner Meinung nach eine Schicht über Tensorflow und Theano ist. Allerdings habe ich nur Zugriff auf AMD GPUs wie AMD R9 280X.Mit Keras & Tensorflow mit AMD GPU

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 bin auf OSX läuft.

+0

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

+3

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. –

+4

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

Antwort

4

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 verlässt sich auf community support.

Most der Operationen sind bereits implementiert und es ist vor allem eine Frage der Optimierung und Optimierung der gegebenen Operationen.

Um das OpenCL-Backend zu verwenden, müssen Sie sich selbst buildlibgpuarray.

Aus eigener Erfahrung kann ich Ihnen sagen, dass Sie CPU-Leistung erhalten, wenn Sie Glück haben. Die Speicherzuweisung scheint sehr naiv implementiert zu sein (daher wird die Berechnung langsam sein) und wird abstürzen, wenn der Speicher knapp wird. Aber ich ermutige Sie, den Code zu versuchen und vielleicht sogar zu optimieren oder Fehler zu melden.

+3

Hat sich in den letzten 6 Monaten diesbezüglich etwas verändert? – Thornhale

+2

Theano wurde eingestellt –

+0

@ErikAigner Official. Fehler sind immer noch behoben und die Gemeinschaft kann etwas beitragen. – nemo

50

Ich bin ein OpenCL 1.2-Backend für Tensorflow schriftlich https://github.com/hughperkins/tensorflow-cl

folgende Merkmale Diese Gabel von tensorflow für OpenCL hat:

  • es zielt auf jede/alle OpenCL 1.2-Geräte. Es benötigt kein OpenCL 2.0, benötigt kein SPIR-V oder SPIR. Braucht Shared Virtual Memory nicht. Und so weiter ...
  • es basiert auf einer darunterliegenden Bibliothek mit dem Namen 'CUDA-on-cl', https://github.com/hughperkins/cuda-on-cl
    • CUDA-on-cl Zielen der Lage sein zu nehmen jeden NVIDIA® CUDA ™ soure- Code und kompilieren Sie es für OpenCL 1.2-Geräte. Es ist ein sehr allgemeines Ziel und ein sehr allgemeiner Compiler
  • für jetzt werden die folgenden Funktionalitäten implementiert:
  • es auf Ubuntu 16.04 entwickelt (mit Intel HD5500 und NVIDIA GPUs) und Mac Sierra (mit Intel HD 530 und Radeon Pro 450)

Dies ist nicht die einzige OpenCL-Gabel von Tensorflow.Es gibt auch eine Gabel entwickelt von Codeplay https://www.codeplay.com, mit Computecpp, https://www.codeplay.com/products/computesuite/computecpp Ihre Gabel hat stärkere Anforderungen als meine eigenen, soweit ich weiß, in Bezug auf welche spezifische GPU-Geräte es funktioniert. Sie müssten die Platform Support Notes (unten auf der Seite "here computecpp") prüfen, um festzustellen, ob Ihr Gerät unterstützt wird. Die Code-Fork ist eigentlich eine offizielle Google-Fork, die hier ist: https://github.com/benoitsteiner/tensorflow-opencl

+0

Ich frage mich: Was ist die rationale Unterstützung nur für Opencl 1.2 zu bauen. Es scheint viele Funktionen in Opencl 2.0 zu geben, die für Deep Learning nützlich sein könnten: http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/opencl -2-0-samples/ – Thornhale

+1

Hat jemand ohne einen dedizierten GPU getestet, wie viel schneller Tensor fließt, wenn eine integrierte GPU (Intel oder AMD) anstelle nur der CPU verwendet wird? – Thornhale

+2

@ Thonhale Begründung ist: Targeting Portabilität. Beispielsweise unterstützt der Mac Sierra Radeon Pro 450-Treiber nur OpenCL 1.2, ebenso wie der Intel HD 530-Treiber auf derselben Plattform. (und das ist ein brandneues Mac Book Pro im Grunde) –

23

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.

    +0

    Ich würde gerne sehen, AMD in Aktion kommen - persönlich habe ich alle AMD-Karten - aber uns wurde gesagt, _Soon_ zu lange jetzt (nicht, dass AMD hat alle steuere hier, ob TensorFlow, etc es implementieren). Hat AMD ein "Problem-Tracker" -Äquivalent, das Sie zufällig kennen? – ehiller

    3

    Dies ist eine alte Frage, aber da ich die letzten Wochen damit verbracht, um es herauszufinden auf eigene Faust:

    1. OpenCL Unterstützung für Theano ist Glücksache. Sie fügten ein libgpuarray-Backend hinzu, das immer noch fehlerhaft zu sein scheint (dh der Prozess läuft auf der GPU, aber die Antwort ist falsch - wie 8% Genauigkeit auf MNIST für ein DL-Modell, das ~ 95 +% Genauigkeit auf CPU oder nVidia CUDA). Auch weil ~ 50-80% der Leistungssteigerung auf dem nVidia-Stack aus den CUDNN-Bibliotheken stammen, wird OpenCL einfach im Sande liegen. (Siehe unten!) :)
    2. ROCM scheint sehr cool zu sein, aber die Dokumentation (und sogar eine klare Erklärung, was ROCM ist/was es tut) ist schwer zu verstehen. Sie tun ihr Bestes, aber sie sind 4+ Jahre zurück. Es funktioniert nicht NICHT auf einem RX550 (wie dieses Schreiben). Verschwende also nicht deine Zeit (hier ist eine der Wochen :)). Zuerst scheint es, dass ROCM eine neue Ergänzung des Treibersatzes ist (AMDGPU-Pro ersetzt oder erweitert), aber es ist tatsächlich ein Kernelmodul und ein Satz von Bibliotheken, die AMDGPU-Pro im Wesentlichen ersetzen. (Betrachten Sie dies als das Äquivalent von Nvidia-381-Treiber + CUDA einige Bibliotheken Art von). https://rocm.github.io/dl.html (Ehrlich gesagt habe ich noch nicht die Leistung getestet oder versucht, es zu bekommen mit neueren Mesa-Treiber noch zu arbeiten. Ich werde das irgendwann tun.
    3. hinzufügen MiOpen zu ROCM, und das ist im Wesentlichen CUDNN. Sie haben auch einige ziemlich klare Anleitungen für die Migration. Aber besser noch.
    4. Sie erstellt "HIP", die eine automatische Übersetzung von CUDA/CUDNN zu MiOpen. Es scheint ziemlich gut zu arbeiten, da sie die APIs direkt nach oben übersetzte. Es gibt Konzepte, die keine perfekten Karten sind, aber im Allgemeinen sieht es gut aus.

    Jetzt, Nach 3-4 Wochen, in denen ich versucht habe, OpenCL herauszufinden, habe ich dieses Tutorial gefunden, um Ihnen den Einstieg zu erleichtern. Es ist ein Schritt-für-Schritt, um hipCaffe zum Laufen zu bringen. Anders als nVidia, bitte stellen Sie sicher, dass Sie Hardware unterstützt haben !!!! https://rocm.github.io/hardware.html. Denken Sie, dass es ohne ihre unterstützte Hardware funktionieren kann? Viel Glück. Du wurdest gewarnt. Sobald Sie ROCM installiert haben (UND DIE VERIFIKATIONSTESTS LAUFEN), hier ist das hipCaffe-Tutorial - wenn Sie ROCM haben, werden Sie innerhalb von 10 Minuten einen MNIST-Validierungstest durchführen - süß! https://rocm.github.io/ROCmHipCaffeQuickstart.html

    +0

    Ein Link zu einer Lösung ist willkommen, aber stellen Sie bitte sicher, dass Ihre Antwort ohne sie nützlich ist: [Fügen Sie einen Kontext um den Link hinzu] (// meta.stackexchange.com/a/8259), damit Ihre Mitbenutzer eine Idee haben, was es ist und warum es dort ist, zitieren Sie dann den relevantesten Teil der Seite, auf den Sie verlinken, falls die Zielseite nicht verfügbar ist. [Antworten, die kaum mehr als ein Link sind, können gelöscht werden.] (// stackoverflow.com/help/deleted-answers) – paper1111

    3

    Wenn Sie Zugriff auf andere AMD GPUs haben man hier: https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs

    Dies sollten Sie in der richtigen Richtung für tensorflow auf der ROCm Plattform, aber Selly der Post über https://rocm.github.io/hardware.html ist der Deal mit diesem Weg erhalten gehen . Diese Seite ist keine erschöpfende Liste, ich fand heraus, dass die Xeon E5 v2 Ivy Bridge gut mit ROCm funktioniert, obwohl sie v3 oder neuer auflisten, Grafikkarten sind jedoch etwas wählerischer. gfx8 oder neuer mit ein paar kleinen Ausnahmen, Polaris und vielleicht noch andere, wenn die Zeit vergeht.

    UPDATE - Es sieht so aus, als hätte hippensorflow eine Option für Opencl-Unterstützung während der Konfiguration. Ich würde sagen, untersuchen Sie den Link, auch wenn Sie keine gfx8 + oder Polaris GPU haben, wenn die opencl-Implementierung funktioniert. Es ist ein langwieriger Prozess, aber eine Stunde oder drei (je nach Hardware) nach einer gut geschriebenen Anweisung ist nicht zu viel zu verlieren, um es herauszufinden.

    Verwandte Themen