Wie kann ich speed up deep learning auf einem nicht-NVIDIA-setup?
Da ich nur eine AMD A10-7850 APU, und nicht die Mittel haben, um auf zu verbringen, ein $800-$1200 NVIDIA-Grafikkarte, ich bin versucht, dies mit den Ressourcen habe ich, um zu beschleunigen deep learning via tensorflow/keras.
Zunächst habe ich eine vorkompilierte version von Tensorflow. InceptionV3 würde etwa 1000-1200 Sekunden zu berechnen 1 Epoche. Es wurde quälend langsam.
Zur Beschleunigung von Berechnungen, die ich vorher selbst zusammengestellt Tensorflow mit Optimierer (mit AVX und SSE4-Anweisungen). Dies führte zu einer etwa 40% igen Senkung der Rechenzeiten. Die gleichen Berechnungen durchgeführt vor jetzt über 600 Sekunden zu berechnen. Es ist fast erträglich - eine Art, wie Sie können, watch paint dry.
Ich bin auf der Suche nach Möglichkeiten zur weiteren Senkung berechnungszeiten. Ich habe nur eine integrierte AMD-Grafikkarte, die Teil der APU. (Wie) (C/c)eine ich Nutzung dieser Ressource zu speed-up-Berechnung sogar noch mehr?
Mehr im Allgemeinen sagen wir, dass es andere Menschen mit ähnlichen monetären Beschränkungen und Intel-setups. Wie kann jemand OHNE diskrete NVIDIA-Karten nutzen Ihre integrierte Grafik-chips oder anderweitig nicht-NVIDIA-setup schneller zu erreichen, als CPU-only-performance? Ist das möglich? Warum/warum nicht? Was muss getan werden, um dieses Ziel zu erreichen? Oder wird dies in Naher Zukunft möglich (2-6 Monate)? Wie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der recherche zu diesem Thema für ein paar Monate, ich kann sehen, 3.5 mögliche Wege vorwärts:
1.) Tensorflow + OpenCl wie bereits erwähnt in den Kommentaren oben:
Scheint es einige Bewegung auf diesem Gebiet. Über bei Codeplay, Lukasz Iwanski gerade gebucht, eine umfassende Antwort auf, wie man tensorflow Ausführung mit opencl hier (ich will nur einen link als oben angegeben, da die Informationen dort ändern): https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
Das Potenzial für die Verwendung der integrierten Grafik, ist verführerisch. Es lohnt sich auch die Erkundung der Einsatz dieser Kombination mit APUs. Aber ich bin nicht sicher, wie gut dies funktionieren, da die OpenCl-Unterstützung ist noch früh in der Entwicklung, und die hardware-Unterstützung ist sehr begrenzt. Darüber hinaus OpenCl ist nicht das gleiche wie ein handgefertigtes Bibliothek von optimierten code. (UPDATE 2017-04-24: ich habe mittlerweile den code zu kompilieren, nachdem laufen in einige Probleme hier!) Leider, dass sich die erhofften Verbesserungen in der Geschwindigkeit AUF MEINEM SETUP (iGPU) kam nicht zustande.
CIFAR 10 Datensatz:
die Auslastung.
die Auslastung.
und 100% GPU-Auslastung.
Kann Ihre Laufleistung variieren erheblich. So Frage ich mich, was andere Leute bekommen die relativ gesehen (nicht optimierten vs optimierte vs opencl) auf Ihre setups?
Was sollte beachtet werden: opencl-Implementierung bedeutet, dass alle in die Berechnung getan werden sollte, auf der GPU. (Aktualisiert am 2017/4/29), Aber in Wirklichkeit ist dies nicht der Fall noch, da einige Funktionen noch nicht implementiert. Dies führt zu unnötige kopieren hin und her der Daten zwischen CPU-und GPU-ram. Wieder, bevorstehende änderungen sollte die situation verbessern. Und außerdem, für diejenigen, die daran interessiert zu helfen und diejenigen, die Dinge zu beschleunigen, können wir etwas tun, haben eine messbare Auswirkung auf die Leistung tensorflow mit opencl.
Aber so steht es jetzt: 1 iGPU << 4 CPUS mit SSE+AVX. Vielleicht beefier GPUs mit größeren RAM-und/oder opencl-2.0-Implementierung gemacht haben könnte, einen größeren Unterschied.
An dieser Stelle sollte ich hinzufügen, dass ähnliche Anstrengungen wurden mit mindestens Caffe und/oder Theano + OpenCl. Der limitierende Schritt in allen Fällen scheint die manuelle Portierung von CUDA/cuDNN Funktionen der openCl-Paradigma.
2.) RocM + MIOpen
RocM steht für Radeon-Open-Compute-und scheint zu sein, ein Sammelsurium von Initiativen, die ist/wird deep-learning möglich auf nicht-NVIDIA (meist Radeon-Geräte). Es beinhaltet 3 Hauptkomponenten:
Offenbar, RocM ist entworfen, um spielen zu AMDs stärken beider CPU-und GPU-Technologie. Ihren Ansatz zu beschleunigen, deep-learning nutzen der beiden Komponenten. Als ein APU-Besitzer, ich bin besonders interessiert an dieser Möglichkeit. Aber als ein cautionary Hinweis: Kaveri-APUs haben eingeschränkte Unterstützung (nur integrierte graphcs unterstützt wird). Zukünftige APUs nicht freigegeben. Und es scheint, es ist noch eine Menge Arbeit wird hier getan, um dieses Projekt zu einer ausgereiften Zustand. Eine Menge Arbeit wird hoffentlich dieser Ansatz tragfähig, innerhalb eines Jahres gegeben, dass AMD hat angekündigt, Ihre Radeon Instinkt Karten wird dieses Jahr veröffentlicht werden (2017).
Hier das problem für mich ist, dass das RocM ist die Bereitstellung von tools zum erstellen von deep-learning-Bibliotheken. Sie nicht sich selbst darstellen deep learning Bibliotheken. Als Daten-Wissenschaftler, der konzentriert sich nicht auf tools Entwicklung, ich möchte nur etwas, das funktioniert. und bin nicht unbedingt daran interessiert, Gebäude, was ich will zu tun, dann das zu lernen. Es gibt nicht genug Stunden am Tag zu tun, sowohl auf Unternehmens-ich bin bei.
NVIDIA hat CUDA und cuDNN die libaries von hand gefertigt assembler-code optimiert für NVIDIA-Grafikkarten. Alle wichtigen deep-learning-frameworks bauen auf diesen proprietären Bibliotheken. AMD derzeit nicht alles wie bei allen.
Ich bin mir nicht sicher, wie erfolgreich AMD, wo NVIDIA ist in dieser Hinsicht. Aber es gibt einige Licht leuchtete auf, was AMDs Absichten sind in einem Artikel geschrieben von Carlos Perez auf 4/3/2017 hier. Eine aktuelle Vortrag an der Stanford spricht auch im Allgemeinen über Ryzen, Vega und Tiefe lernen zusammen zu passen. Im wesentlichen, der Artikel besagt, dass MIOpen vertreten wird dieser von hand gestalteten Bibliothek von optimierten deep-learning-Funktionen für AMD Geräte. Diese Bibliothek ist Satz zu sein veröffentlicht im 1. Halbjahr 2017. Ich bin mir nicht sicher, wie bald diese Bibliotheken werden eingebunden in die große Tiefe lernen, die Rahmenbedingungen und was die Bandbreite der funktionalen Umsetzung wird dann in dieser Zeit.
Aber anscheinend AMD hat bereits mit den Entwicklern von Caffe zu "hippify" die code-basis. Im Grunde, der CUDA-code wird automatisch umgewandelt in C-code über die HÜFTE. Die Automatisierung kümmert sich um die überwiegende Mehrheit der code-basis, so dass nur weniger als 0,5% der code geändert werden musste und benötigt manuelle Aufmerksamkeit. Vergleichen Sie die manuelle übersetzung in openCl-code, und man beginnt immer das Gefühl, dass dieser Ansatz möglicherweise nachhaltiger. Was ich bin nicht klar darüber ist, wo die Low-level-assembler-Sprache-Optimierung kommen.
(Update 2017-05-19), Aber mit dem bevorstehenden release von AMD Vega-Karten (die professionelle Frontier-Ausgabe-Karte nicht für die Verbraucher werden die ersten sein), gibt es Hinweise, dass großen deep-learning-frameworks wird werden unterstützt durch die MIOpen Rahmen. Ein Forbes Artikel veröffentlicht heute zeigt den Fortschritt MiOpen übernommen hat, nur in den letzten paar Monaten in Bezug auf Leistung: es erscheint signifikant.
(Update 2017-08-25) MiOpen hat offiziell freigegeben. Wir sind nicht mehr im Gespräch in hypotheticals hier. Jetzt müssen wir nur noch ausprobieren, wie gut dieses framework arbeitet.
3.) Neon
Neon ist Nervana ist (jetzt übernommen von Intel) open-source-deep-learning-framework. Der Grund, warum ich erwähne dieses framework ist, dass es scheint ziemlich einfach zu verwenden. Die syntax ist so einfach und intuitiv wie Keras. Wichtiger ist jedoch in diesem Rahmen hat erreicht Geschwindigkeiten bis zu 2x schneller als Tensorflow auf einige benchmarks aufgrund einiger Handarbeit assembler-Optimierung für diese Berechnungen. Möglicherweise, schneiden berechnungszeiten von 500 Sek/Epoche bis zu 300 Sek/Epoche nichts, an zu niesen. 300 Sekunden = 5 Minuten. So konnte man 15 Epochen, die in einer Stunde. und über 50 Epochen, über 3,5 Stunden! Aber im Idealfall möchte ich diese Art von Berechnungen in unter einer Stunde. , Diese Ebenen zu erreichen, muss ich die Verwendung einer GPU, und an diesem Punkt, nur NVIDIA bietet volle Unterstützung in dieser Hinsicht: Neon nutzt auch CUDA und cuDNN wenn eine GPU verfügbar ist (und natürlich, es muss eine NVIDIA GPU). Wenn Sie Zugriff auf andere Intel-hardware dieser ist natürlich auch ein Gültiger Weg zu verfolgen. Afterall, Neon war, entwickelte sich die motivation, um Dinge zu arbeiten, optimal auch für nicht-NVIDIA-Einstellungen (wie Nervana ' s custom CPUs, und jetzt Intel FPGAs oder Xeon Dolmetscherdienste).
3.5.) Intel Movidius
Update 2017-08-25: ich stieß auf dieser Artikel. Intel veröffentlicht ein USB3.0-stick-basierten "deep learning" accelerator. Anscheinend funktioniert es mit Cafe und ermöglicht dem Benutzer die Durchführung gemeinsamer Cafe-basierte fein-tuning von Netzwerken und Inferenz. Dies ist wichtig zu betonen: Wenn Sie möchten, trainieren Sie Ihr eigenes Netzwerk von Grund auf neu, die Formulierung ist sehr zweideutig hier. Ich gehe daher davon aus, dass abgesehen von der fine-tuning-Netzwerk, die Ausbildung selbst sollte noch getan werden, auf etwas mit mehr parallel berechnen. Der wirkliche Clou aber ist: Wenn ich überprüft die Preisgestaltung dieser stick kostet nur $79. Das ist nichts im Vergleich zu den Kosten des durchschnittlichen NVIDIA 1070-80(ti) - Karte. Wenn Sie nur wollen, gegen einige vision Probleme mit gängigen Netzwerk-Topologien, das bereits für einige Verwandte Aufgaben, können Sie mit diesem stick, um die Feinabstimmung es zu Ihrem eigenen nutzen, dann kompilieren Sie den code, und legen Sie es in diesem stick zu tun Inferenz schnell. Viele Anwendungsfälle abgedeckt werden kann, mit diesem Stab, und wieder in $79 es könnte es Wert sein. Diese wird von Intel, die Sie vorschlagen, zu gehen alle auf Intel. Ihr Modell ist die Nutzung der cloud (d.h. Nervana Cloud) für die Ausbildung. Verwenden Sie dann diese chip-Prototypen Inferenz Inferenz oder wo der Energieverbrauch ankommt. Ob dies die richtige Vorgehensweise ist oder nicht, ist für den Leser zu beantworten.
Zu diesem Zeitpunkt, wie es aussieht tief lernen ohne NVIDIA ist immer noch schwierig zu realisieren. Einige begrenzte Geschwindigkeit Gewinne sind schwierig, aber potenziell möglich durch den Einsatz von opencl. Andere Initiativen, die klingen vielversprechend, aber es wird eine Zeit dauern, zu Sortieren, die tatsächlichen Auswirkungen dieser Initiativen haben wird.
Wenn Ihre Plattform unterstützt opencl Sie können sich bei Verwendung mit tensorflow. Es gibt einige experimentelle Unterstützung für Linux an in diesem github-repository. Einige vorläufige Hinweise werden unter die Dokumentation Abschnitt dieses github-repository.