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

Ich würde gerne wissen, welche Optionen für externe GPUs (eGPU) für macOS im Jahr 2017 mit dem MacBook Pro von Ende 2016 verfügbar sind.

Ich habe recherchiert, aber im Internet finde ich viele verwirrende Informationen. Einige sagen, dass es funktionieren kann, aber es erfordert Windows (Dual-Boot). Andere sagen, dass es nur für die älteren Grafikkarten funktionieren kann, da CUDA für die neueren Grafikkarten (GTX 1080) nicht unterstützt wird. Idealerweise würde ich gerne die 1080 GTX von NVIDIA betreiben. Mein einziger Zweck ist es, Keras und TensorFlow damit zu verwenden. Allerdings kenne ich nicht alle Dinge, die wichtig sind, damit es funktioniert. 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 spätem MacBook Pro 15") als eGPU verwenden (kein Dual- Boot-/Windows-/Linux-Partition).

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

CUDA auf dem 1080 funktioniert definitiv. Ich habe heute Morgen ein Netzwerk auf einem 1080 mit Keras mit TensorFlow-Backend trainiert (auf Ubuntu, aber immer noch).

Antworten (5)

Ich konnte endlich Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras installieren

Ich habe eine Zusammenfassung mit dem Verfahren geschrieben, 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:

GPU-Treiber installieren

  1. Fahren Sie Ihr System herunter, schalten Sie es wieder ein, indem Sie die Tasten (⌘ und R) drücken, bis Sie  sehen. Dadurch gelangen Sie in den Wiederherstellungsmodus.
  2. Klicken Sie in der Menüleiste auf Dienstprogramme > Terminal und schreiben Sie „csrutil disable; reboot' Drücken Sie die Eingabetaste, um diesen Befehl auszuführen.
  3. Führen Sie nach dem Neustart Ihres Mac diesen 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, kann es nach dem Neustart zu einem schwarzen Bildschirm kommen.

  5. Öffnen Sie nach dem Neustart Ihres Mac das Terminal und führen Sie diesen 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

Derzeit 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. Herunterladen und Installieren von CUDA 8.0 CUDA Toolkit 8.0 GA2 (Februar 2017)
  2. Installieren Sie es und folgen Sie den Anweisungen
  3. Env-Variablen festlegen

    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) Vor dem Herunterladen müssen Sie sich registrieren
  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. Installieren Sie Keras in der Umgebung und stellen Sie Tensorflow als Backend ein:

    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
    
Braucht man dafür einen externen Monitor? Oder nicht?
@AbhimanyuAryan, es ist kein externer Monitor erforderlich. Dies dient nur dazu, die eGPU mit Tensorlfow und/oder Keras zu verwenden
Funktioniert das auch mit Mac OS 10.13. Ich sehe, dass sie nur CUDA 9 für 10.13 aktualisiert haben und Cuda 8 nur für 10.12. Ich versuche zu sehen, ob ich TuriCreate auf der GPU ausführen kann.
Hast du die Leistung mit PC verglichen?
Hat das schon mal jemand mit BlackMagic eGPU probiert?
@PratikKhadloya Die BlackMagic eGPU ist AMD - und unterstützt daher CUDA nicht

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

Auf eGPU.io sind verschiedene eGPU-Setups beschrieben, und vielleicht finden Sie eines, das Ihren Computer/Ihr Gehäuse/Ihre Karte genau beschreibt. Diese Tutorials dienen hauptsächlich dazu, eine Anzeige mit einer eGPU zu beschleunigen, obwohl Sie zum Trainieren von NNs offensichtlich nicht alle Schritte befolgen müssen.

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 anscheinend jeder bei eGPU.io verlässt.
  • Installieren Sie cuDNN. /usr/local/cudaDie Dateien von der NVIDIA-Website sollten mit dem Rest Ihrer CUDA-Bibliotheken und -Includes 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 Segfault, als ich TensorFlow in Python benötigte. Es stellt sich heraus, dass einige Umgebungsvariablen gesetzt werden müssen (etwas anders als der CUDA-Installer vorschlägt), die in einem GitHub-Issue-Kommentar beschrieben wurden .
  • Ich habe auch versucht, TensorFlow aus der Quelle zu kompilieren, was nicht funktioniert hat, bevor ich die env vars wie im vorherigen Schritt beschrieben festgelegt 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 hoffentlich gibt es dafür einen Workaround.

