Apprentissage automatique sur GPU externe avec CUDA et fin MBP 2016?

31

Je voudrais savoir quelles sont les options de GPU externe (eGPU) pour macOS en 2017 avec le MacBook Pro fin 2016.

J'ai fait mes recherches, mais sur Internet, je trouve beaucoup d'informations déroutantes. Certains disent que cela peut fonctionner, mais cela nécessite Windows (double démarrage). D'autres disent que cela ne peut fonctionner que pour les anciennes cartes graphiques car CUDA n'est pas pris en charge pour les nouvelles cartes graphiques (GTX 1080). Idéalement, je voudrais exécuter la 1080 GTX de NVIDIA. Mon seul but est d'utiliser Keras et TensorFlow avec lui. Cependant, je ne connais pas toutes les choses importantes pour le faire fonctionner. Ma question est donc la suivante: est-il possible d'utiliser TensorFlow avec CUDA et eGPU sur le dernier MacBook Pro 2016 (15 ")? Je souhaite utiliser la carte graphique sous macOS (avec le dernier MacBook Pro 15") comme eGPU (pas de double partition de démarrage / Windows / Linux).

Note latérale: j'ai déjà vu des utilisateurs utiliser des eGPU sur des macbook (Razor Core, AKiTiO Node), mais jamais en combinaison avec CUDA et Machine Learning (ou 1080 GTX d'ailleurs). Les gens ont suggéré de louer de l'espace serveur à la place, ou d'utiliser Windows (meilleure prise en charge de la carte graphique) ou même de construire un nouveau PC pour le même prix qui vous permet d'utiliser un eGPU sur Mac. (Je ne préfère pas cette option.)

Joop
la source
CUDA sur le 1080 fonctionne très certainement. J'entraînais un réseau sur un 1080 plus tôt ce matin en utilisant Keras avec le backend TensorFlow (sur Ubuntu, mais quand même).
brendon-ai

Réponses:

19

J'ai enfin pu installer Nvidia Titan XP + MacBook Pro + Akitio Node + Tensorflow + Keras

J'ai écrit un résumé de la procédure, j'espère que cela aide

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

Voici ce que j'ai fait:

Cette configuration a fonctionné pour moi, j'espère que cela aide

Il est basé sur: https://becominghuman.ai/deep-learning-gaming-build-with-nvidia-titan-xp-and-macbook-pro-with-thunderbolt2-5ceee7167f8b

et sur: https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support

Matériel

Versions du logiciel

  • macOS Sierra version 10.12.6
  • Version du pilote GPU: 10.18.5 (378.05.05.25f01)
  • Version du pilote CUDA: 8.0.61
  • cuDNN v5.1 (20 janvier 2017), pour CUDA 8.0: besoin de s'inscrire et de télécharger
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8

Procédure:

Installer le pilote GPU

  1. Arrêtez votre système, rallumez-le en appuyant sur les touches (⌘ et R) jusqu'à ce que vous voyiez , cela vous permettra de passer en mode de récupération.
  2. Dans la barre de menus, cliquez sur Utilitaires> Terminal et écrivez «csrutil disable; reboot ', appuyez sur Entrée pour exécuter cette commande.
  3. Lorsque votre mac a redémarré, exécutez cette commande dans le terminal:

    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. Débranchez votre eGPU de votre Mac et redémarrez. Ceci est important si vous n'avez pas débranché votre eGPU, vous pouvez vous retrouver avec un écran noir après le redémarrage.

  5. Lorsque votre Mac a redémarré, ouvrez Terminal et exécutez cette commande:

    sudo ~/Desktop/automate-eGPU/./automate-eGPU.sh -a
    
    1. Branchez votre eGPU à votre Mac via TH2.
    2. Redémarrez votre Mac.

Installer CUDA, cuDNN, Tensorflow et Keras

En ce moment, Keras 2.08 a besoin de tensorflow 1.0.0. Tensorflow-gpu 1.0.0 a besoin de CUDA 8.0 et cuDNN v5.1 est celui qui a fonctionné pour moi. J'ai essayé d'autres combinaisons mais ne semble pas fonctionner

  1. Téléchargez et installez CUDA 8.0 CUDA Toolkit 8.0 GA2 (février 2017)
  2. Installez-le et suivez les instructions
  3. Définir les variables 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
    

