Utilisation de Keras & Tensorflow avec AMD GPU

je commence à apprendre Keras, qui je crois est une couche au-dessus de Tensorflow et Theano. Cependant, je n'ai accès qu'aux GPU AMD tels que L'AMD R9 280X.

comment configurer mon environnement Python de manière à pouvoir utiliser mon GPUs AMD via le support Keras/Tensorflow pour OpenCL?

je suis sur OSX.

45
demandé sur gobrewers14 2016-06-18 05:51:00

6 réponses

j'écris un arrière-plan OpenCL 1.2 Pour Tensorflow à https://github.com/hughperkins/tensorflow-cl

  • cible tous les périphériques OpenCL 1.2. Il n'a pas besoin D'OpenCL 2.0, pas besoin de SPIR-V, ou SPIR. N'a pas besoin Partagé de la Mémoire Virtuelle. Et ainsi de suite ...
  • il est basé sur une bibliothèque sous-jacente appelée 'cuda-sur-cl', https://github.com/hughperkins/cuda-on-cl
    • cuda-sur-cl objectifs pour être en mesure de prendre NVIDIA® CUDA™ soure-code, et compilez - le pour les appareils OpenCL 1.2. C'est un objectif général, et une très général compilateur
  • pour l'instant, les fonctionnalités suivantes sont implémentées:
  • il est développé sur Ubuntu 16.04 (à l'aide d'Intel HD5500, et des Gpu NVIDIA) et Mac Sierra (à l'aide d'Intel HD 530, et Radeon Pro 450)

ce n'est pas la seule fourche OpenCL de Tensorflow disponible. Il y a aussi une fourche développée par Codeplay https://www.codeplay.com , using Computecpp,https://www.codeplay.com/products/computesuite/computecpp leur fourche a des exigences plus fortes que la mienne, Je sais Sur quels appareils GPU il travaille. Vous aurez besoin de vérifier les notes de support de la plate-forme (au bas de la page de Hte computecpp), pour déterminer si votre périphérique est supporté. Le codeplay fourche est en fait un officiel de Google fourche, ce qui est ici: https://github.com/benoitsteiner/tensorflow-opencl

57
répondu Hugh Perkins 2017-05-14 15:13:55

la question originale sur ce post était: comment faire fonctionner Keras et Tensorflow avec un GPU AMD.

La réponse à cette question est comme suit:

1.) Keras fonctionnera si vous pouvez faire fonctionner Tensorflow correctement (optionnellement dans votre environnement virtuel/conda).

2.) Pour que Tensorflow fonctionne sur un GPU AMD, comme d'autres l'ont dit, une façon de faire serait de compiler TensorFlow pour utiliser OpenCl. Faire lire le lien ci-dessous. Mais par souci de concision, je vais résumez les étapes requises ici:

  • Vous aurez besoin de pilotes propriétaires AMDs. Ceux-ci ne sont actuellement disponibles que sur Ubuntu 14.04 (la version avant Qu'Ubuntu ne décide de changer la façon dont L'interface utilisateur est rendue). Le soutien Pour Ubuntu 16.04 est à la rédaction de ce post limité à quelques GPU à travers Amdprovers. Les lecteurs qui souhaitent approfondir leurs connaissances sur les GPU de la DMLA doivent en être conscients!

  • compiler Tensorflow avec le support OpenCl nécessite aussi vous devez obtenir et installer les prérequis suivants: en-têtes OpenCl, ComputeCpp.

  • une fois les prérequis remplis, configurez votre build. Notez qu'il existe 3 options pour compiler Tensorflow: Std Tensorflow (stable), Benoit Steiner's Tensorflow-opencl (developmental), et Luke Iwanski TensorFlow-opencl (highly experimental) que vous pouvez tirer de github. Notez également que si vous décidez de construire à partir de l'une des versions d'opencl, la question à utiliser opencl sera absent car il est supposé que vous l'utilisez. Inversement, cela signifie que si vous configurez à partir du tensorflow standard, vous devrez sélectionner "Oui" lorsque le script de configuration vous demande d'utiliser opencl et "non" pour CUDA.

  • puis lancez des tests comme ceci:

    $ bazel test -- config=sycl-k --test_timeout 1600 -- / / tensorflow/... - //tensorflow / contrib/... - //tensorflow / java/... - //tensorflow /compilateur./..

