Maschinelles Lernen auf externer GPU mit CUDA und spätem MBP 2016?

31

Ich würde gerne wissen, welche externen GPU (eGPU) -Optionen 2017 für MacOS mit dem MacBook Pro von Ende 2016 verfügbar sind.

Ich habe recherchiert, aber im Internet finde ich viele verwirrende Informationen. Einige sagen, es kann funktionieren, aber es erfordert Windows (Dual-Boot). Andere sagen, dass dies nur für ältere Grafikkarten funktioniert, da CUDA für neuere Grafikkarten (GTX 1080) nicht unterstützt wird. Idealerweise möchte ich den 1080 GTX von NVIDIA ausführen. Mein einziger Zweck ist es, Keras und TensorFlow damit zu verwenden. Ich kenne jedoch nicht alle Dinge, die wichtig sind, um es zum Laufen zu bringen. Meine Frage ist daher, ist es möglich, TensorFlow mit CUDA und eGPU auf dem späten MacBook Pro 2016 (15 ") zu verwenden? Ich möchte die Grafikkarte in macOS (mit dem späten MacBook Pro 15") als eGPU verwenden (kein DualPU). Boot / Windows / Linux-Partition).

Randnotiz: Ich habe Benutzer gesehen, die eGPUs auf Macbooks verwendet haben (Razor Core, AKiTiO Node), aber niemals in Kombination mit CUDA und Machine Learning (oder dem 1080 GTX). Die Leute schlugen vor, stattdessen Serverplatz zu mieten oder Windows zu verwenden (bessere Grafikkartenunterstützung) oder sogar einen neuen PC zu dem gleichen Preis zu bauen, mit dem Sie eine eGPU auf einem Mac verwenden können. (Ich bevorzuge diese Option nicht.)

Joop
quelle
CUDA auf dem 1080 funktioniert auf jeden Fall. Ich habe heute Morgen ein Netzwerk auf einem 1080 mit Keras und TensorFlow-Backend trainiert (unter Ubuntu, aber immer noch).
brendon-ai

Antworten:

19

Endlich konnte ich Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras installieren

Ich schrieb eine kurze Zusammenfassung des Verfahrens, hoffe, es hilft

https://gist.github.com/jganzabal/8e59e3b0f59642dd0b5f2e4de03c7687

Folgendes habe ich getan:

Diese Konfiguration hat bei mir funktioniert, hoffe es hilft

Es basiert auf: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

und auf: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Hardware

Softwareversionen

  • macOS Sierra Version 10.12.6
  • GPU-Treiberversion: 10.18.5 (378.05.05.25f01)
  • CUDA-Treiberversion: 8.0.61
  • cuDNN v5.1 (20. Januar 2017) für CUDA 8.0: Registrierung und Download erforderlich
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Verfahren:

Installieren Sie den GPU-Treiber

  1. Fahren Sie Ihr System herunter, und schalten Sie es mit den Tasten (⌘ und R) wieder ein, bis  angezeigt wird. Auf diese Weise gelangen Sie in den Wiederherstellungsmodus.
  2. Klicken Sie in der Menüleiste auf Dienstprogramme> Terminal und schreiben Sie "csrutil disable". Neustart 'drücken Sie die Eingabetaste, um diesen Befehl auszuführen.
  3. Führen Sie nach dem Neustart Ihres Mac den folgenden Befehl im Terminal aus:

    cd ~/Desktop; git clone https://github.com/goalque/automate-eGPU.git
    chmod +x ~/Desktop/automate-eGPU/automate-eGPU.sh
    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh
    
  4. Trennen Sie Ihre eGPU von Ihrem Mac und starten Sie neu. Dies ist wichtig, wenn Sie Ihre eGPU nicht vom Stromnetz getrennt haben und nach dem Neustart möglicherweise ein schwarzer Bildschirm angezeigt wird.

  5. Wenn Ihr Mac neu gestartet wurde, öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Schließen Sie Ihre eGPU über TH2 an Ihren Mac an.
    2. Starten Sie Ihren Mac neu.

Installieren Sie CUDA, cuDNN, Tensorflow und Keras

In diesem Moment benötigt Keras 2.08 Tensorflow 1.0.0. Tensorflow-gpu 1.0.0 benötigt CUDA 8.0 und cuDNN v5.1 hat bei mir funktioniert. Ich habe andere Kombinationen ausprobiert, aber es scheint nicht zu funktionieren

  1. CUDA 8.0 CUDA Toolkit 8.0 GA2 herunterladen und installieren (Feb 2017)
  2. Installieren Sie es und folgen Sie den Anweisungen
  3. Setze env Variablen

    vim ~/.bash_profile
    export CUDA_HOME=/usr/local/cuda
    export DYLD_LIBRARY_PATH="$CUDA_HOME/lib:$CUDA_HOME:$CUDA_HOME/extras/CUPTI/lib"
    export LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
    