Ich habe dieses Setup nicht oft verwendet, bin mir also nicht sicher über die Leistungssteigerung (oder Bandbreitenbeschränkungen), aber eGPU + TensorFlow/CUDA ist jetzt sicherlich möglich, da NVIDIA damit begonnen hat, geeignete Treiber für macOS zu veröffentlichen.

Ein Wort der Warnung: Ab TensorFlow 1.2 bieten sie keine offiziellen tensorflow-gpu Pip-Pakete an. Das bedeutet, dass wir es aus Quellen bauen müssen, 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 aktualisieren, wenn ich immer noch meine GPU verwenden möchte.
Es gelang, Tensorfow 1.2 aus dem Quellcode zu kompilieren. Habe ein kleines Tutorial dazu geschrieben: medium.com/@mattias.arro/…

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

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

Nun, da wir das abgedeckt haben, lassen Sie uns zu eGPU-Gehäusen übergehen. Da Sie speziell eGPUs erwähnt haben, gehe ich davon aus, dass Sie ein tatsächliches eGPU-Gehäuse (verwenden wir den AKiTiO-Knoten als Beispiel) anstelle eines PCIe-Erweiterungschassis mit externer Stromversorgung vorgesehen haben, da dies nicht der Fall ist eine tolle Idee.

Jetzt haben wir also eine Grafikkarte (GTX 980Ti) in einem eGPU-Gehäuse (AKiTiO Node) und wollen es zum Laufen bringen. Nun, das ist leichter gesagt als getan. Ich habe Ende 2016 ein wenig über eGPU recherchiert, und die Informationen, die ich erhalten habe, waren relativ verwirrend. Wenn also jemand Kommentare oder Korrekturen hat, lass es mich 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 in macOS ohne einen externen Monitor ausführen können. Sie werden den Startbildschirm von Apple auch nicht auf dem mit eGPU verbundenen Monitor sehen (es sei denn, Sie kaufen eine geflashte Karte von MacVidCards), aber Sie sollten dann in der Lage sein, die eGPU zum Ansteuern Ihrer Grafik zu verwenden.

Angenommen, Sie tun dies alles erfolgreich, sollten Sie ein sehr leistungsstarkes CUDA-fähiges Grafik-Kraftpaket haben.

Danke für die Information. Die Kombination von 980 Ti mit einem eGPU-Gehäuse scheint eine praktikable Option zu sein. Die einzige Sache ist, dass der Akitio Node (3) anscheinend eingestellt wird und der Razor Core nicht ausgeliefert wird. Welches eGPU-Gehäuse gibt es eigentlich zu kaufen? Akitio-Knoten 2?
Nun, Bizon Box ist dafür ausgelegt, aber es kostet ungefähr 500 Dollar. Lass mich mal suchen...
Dieser Link könnte auch eine gute Lektüre sein: appleinsider.com/articles/17/01/17/…
Funktioniert die "10XX"-Serie wirklich nicht auf dem Mac? Ich habe gehört, dass andere (einschließlich einer anderen Antwort hier) 1080ti auf einem Mac verwendet haben ...
Ab dieser Antwort absolut. Die Mac-Treiber der 10xx-Serie wurden erst ein ganzes Jahr nach der Veröffentlichung der Karten veröffentlicht (irgendwann Ende 2017 oder Anfang 2018, wenn ich mich recht erinnere).

Ich habe es kürzlich mit OSX 10.13.6 für Pytorch und Fastai gemacht. Siehe meinen Kern hier: https://gist.github.com/dandanwei/18708e7bd5fd2b227f86bca668343093

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

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • CUDA-Toolkit: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • XCode: 8.2
  • Basel: 0.9.0
  • OpenMP: neuste
  • Python: 3.6
  • TensorFlow: 1.5.0