mise à jour: faire ceci sur ma configuration prend énormément de temps sur ma configuration. La partie qui prend beaucoup de temps sont tous les tests en cours. Je ne suis pas sûr de ce que cela signifie, mais beaucoup de mes tests sont timeing à 1600 secondes. La durée peut probablement être raccourcie au détriment d'un plus grand nombre d'essais. Alternativement, vous pouvez juste construire le flux tenseur sans essais. Au moment de la rédaction du présent rapport, la réalisation des tests a déjà pris deux jours.

ou tout simplement construire le pip package:

bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package

s'il vous plaît effectivement lire le billet de blog sur À Codeplay: Lukas Iwansky a posté un tutoriel complet sur la façon d'obtenir Tensorflow pour travailler avec OpenCl juste le 30 mars 2017. C'est donc un très récent post. Il y a aussi des détails sur lesquels je n'ai pas écrit ici.

comme indiqué dans les nombreux messages ci-dessus, de petits morceaux d'information sont dispersés dans les interwebs. Ce que le post de Lukas ajoute en termes de valeur, c'est que toutes les informations a été mis en place dans un endroit qui devrait faire de la mise en place de Tensforflow et OpenCl un peu moins intimidant. Je ne fournira un lien ici:

https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

une visite un peu plus complète a été postée ici:

http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/

il diffère principalement en disant explicitement l'utilisateur qu'il/elle a besoin de:

  • créer des liens symboliques vers un sous-dossier
  • et ensuite installer réellement tensorflow via "python setup.py développer" commande.

Remarque: une autre approche a été mentionné ci-dessus à l'aide de tensorflow-cl:

https://github.com/hughperkins/tensorflow-cl

je suis incapable de discerner quelle approche est la meilleure pour le moment, bien qu'il semble que cette approche soit moins active. Moins de les problèmes sont affichés, et il y a moins de conversations pour les résoudre. Il y a eu une poussée importante l'année dernière. Des pushs supplémentaires ont été supprimés depuis novembre 2016 bien que Hugh semble avoir poussé quelques mises à jour il ya quelques jours de la rédaction de ce post. (Mise à jour: si vous lisez une partie de la documentation readme, cette version de tensorflowo ne s'appuie désormais que sur le support de la communauté car le développeur principal est occupé avec la vie.)

mise à jour (2017-04-25): j'ai quelques notes basées sur des tests tensorflow-opencl ci-dessous.

  • le futur utilisateur de ce pack devrait noter que l'utilisation d'opencl signifie que tout le lourd-lifting en termes de calcul est déplacé vers le GPU. Je mentionne cela parce que je pensais personnellement que la charge de travail de calcul serait partagée entre mon CPU et iGPU. Cela signifie que la puissance de votre GPU est très importante (en particulier, bande passante, et VRAM disponible).

voici quelques chiffres pour calculer 1 époque en utilisant le Ensemble de données CIFAR10 pour ma configuration (a10-7850 avec iGPU). Votre kilométrage varie presque certainement!

  • Tensorflow (via pip install): ~ 1700 s / epoch
  • Tensorflow (w / SSE + AVX): ~ 1100 s / epoch
  • Tensorflow (w/ opencl & iGPU): ~ 5800 s / epoch

Vous pouvez voir que dans ce cas particulier la performance est pire. J'attribue cela à des facteurs suivants:

  • l'iGPU a seulement 1 Go. Cela conduit à beaucoup de copie aller-retour entre CPU et GPU. (Opencl 1.2 n'a pas encore la capacité de passer des données via des pointeurs; au lieu de cela, les données doivent être copiées de part et d'autre.)
  • l'iGPU ne dispose que de 512 processeurs de flux (et d'une bande passante mémoire de 32 Go/s) qui, dans ce cas, est plus lent que 4 Processeurs utilisant des jeux D'instructions SSE4 + AVX.
  • le développement de tensorflow-opencl en est à ses débuts, et beaucoup d'optimisations en SYCL etc. n'ont pas été fait encore.

si vous utilisez un GPU AMD avec plus de VRAM et plus de processeurs stream, vous êtes certain d'obtenir de bien meilleurs nombres de performance. Je serais intéressé de lire quels chiffres les gens atteignent pour savoir ce qui est possible.