(Wenn Ihr bash_profile nicht existiert, erstellen Sie es. Dies wird jedes Mal ausgeführt, wenn Sie ein Terminalfenster öffnen.)

  1. Herunterladen und Installieren von cuDNN (cudnn-8.0-osx-x64-v5.1) Sie müssen sich registrieren, bevor Sie es herunterladen können
  2. Kopieren Sie cuDNN-Dateien nach CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Umgebung erstellen und tensorflow installieren

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Überprüfen Sie, ob es funktioniert

Führen Sie das folgende Skript aus:

import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

with tf.Session() as sess:
    print (sess.run(c))
  1. Installiere Keras in der Umgebung und setze tensorflow als Backend:

    pip install --upgrade --no-deps keras # Need no-deps flag to prevent from installing tensorflow dependency
    KERAS_BACKEND=tensorflow python -c "from keras import backend"
    

    Ausgabe:

    Using TensorFlow backend.
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.8.0.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.5.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.8.0.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:126] Couldn't open CUDA library libcuda.1.dylib. LD_LIBRARY_PATH: /usr/local/cuda/lib:/usr/local/cuda:/usr/local/cuda/extras/CUPTI/lib
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.dylib locally
    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.8.0.dylib locally
    
julianisch
quelle
Benötigen Sie dazu einen externen Monitor? Oder du nicht?
Abhimanyu Aryan
@AbhimanyuAryan, es ist kein externer Monitor erforderlich. Dies ist nur, um die eGPU mit Tensorlfow und / oder Keras zu verwenden
Julian
Funktioniert dies auch mit Mac OS 10.13? Ich sehe, dass nur CUDA 9 für 10.13 aktualisiert wurde und Cuda 8 nur für 10.12. Ich versuche herauszufinden, ob ich damit TuriCreate auf einer GPU ausführen kann.
Niklas
Haben Sie die Leistung mit dem PC verglichen?
Angus Tay
Hat jemand dies mit BlackMagic eGPU versucht?
Pratik Khadloya
9

Ich konnte auf meinem iMac (Ende 2013) eine NVIDIA GTX 1080 Ti auf dem Akitio Node zum Laufen bringen. Ich verwende einen Thunderbolt 2> 3-Adapter, aber auf neueren Macs können Sie die schnellere TB3 direkt verwenden.

Unter eGPU.io werden verschiedene eGPU- Konfigurationen beschrieben, und möglicherweise finden Sie eine, die Ihren Computer / Ihr Gehäuse / Ihre Karte genau beschreibt. Diese Tutorials dienen hauptsächlich dazu, eine Anzeige mit einer eGPU zu beschleunigen. Zum Trainieren von NNs müssen Sie jedoch nicht alle Schritte ausführen.

Hier ist ungefähr, was ich getan habe:

  • Installieren Sie CUDA gemäß der offiziellen Dokumentation.
  • Deaktivieren Sie SIP (Google für ein Tutorial). Es wird vom Skript eGPU.sh und später auch von TensorFlow benötigt.
  • Führen Sie das Skript automate-eGPU.sh (mit sudo) aus, auf das sich alle bei eGPU.io zu verlassen scheinen.
  • Installieren Sie cuDNN. Die Dateien von der NVIDIA-Website sollten /usr/local/cudamit den übrigen CUDA-Bibliotheken und -Einschlüssen untergehen .
  • Deinstallieren Sie TensorFlow nur für die CPU und installieren Sie eines mit GPU-Unterstützung. Bei der Installation mit pip install tensorflow-gpuhatte ich keine Installationsfehler, bekam aber einen Segfehler, wenn TensorFlow in Python benötigt wurde. Es stellte sich heraus, dass einige Umgebungsvariablen festgelegt werden müssen (etwas anders als vom CUDA-Installationsprogramm vorgeschlagen), die in einem GitHub-Problemkommentar beschrieben wurden .
  • Ich habe auch versucht, TensorFlow aus dem Quellcode zu kompilieren, was nicht funktioniert hat, bevor ich die Umgebungsvariablen wie im vorherigen Schritt beschrieben eingestellt habe.

Über die iStat-Menüs kann ich überprüfen, ob meine externe GPU tatsächlich während des Trainings verwendet wird. Diese TensorFlow-Installation funktionierte zwar nicht mit Jupyter, aber dafür gibt es hoffentlich eine Problemumgehung.

Ich habe dieses Setup nicht viel benutzt, um nicht sicher zu sein, ob die Leistung gesteigert wird (oder die Bandbreite begrenzt ist), aber eGPU + TensorFlow / CUDA ist jetzt sicherlich möglich, da NVIDIA damit begonnen hat, geeignete Treiber für macOS zu veröffentlichen.

