Apprendimento automatico su GPU esterna con CUDA e fine MBP 2016?


31

Vorrei sapere quali sono le opzioni GPU esterne (eGPU) per macOS nel 2017 con MacBook Pro alla fine del 2016.

Ho fatto le mie ricerche, tuttavia su Internet trovo molte informazioni confuse. Alcuni dicono che può funzionare, ma richiede Windows (doppio avvio). Altri dicono che può funzionare solo con le schede grafiche più vecchie poiché CUDA non è supportato per le schede grafiche più recenti (GTX 1080). Idealmente, vorrei eseguire la 1080 GTX di NVIDIA. Il mio unico scopo è usare Keras e TensorFlow con esso. Tuttavia, non conosco tutte le cose che sono importanti per farlo funzionare. La mia domanda quindi è: è possibile utilizzare TensorFlow con CUDA ed eGPU sul MacBook Pro 2016 (15 ") in ritardo? Voglio usare la scheda grafica in macOS (con MacBook Pro 15" in ritardo) come eGPU (no dual- avvio / partizione Windows / Linux).

Nota a margine: ho visto gli utenti fare uso di eGPU su MacBook prima (Razor Core, AKiTiO Node), ma mai in combinazione con CUDA e Machine Learning (o 1080 GTX per quella materia). Le persone hanno invece suggerito di affittare lo spazio del server o di utilizzare Windows (miglior supporto della scheda grafica) o persino di costruire un nuovo PC allo stesso prezzo che ti consente di utilizzare una eGPU su Mac. (Non preferisco quell'opzione.)


CUDA sul 1080 sicuramente funziona. Stamattina stavo allenando una rete su un 1080 usando Keras con il backend TensorFlow (su Ubuntu, ma comunque).
brendon-ai,

Risposte:


19

Finalmente ho potuto installare Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Ho scritto una sintesi con la procedura, spero che sia d'aiuto

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

Ecco cosa ho fatto:

Questa configurazione ha funzionato per me, spero che sia d'aiuto

Si basa su: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

e su: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Hardware

Versioni del software

  • macOS Sierra Versione 10.12.6
  • Versione driver GPU: 10.18.5 (378.05.05.25f01)
  • Versione driver CUDA: 8.0.61
  • cuDNN v5.1 (20 gennaio 2017), per CUDA 8.0: è necessario registrarsi e scaricare
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Procedura:

Installa il driver GPU

  1. Chiudi il tuo sistema, riaccendilo premendo i tasti (⌘ e R) fino a quando non vedi this, questo ti farà entrare in modalità di recupero.
  2. Dalla barra dei menu, fai clic su Utilità> Terminale e scrivi 'csrutil disable; riavvio 'premere Invio per eseguire questo comando.
  3. Al riavvio del Mac, esegui questo comando nel Terminale:

    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. Scollega l'eGPU dal Mac e riavvia. Questo è importante se non hai scollegato la tua eGPU potresti ritrovarti con una schermata nera dopo il riavvio.

  5. Al riavvio del Mac, apri Terminal ed esegui questo comando:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Collega la tua eGPU al tuo mac tramite TH2.
    2. Riavvia il tuo Mac.

Installa CUDA, cuDNN, Tensorflow e Keras

In questo momento, Keras 2.08 necessita di tensorflow 1.0.0. Tensorflow-gpu 1.0.0 necessita di CUDA 8.0 e cuDNN v5.1 è quello che ha funzionato per me. Ho provato altre combinazioni ma non sembra funzionare

  1. Scarica e installa CUDA 8.0 CUDA Toolkit 8.0 GA2 (febbraio 2017)
  2. Installalo e segui le istruzioni
  3. Imposta le variabili env

    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
    

(Se il tuo bash_profile non esiste, crealo. Questo viene eseguito ogni volta che apri una finestra del terminale)

  1. Download e installazione di cuDNN (cudnn-8.0-osx-x64-v5.1) È necessario registrarsi prima di scaricarlo
  2. Copia i file cuDNN in CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Crea l'ambiente e installa tensorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Verifica che funzioni

Esegui il seguente script:

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. Installa Keras nell'ambiente e imposta tensorflow come 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"
    

    Produzione:

    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
    

hai bisogno di un monitor esterno per questo? Oppure no?
Abhimanyu Aryan,

@AbhimanyuAryan, non è necessario un monitor esterno. Questo è solo per usare l'eGPU con tensorlfow e / o keras
Julian

Funziona anche con Mac OS 10.13. Vedo che hanno solo CUDA 9 aggiornato per 10.13 e Cuda 8 è solo per 10.12. Sto cercando di vedere se riuscivo a ottenere questo per eseguire TuriCreate su GPU.
Niklas,

Hai confrontato le prestazioni con il PC?
Angus Tay,

Qualcuno ha provato questo con eMPU BlackMagic?
Pratik Khadloya,

9

Sono stato in grado di far funzionare una NVIDIA GTX 1080 Ti sul nodo Akitio sul mio iMac (fine 2013). Sto usando un adattatore Thunderbolt 2> 3, sebbene sui Mac più recenti sia possibile utilizzare direttamente il TB3 più veloce.

Esistono varie configurazioni eGPU descritte su eGPU.io e potresti trovarne una che descrive con precisione il tuo computer / contenitore / scheda. Questi tutorial sono principalmente per accelerare un display con una eGPU, anche se per l'addestramento di NN non è ovviamente necessario seguire tutti i passaggi.

Ecco all'incirca quello che ho fatto:

  • Installa CUDA secondo la documentazione ufficiale.
  • Disabilita SIP (Google per un tutorial). È necessario per lo script eGPU.sh e successivamente anche per TensorFlow.
  • Esegui lo script automate-eGPU.sh (con sudo) su cui tutti su eGPU.io sembrano fare affidamento.
  • Installa cuDNN. I file dal sito Web di NVIDIA dovrebbero andare sotto /usr/local/cudacon il resto delle librerie CUDA e include.
  • Disinstallare TensorFlow solo CPU e installarne uno con supporto GPU. Durante l'installazione con pip install tensorflow-gpu, non ho riscontrato errori di installazione, ma ho avuto un segfault quando ho richiesto TensorFlow in Python. Risulta che ci sono alcune variabili d'ambiente che devono essere impostate (un po 'diversamente da quanto suggerisce il programma di installazione di CUDA), che sono state descritte in un commento sul problema di GitHub .
  • Ho anche provato a compilare TensorFlow dal sorgente, che non ha funzionato prima di impostare i parametri ambientali come descritto nel passaggio precedente.

Dai menu di iStat posso verificare che la mia GPU esterna sia effettivamente utilizzata durante l'allenamento. Questa installazione di TensorFlow non ha funzionato con Jupyter, ma spero che ci sia una soluzione alternativa.

Non ho usato molto questo set-up quindi non sono sicuro dell'aumento delle prestazioni (o dei limiti della larghezza di banda), ma eGPU + TensorFlow / CUDA è certamente possibile ora, dal momento che NVIDIA ha iniziato a rilasciare driver adeguati per macOS.


Un avvertimento: da TensorFlow 1.2 in poi, non forniscono pacchetti di pip ufficiali tensorflow-gpu. Questo significa che dobbiamo costruirlo da fonti, che nella mia esperienza non funzionano mai subito. Speriamo che ci siano tutorial di terze parti su come compilare le versioni principali, ma per ora non posso ad esempio aggiornare a 1.2 o 1.3 se voglio ancora usare la mia GPU.
Mattias Arro,

3
Gestito per compilare tensorfow 1.2 dalla fonte. Ha scritto un piccolo tutorial su di esso: medium.com/@mattias.arro/…
Mattias Arro

3

Il supporto eGPU su macOS è un argomento difficile, ma farò del mio meglio per rispondere alla tua domanda.

Cominciamo con le schede grafiche! Per motivi di tempo e poiché stiamo parlando di CUDA, resteremo fedeli alle schede Nvidia. Qualsiasi scheda grafica funzionerà con i driver appropriati su Windows. Apple, tuttavia, supporta ufficialmente solo alcune schede grafiche Nvidia, principalmente vecchie. Tuttavia, i driver grafici Nvidia funzionano effettivamente su quasi tutte le schede GeForce e Quadro di Nvidia, con una grande eccezione. Le schede GTX 10xx NON FUNZIONANNO. Su qualsiasi sistema operativo Mac. Periodo. I driver di Nvidia non supportano questa scheda. Se stai cercando potenza, ti consigliamo di guardare la GTX 980Ti o Titan X (anche molte buone carte Quadro funzionerebbero bene).

Ora che l'abbiamo coperto, passiamo alle custodie eGPU. Presumo, perché hai menzionato specificamente le eGPU, che hai preventivato un vero eGPU enclosure (ad esempio, utilizziamo il nodo AKiTiO), invece di uno chassis di espansione PCIe con un alimentatore esterno, poiché questo non è una grande idea.

Quindi ora abbiamo una scheda grafica (GTX 980Ti) in un contenitore eGPU (nodo AKiTiO) e vogliamo farla funzionare. Bene, è più facile a dirsi che a farsi. Ho fatto un po 'di ricerche eGPU verso la fine del 2016 e le informazioni che ho ottenuto erano relativamente confuse, quindi se qualcuno ha commenti o correzioni, per favore fatemelo sapere. Da quello che ho capito, per sfruttare la potenza dell'eGPU, è necessario collegare un monitor esterno all'eGPU. Non credo che tu possa eseguire l'eGPU senza un monitor esterno in macOS. Inoltre, non vedrai la schermata di avvio di Apple sul monitor collegato a eGPU (a meno che non acquisti una scheda flash da MacVidCard), ma dovresti essere in grado di utilizzare l'eGPU per guidare la tua grafica.

Supponendo che tu faccia tutto questo con successo, dovresti avere un potente motore grafico abilitato per CUDA.


Grazie per l'informazione. La combinazione di 980 Ti con un contenitore eGPU sembra un'opzione praticabile. L'unica cosa è che l'Akitio Node (3) sembra sospeso e il Razor Core non viene spedito. Quale enclosure eGPU può essere effettivamente acquistata? Akitio Node 2?
Joop,

2
Bene Bizon Box è progettato per questo, ma è come $ 500. Fammi guardare un po '...
NoahL

1
Questo link potrebbe anche essere di buona lettura: appleinsider.com/articles/17/01/17/…
NoahL

La serie "10XX" non funziona davvero su Mac? Ho sentito altri (inclusa un'altra risposta qui) usato 1080ti su Mac ...
Blaszard

A partire da questa risposta, assolutamente. I driver Mac della serie 10xx non sono stati rilasciati fino a un anno intero dopo che le carte erano (qualche volta alla fine del 2017 o all'inizio del 2018, se ricordo bene)
NoahL


1

Se stai usando macOS 10.13.3, controlla questo link . Copre tutto, dalla configurazione eGPU alla compilazione TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • CUDA Toolkit: 9.1.128
  • cuDNN: 7
  • Supporto NVDAEGPUS: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: più recente
  • Python: 3.6
  • TensorFlow: 1.5.0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.