je maintiendrai cette réponse si / quand les mises à jour sont repoussées.

3.) Une solution de rechange est actuellement suggérée, à savoir l'utilisation de L'initiative RocM de L'AMD et de la bibliothèque miOpen (cuDNN equivalent). Ces sont/seront bibliothèques open-source qui permettent l'apprentissage profond. La mise en garde est que le support RocM n'existe actuellement que pour Linux, et que miOpen n'a pas encore été libéré dans la nature, mais Raja (AMD GPU head) a dit dans un AMA qu'en utilisant ce qui précède, il devrait être possible de faire un apprentissage profond sur les GPU de DMLA. En fait, un soutien est prévu non seulement pour Tensorflow, mais aussi Cafe2, Cafe, Torch7 et MxNet.

28
répondu Thornhale 2017-05-19 21:02:03

C'est une vieille question, mais depuis que j'ai passé les dernières semaines à essayer de comprendre sur mon propre:

  1. prise en charge OpenCL pour Théano est le succès et l'échec. ils ont ajouté un back-end libgpuarray qui semble toujours être bogué (i.e., le processus tourne sur le GPU mais la réponse est fausse--comme une précision de 8% sur MNIST pour un modèle DL qui obtient une précision de ~95+% sur CPU ou nVidia CUDA). Aussi parce que ~50-80% de l'augmentation de performance sur la pile nVidia vient du CUDNN les bibliothèques maintenant, OpenCL sera juste laissé dans la poussière. (VOIR CI-DESSOUS!):)
  2. ROCM semble être très cool, mais la documentation (et même une déclaration claire de ce QU'est ROCM/ce qu'il fait) est difficile à comprendre. ils font de leur mieux, mais ils ont plus de 4 ans de retard. Il ne fonctionne pas sur un RX550 (en date de cette écriture). Alors ne perdez pas votre temps (c'est ici que l'une des semaines est allée :) ). Dans un premier temps, il apparaît que le ROCM est un nouvel ajout au poste de pilotage (remplaçant AMDGPU-Pro), mais c'est en fait un module du noyau et un ensemble de bibliothèques qui remplacent essentiellement AMDGPU-Pro. (Pensez à cela comme l'équivalent de NVIDIA-381 driver + CUDA certaines bibliothèques en quelque sorte). https://rocm.github.io/dl.html (honnêtement, je n'ai pas encore testé la performance ou essayé de la faire fonctionner avec des pilotes Mesa plus récents. Je vais le faire de temps en temps.
  3. ajouter MiOpen à ROCM, et c'est essentiellement CUDNN. Ils ont aussi quelques des guides assez clairs pour la migration. Mais mieux encore.
  4. ils ont créé " HIP " qui est un traducteur automatique de CUDA/CUDNN à MiOpen. il semble que cela fonctionne assez bien car ils aligné L'API directement pour être traduisible. Il ya des concepts qui ne sont pas des cartes parfaites, mais en général, il semble bon.

Maintenant, enfin, après 3-4 semaines d'essayer de comprendre OpenCL, etc, j'ai trouvé ce tutoriel pour vous aider à démarrer rapidement. C'est une étape-par-étape pour obtenir hipCaffe et en cours d'exécution. Contrairement à nVidia, veuillez vous assurer d'avoir le matériel pris en charge!!!! https://rocm.github.io/hardware.html. Vous pensez que vous pouvez le faire fonctionner sans leur matériel pris en charge? Bonne chance. Vous avez été prévenu. Une fois que le ROCM sera opérationnel (et que vous aurez effectué les tests de vérification), Voici le tutoriel hipCaffe--si vous avez réussi le ROCM, vous ferez un test de validation MNIST dans les 10 minutes--Super! https://rocm.github.io/ROCmHipCaffeQuickstart.html

5
répondu Selly 2017-08-31 06:17:13

Théano soutien à OpenCL mais il n'en est qu'à ses débuts. Theano lui-même n'est pas intéressé par OpenCL et s'appuie sur le soutien de la communauté.

Plus des opérations sont déjà mises en œuvre et il s'agit principalement d'ajuster et d'optimiser les opérations données.

pour utiliser le backend OpenCL vous devez construire