Mattias Arro
quelle
Ein Wort der Warnung: Ab TensorFlow 1.2 bieten sie keine offiziellen Tensorflow-GPU-Pip-Pakete mehr an. Das heißt, wir müssen es aus Quellen bauen, was meiner Erfahrung nach nie sofort funktioniert. Hoffentlich gibt es Tutorials von Drittanbietern zum Kompilieren von Hauptversionen, aber im Moment kann ich zum Beispiel nicht auf 1.2 oder 1.3 upgraden, wenn ich meine GPU weiterhin verwenden möchte.
Mattias Arro
3
Tensorfow 1.2 konnte aus dem Quellcode kompiliert werden. Schrieb ein kleines Tutorial darüber: medium.com/@mattias.arro/…
Mattias Arro
3

Die eGPU-Unterstützung unter macOS ist ein schwieriges Thema, aber ich werde mein Bestes geben, um Ihre Frage zu beantworten.

Beginnen wir mit Grafikkarten! Aus Gründen der Zeit und weil es sich um CUDA handelt, bleiben wir bei Nvidia-Karten. Jede Grafikkarte funktioniert mit den richtigen Treibern unter Windows. Apple unterstützt jedoch offiziell nur einige wenige Nvidia-Grafikkarten, hauptsächlich sehr alte. Die Nvidia-Grafiktreiber funktionieren jedoch mit einer großen Ausnahme auf fast allen GeForce- und Quadro-Karten von Nvidia. GTX 10xx-Karten FUNKTIONIEREN NICHT. Auf jedem Mac-Betriebssystem. Zeitraum. Nvidias Treiber unterstützen diese Karte nicht. Wenn Sie auf der Suche nach Leistung sind, sollten Sie sich die GTX 980Ti oder Titan X ansehen (viele gute Quadro-Karten würden auch gut funktionieren).

Nachdem wir uns damit befasst haben, gehen wir zu den eGPU-Gehäusen über. Da Sie speziell eGPUs erwähnt haben, gehe ich davon aus, dass Sie ein Budget für ein tatsächliches eGPU-Gehäuse (verwenden wir als Beispiel den AKiTiO-Knoten) anstelle eines PCIe-Erweiterungschassis mit einem externen Netzteil haben, da dies nicht der Fall ist eine tolle Idee.

Jetzt haben wir eine Grafikkarte (GTX 980Ti) in einem eGPU-Gehäuse (AKiTiO Node) und möchten, dass sie funktioniert. Das ist leichter gesagt als getan. Ich habe gegen Ende 2016 ein bisschen nach eGPU recherchiert und die Informationen, die ich erhalten habe, waren relativ verwirrend. Wenn also jemand Kommentare oder Korrekturen hat, lass es mich bitte wissen. Soweit ich weiß, müssen Sie einen externen Monitor an die eGPU anschließen, um die Leistung der eGPU nutzen zu können. Ich glaube nicht, dass Sie die eGPU unter macOS ohne externen Monitor betreiben können. Auf dem mit der eGPU verbundenen Monitor wird auch kein Apple-Startbildschirm angezeigt (es sei denn, Sie kaufen eine Flash-Karte von MacVidCards), aber Sie sollten dann in der Lage sein, die eGPU zur Steuerung Ihrer Grafiken zu verwenden.

Vorausgesetzt, Sie erledigen dies alles erfolgreich, sollten Sie über ein leistungsstarkes CUDA-fähiges Grafik-Kraftpaket verfügen.

NoahL
quelle
Danke für die Information. Die Kombination von 980 Ti mit einem eGPU-Gehäuse scheint eine gangbare Option zu sein. Das Einzige ist, dass der Akitio-Knoten (3) nicht mehr hergestellt ist und der Rasiermesserkern nicht ausgeliefert wird. Welches eGPU-Gehäuse kann man eigentlich kaufen? Akitio Node 2?
Joop
2
Nun, Bizon Box ist dafür konzipiert, aber es ist wie 500 Dollar. Lassen Sie mich ein
bisschen
1
Dieser Link könnte auch eine gute Lektüre sein: appleinsider.com/articles/17/01/17/…
NoahL
Funktioniert die "10XX" -Serie auf einem Mac wirklich nicht? Ich habe gehört, andere (einschließlich einer anderen Antwort hier) verwendet 1080ti auf Mac ...
Blaszard
Ab dieser Antwort absolut. Mac-Treiber der 10xx-Serie wurden erst ein volles Jahr nach Veröffentlichung der Karten veröffentlicht (Ende 2017 oder Anfang 2018, wenn ich mich
recht
1

Wenn Sie MacOS 10.13.3 verwenden, überprüfen Sie diesen Link . Es deckt alles ab, vom eGPU-Setup bis zur TensorFlow-Kompilierung.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • CUDA-Toolkit: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: Neueste
  • Python: 3.6
  • TensorFlow: 1.5.0
GeekCui
quelle