(Si votre bash_profile n'existe pas, créez-le. Ceci est exécuté chaque fois que vous ouvrez une fenêtre de terminal)

  1. Téléchargement et installation de cuDNN (cudnn-8.0-osx-x64-v5.1) Vous devez vous inscrire avant de le télécharger
  2. Copiez les fichiers cuDNN sur CUDA

    cd ~/Downloads/cuda
    sudo cp include/* /usr/local/cuda/include/
    sudo cp lib/* /usr/local/cuda/lib/
    
  3. Créer un environnement et installer tensorflow

    conda create -n egpu python=3
    source activate egpu
    pip install tensorflow-gpu==1.0.0
    
  4. Vérifiez que cela fonctionne

Exécutez le script suivant:

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. Installez Keras dans l'environnement et définissez tensorflow comme 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"
    

    Sortie:

    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
    
julien
la source
avez-vous besoin d'un moniteur externe pour cela? Ou non?
Abhimanyu Aryan
@AbhimanyuAryan, il n'y a pas besoin de moniteur externe. C'est juste pour utiliser l'eGPU avec tensorlfow et / ou keras
Julian
Cela fonctionne-t-il également avec Mac OS 10.13. Je vois qu'ils n'ont que CUDA 9 mis à jour pour 10.13, et Cuda 8 n'est que pour 10.12. J'essaie de voir si je pourrais obtenir ceci pour exécuter TuriCreate sur GPU.
Niklas
Avez-vous comparé les performances avec le PC?
Angus Tay
Quelqu'un a essayé cela avec BlackMagic eGPU?
Pratik Khadloya
9

J'ai pu faire fonctionner une NVIDIA GTX 1080 Ti sur le nœud Akitio sur mon iMac (fin 2013). J'utilise un adaptateur Thunderbolt 2> 3, mais sur les nouveaux Mac, vous pouvez utiliser directement le TB3 plus rapide.

Il existe différentes configurations d'eGPU décrites sur eGPU.io, et vous pouvez en trouver une qui décrit précisément votre ordinateur / boîtier / carte. Ces didacticiels sont principalement destinés à accélérer l'affichage avec un eGPU, mais pour la formation des NN, vous n'avez évidemment pas besoin de suivre toutes les étapes.

Voici à peu près ce que j'ai fait:

  • Installez CUDA conformément à la documentation officielle.
  • Désactivez SIP (Google pour un didacticiel). Il est nécessaire au script eGPU.sh et plus tard également à TensorFlow.
  • Exécutez le script automate-eGPU.sh (avec sudo) sur lequel tout le monde sur eGPU.io semble s'appuyer.
  • Installez cuDNN. Les fichiers du site Web de NVIDIA devraient aller /usr/local/cudaavec le reste de vos bibliothèques CUDA et comprend.
  • Désinstallez TensorFlow uniquement sur CPU et installez-en un avec prise en charge GPU. Lors de l'installation avec pip install tensorflow-gpu, je n'ai eu aucune erreur d'installation, mais j'ai eu un défaut de configuration lors de la demande de TensorFlow en Python. Il s'avère que certaines variables d'environnement doivent être définies (un peu différemment que le programme d'installation de CUDA suggère), qui ont été décrites dans un commentaire de problème GitHub .
  • J'ai également essayé de compiler TensorFlow à partir de la source, ce qui n'a pas fonctionné avant de définir les vars env comme décrit à l'étape précédente.

À partir des menus iStat, je peux vérifier que mon GPU externe est bien utilisé pendant la formation. Cette installation TensorFlow n'a pas fonctionné avec Jupyter, cependant, mais j'espère qu'il existe une solution pour cela.

Je n'ai pas beaucoup utilisé cette configuration, donc je ne suis pas sûr de l'augmentation des performances (ou des limitations de la bande passante), mais eGPU + TensorFlow / CUDA est certainement possible maintenant, car NVIDIA a commencé à publier des pilotes appropriés pour macOS.

Mattias Arro
la source
Un mot d'avertissement: à partir de TensorFlow 1.2, ils ne fournissent pas de packages pip tensorflow-gpu officiels. Cela signifie que nous devons le construire à partir de sources qui, selon mon expérience, ne fonctionnent jamais tout de suite. J'espère qu'il y aura des tutoriels tiers sur la façon de compiler les versions majeures, mais pour l'instant je ne peux pas par exemple passer à 1.2 ou 1.3 si je veux toujours utiliser mon GPU.
Mattias Arro
3
Géré pour compiler tensorfow 1.2 à partir de la source. A écrit un petit tutoriel dessus: medium.com/@mattias.arro/…
Mattias Arro
3

Le support eGPU sur macOS est un sujet difficile, mais je ferai de mon mieux pour répondre à votre question.

Commençons par les cartes graphiques! Pour gagner du temps, et parce que nous parlons de CUDA, nous nous en tiendrons aux cartes Nvidia. Toute carte graphique fonctionnera avec les pilotes appropriés sous Windows. Apple, cependant, ne prend officiellement en charge que quelques cartes graphiques Nvidia, principalement des cartes très anciennes. Cependant, les pilotes graphiques Nvidia fonctionnent en fait sur presque toutes les cartes GeForce et Quadro de Nvidia, à une grande exception près. Les cartes GTX 10xx NE FONCTIONNENT PAS. Sur n'importe quel système d'exploitation Mac. Période. Les pilotes de Nvidia ne prennent pas en charge cette carte. Si vous recherchez de la puissance, vous voudrez peut-être regarder la GTX 980Ti ou Titan X (de nombreuses bonnes cartes Quadro fonctionneraient également bien).

Maintenant que nous avons couvert cela, passons aux boîtiers eGPU. Je vais supposer, parce que vous avez mentionné spécifiquement les eGPU, que vous avez prévu un véritable boîtier eGPU (utilisons le nœud AKiTiO comme exemple), au lieu d'un châssis d'extension PCIe avec une alimentation externe, car ce n'est pas une bonne idée.

Nous avons donc maintenant une carte graphique (GTX 980Ti) dans un boîtier eGPU (AKiTiO Node) et nous voulons la faire fonctionner. Eh bien, c'est plus facile à dire qu'à faire. J'ai fait un peu de recherche sur l'eGPU vers la fin de 2016, et les informations que j'ai obtenues étaient relativement confuses, donc si quelqu'un a des commentaires ou des corrections, faites-le moi savoir. D'après ce que je comprends, pour utiliser la puissance de l'eGPU, vous devez brancher un moniteur externe sur l'eGPU. Je ne pense pas que vous puissiez exécuter l'eGPU sans moniteur externe sous macOS. Vous ne verrez pas non plus l'écran de démarrage d'Apple sur le moniteur connecté à l'eGPU (à moins que vous n'achetiez une carte flashée de MacVidCards), mais vous devriez alors pouvoir utiliser l'eGPU pour piloter vos graphiques.

En supposant que vous réussissiez tout cela, vous devriez avoir une centrale graphique compatible CUDA de très haute puissance.

NoahL
la source
Merci pour l'information. La combinaison du 980 Ti avec un boîtier eGPU semble être une option viable. La seule chose est que le nœud Akitio (3) semble abandonné et que le Razor Core n'est pas expédié. Quel boîtier eGPU peut être acheté? Akitio Node 2?
Joop
2
Eh bien, Bizon Box est conçu pour cela, mais c'est comme 500 $. Laissez-moi faire quelques recherches ...
NoahL
1
Ce lien pourrait aussi faire une bonne lecture: appleinsider.com/articles/17/01/17/…
NoahL
La série "10XX" ne fonctionne-t-elle pas vraiment sur mac? J'ai entendu d'autres personnes (y compris une autre réponse ici) utiliser 1080ti sur mac ...
Blaszard
À partir de cette réponse, absolument. Les pilotes Mac de la série 10xx n'ont pas été publiés avant un an après la sortie des cartes (fin 2017 ou début 2018, si je me souviens bien)
NoahL
1

Si vous utilisez macOS 10.13.3, vérifiez ce lien . Il couvre tout, de la configuration de l'eGPU à la compilation de TensorFlow.

  • macOS: 10.13.3
  • WebDriver: 387.10.10.10.25.156
  • Boîte à outils CUDA: 9.1.128
  • cuDNN: 7
  • NVDAEGPUSupport: 6
  • XCode: 8.2
  • Bazel: 0.9.0
  • OpenMP: dernier
  • Python: 3,6
  • TensorFlow: 1.5.0
GeekCui
la source