Machine Learning su GPU esterna con CUDA e fine MBP 2016?

29

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

Ho fatto la mia ricerca, tuttavia su internet trovo molte informazioni confuse. Alcuni dicono che può funzionare, ma richiede Windows (dual-boot). Altri dicono che può funzionare solo con le vecchie schede grafiche, in quanto CUDA non è supportato per le nuove schede grafiche (GTX 1080). Idealmente, mi piacerebbe 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 recente MacBook Pro 2016 (15 ")? Voglio usare la scheda grafica in macOS (con MacBook Pro 15") come eGPU (non dual- boot / partizione Windows / Linux).

Nota a margine: ho visto utenti che facevano uso di eGPU su macbook precedenti (Razor Core, AKiTiO Node), ma mai in combinazione con CUDA e Machine Learning (o con la 1080 GTX). Le persone hanno suggerito di affittare lo spazio del server, o di usare Windows (un migliore supporto per la scheda grafica) o anche di costruire un nuovo PC allo stesso prezzo che ti permette di usare una eGPU su Mac. (Non preferisco questa opzione.)

    
posta Joop 24.03.2017 - 17:03
fonte

5 risposte

18

Potrei finalmente installare Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

Ho scritto un sommario con la procedura, spero che aiuti

link

Ecco cosa ho fatto:

Questa configurazione ha funzionato per me, spero che aiuti

È basato su: link

e su: link

Hardware

Versioni software

  • macOS Sierra versione 10.12.6
  • Versione del driver GPU: 10.18.5 (378.05.05.25f01)
  • Versione del 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) finché non vedi , questo ti consentirà di accedere alla modalità di recupero.
  2. Dalla barra dei menu fai clic su Utilità > Terminale e scrivi 'csrutil disable; riavvio 'premi invio per eseguire questo comando.
  3. Quando il tuo Mac è riavviato, esegui questo comando in 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 la tua eGPU dal tuo Mac e riavvia. Questo è importante se non hai scollegato la tua eGPU potresti finire con lo schermo nero dopo il riavvio.

  5. Al riavvio del Mac, apri Terminale 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 ha bisogno di tensorflow 1.0.0. Tensorflow-gpu 1.0.0 ha bisogno 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 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 bash_profile non esiste, crealo. Viene eseguito ogni volta che apri una finestra di 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 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"
    

    Output:

    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
    
risposta data 03.10.2017 - 21:41
fonte
9

Sono riuscito a ottenere una NVIDIA GTX 1080 Ti che funziona sul nodo Akitio sul mio iMac (fine 2013). Sto usando un Thunderbolt 2 > 3 adattatore, anche se sui nuovi Mac è possibile utilizzare direttamente la TB3 più veloce.

Sono disponibili varie impostazioni eGPU descritte in eGPU.io, e potresti trovarne uno che descrive precisamente il tuo computer / armadio / scheda. Queste esercitazioni sono principalmente per accelerare una visualizzazione con una eGPU, anche se per gli NN di allenamento non è necessario seguire tutti i passaggi.

Ecco approssimativamente cosa ho fatto:

  • Installa CUDA in base alla documentazione ufficiale.
  • Disabilita SIP (Google per un tutorial). È necessario dallo script eGPU.sh e successivamente anche da TensorFlow.
  • Esegui lo script automate-eGPU.sh (con sudo) che tutti su eGPU.io sembra fare affidamento.
  • Installa cuDNN. I file dal sito Web di NVIDIA dovrebbero andare sotto /usr/local/cuda con il resto delle tue librerie CUDA e include.
  • Disinstalla TensorFlow solo per CPU e installane uno con supporto GPU. Quando si installa con pip install tensorflow-gpu , non ho avuto errori di installazione, ma ho ottenuto un segfault quando ho richiesto TensorFlow in Python. Risulta che ci sono alcune variabili d'ambiente che devono essere impostate (un po 'diverso da come suggerisce l'installatore CUDA), che sono state descritte in un Commento sul problema GitHub .
  • Ho provato anche a compilare TensorFlow dal sorgente, che non ha funzionato prima di impostare env vars 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 però non ha funzionato con Jupyter, ma spero che ci sia una soluzione per questo.

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

    
risposta data 17.05.2017 - 12:47
fonte
4

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

Iniziamo con le schede grafiche! Per il tempo e perché stiamo parlando di CUDA, continueremo con le schede Nvidia. Qualsiasi scheda grafica funzionerà con i driver corretti su Windows. Apple, tuttavia, supporta solo ufficialmente alcune schede grafiche Nvidia, principalmente molto vecchie. Tuttavia, i driver grafici Nvidia funzionano davvero su quasi tutte le schede GeForce e Quadro di Nvidia, con una grande eccezione. Le schede GTX 10xx NON FUNZIONERANNO. Su qualsiasi sistema operativo Mac. Periodo. I driver di Nvidia non supportano questa scheda. Se sei alla ricerca di potenza, ti consigliamo di guardare la GTX 980Ti o la Titan X (molte buone carte Quadro funzionano anche bene).

Ora che abbiamo capito, passiamo alle enclosure eGPU. Immaginerò, perché hai menzionato specificamente eGPU, che hai preventivato un vero eGPU enclosure (usiamo il nodo AKiTiO come esempio), 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 allegato eGPU (nodo AKiTiO) e vogliamo farlo funzionare. Bene, è più facile a dirsi che a farsi. Ho fatto un po 'di ricerche su 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 utilizzare la potenza della eGPU, è necessario collegare un monitor esterno alla eGPU. Non credo che tu possa eseguire l'eGPU senza un monitor esterno in macOS. Non vedrai la schermata di avvio di Apple sul monitor collegato a eGPU (a meno che non acquisti una scheda flashed da MacVidCards), 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 con CUDA abilitato.

    
risposta data 25.03.2017 - 07:46
fonte
1

Se si utilizza macOS 10.13.3, controllare questo link . Copre qualsiasi cosa, dalla configurazione di eGPU alla compilazione di TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • CUDA Toolkit: 9.1.128
  • cuDNN: 7
  • NVDAEGPupporto: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: ultimo
  • Python: 3.6
  • TensorFlow: 1.5.0
risposta data 11.02.2018 - 08:52
fonte
1

L'ho fatto di recente con OSX 10.13.6 per pytorch e fastai. Vedi il mio esempio qui: link

    
risposta data 11.10.2018 - 22:36
fonte

Leggi altre domande sui tag