91 votes

Utilisation de Keras & Tensorflow avec le processeur graphique AMD

Je commence à apprendre Keras, qui je crois est un calque au-dessus de Tensorflow et Theano. Cependant, je n’ai accès à AMD GPU comme le R9 AMD 280 X.

Comment puis-je configurer mon environnement Python telle que je peux faire usage de mon GPU AMD grâce à l’appui de Keras/Tensorflow pour OpenCL ?

Je suis en cours d’exécution sur OSX.

69voto

Hugh Perkins Points 1050

Je suis en train d'écrire un OpenCL 1.2 backend pour Tensorflow à https://github.com/hughperkins/tensorflow-cl

Cette fourche de tensorflow pour OpenCL a les caractéristiques suivantes:

  • il cible tous les OpenCL 1.2 périphériques. Il n'a pas besoin de OpenCL 2.0, n'a 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 toute la technologie NVIDIA® CUDA™ soure-code, et de le compiler pour OpenCL 1.2 périphériques. C'est un objectif général, et une très général compilateur
  • pour l'instant, les fonctionnalités suivantes sont mises en œuvre:
  • 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 le seul OpenCL fourche de Tensorflow disponibles. Il y a aussi une fourche développé par Codeplay https://www.codeplay.com , à l'aide de Computecpp, https://www.codeplay.com/products/computesuite/computecpp Leur fourche est plus forte que ma propre, autant que je sache, dans le cadre de laquelle spécifiques GPU appareils. Vous auriez besoin de vérifier le Support de Plate-forme de Notes (en bas de la hte computecpp page), afin de déterminer si votre appareil est pris en charge. Le codeplay fourche est en fait un officiel de Google fourche, ce qui est ici: https://github.com/benoitsteiner/tensorflow-opencl

40voto

Thornhale Points 1181

La question d'origine sur ce post était: Comment obtenir de Keras et Tensorflow à exécuter avec un AMD GPU.

La réponse à cette question est comme suit:

1.) Keras de travailler si vous pouvez faire Tensorflow de fonctionner correctement (éventuellement au sein de votre virtuel/conda de l'environnement).

2.) Pour obtenir Tensorflow de travailler sur un AMD GPU, comme d'autres l'ont dit, cela pourrait fonctionner est de compiler Tensorflow à utiliser OpenCl. Faire lire le lien ci-dessous. Mais par souci de concision, je vais résumer les étapes nécessaires ici:

  • Vous aurez besoin d'Amd pilotes propriétaires. Ceux-ci sont actuellement disponibles uniquement sur Ubuntu 14.04 (la version avant d'Ubuntu a décidé de changer la façon dont l'INTERFACE utilisateur est rendu). Support pour Ubuntu 16.04 est à l'écriture de ce post limitée à quelques Gpu par AMDProDrivers. Les lecteurs qui veulent faire un apprentissage en profondeur sur les Gpu AMD doit être conscient de cela!

  • La compilation Tensorflow avec prise en charge OpenCl implique également d'obtenir et d'installer les pré-requis suivants: OpenCl en-têtes, ComputeCpp.

  • Après les conditions requises sont remplies, configurer votre build. Notez qu'il existe 3 options pour la compilation Tensorflow: Std Tensorflow (stable), Benoits Steiner Tensorflow-opencl (de développement), et Luc Iwanski de Tensorflow-opencl (très expérimental) dont vous pouvez tirer à partir de github. Notez également que si vous décidez de construire à partir de la prise en charge d'opencl versions, la question d'utiliser opencl sera absent car il est supposé que vous l'utilisez. A l'inverse, cela signifie que si vous configurez de la norme tensorflow, vous devrez sélectionner "Oui" lorsque le script de configuration vous demande d'utiliser opencl et "NON" pour CUDA.

  • Ensuite, exécutez les tests de la sorte:

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

Mise à jour: le Faire sur mon installation prend excessivement long sur mon installation. La partie qui prend du temps sont tous les tests en cours d'exécution. 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 de plus de tests timeing. Alternativement, vous pouvez simplement construire le tenseur de flux sans tests. Au moment d'écrire ces lignes, l'exécution des tests a pris 2 jours déjà.

Ou tout simplement construire le pip paquet comme suit:

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

S'il vous plaît réellement lire le billet de blog de plus à Codeplay: Lukas Iwansky posté un didacticiel complet post sur la façon d'obtenir Tensorflow de travailler avec OpenCl seulement le 30 Mars 2017. C'est donc un très récent post. Il y a aussi quelques détails que je n'ai pas écrit ici.

Comme indiqué dans les nombreux posts ci-dessus, des bribes d'informations se propagent à travers les interwebs. Ce que Lukas' post ajoute en termes de valeur, c'est que tous les renseignements ont été mis ensemble dans un endroit qui devrait faire la mise en place Tensforflow et OpenCl, un peu moins impressionnant. Je ne fournira un lien ici:

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

Un peu plus complète de plain-pied a été posté ici:

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

Il en diffère principalement par l'inclusion explicite indiquant à l'utilisateur qu'il/elle doit:

  • créer des liens symboliques vers un sous-dossier
  • et puis d'installer tensorflow via "python setup.py développer de la 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 l'approche la mieux à ce moment s'il apparaît que cette approche est de moins en moins actif. De moins en moins de questions sont affichés, et de moins en moins de conversations pour résoudre ces problèmes sont en train d'arriver. Il y a une pression importante de l'année dernière. Supplémentaires pousse ont diminué depuis novembre 2016, bien que Hugh semble avoir poussé quelques mises à jour il y a quelques jours au moment de la rédaction de ce post. (Mise à jour: Si vous lisez certains de la documentation readme, cette version de tensorflowo maintenant ne repose que sur le soutien de la communauté que le développeur principal est occupé avec la vie).

Mise à JOUR (2017-04-25): j'ai quelques notes basé sur des tests tensorflow-opencl-dessous.

  • Le futur utilisateur de ce package doit noter que l'utilisation d'opencl signifie que toutes les lourds de levage en termes de calcul est décalée vers le GPU. Je mentionne cela parce que j'ai été, personnellement, en pensant que l'calculer la charge de travail sera partagé entre mon CPU et l'iGPU. Cela signifie que la puissance de votre GPU est très important (plus précisément, de la bande passante, et disponible de mémoire vidéo (VRAM).

Voici quelques chiffres pour le calcul de 1 époque à l'aide de la CIFAR10 ensemble de données pour MA CONFIGURATION (A10-7850 avec l'iGPU). Votre kilométrage sera presque certainement varier!

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

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

  • La mère n'a que 1GO. Cela conduit à beaucoup de copie et-vient entre le CPU et le GPU. (Opencl 1.2 n'ont pas la capacité de données de passer par des pointeurs encore; au lieu de cela, les données doivent être copiées d'avant en arrière.)
  • La mère n'a que 512 processeurs de flux (et 32 Go/s de bande passante mémoire) qui dans ce cas est plus lent que 4 Processeurs à l'aide de SSE4 + AVX jeux d'instructions.
  • Le développement de tensorflow-opencl est dans les premiers stades, et beaucoup d'optimisations dans SYCL etc. n'ont pas encore été fait.

Si vous utilisez un AMD GPU avec plus de RAM et plus de processeurs de flux, vous êtes certain d'obtenir de bien meilleurs chiffres de la performance. Je serais intéressé de lire ce que nombre de personnes sont atteinte de savoir ce qui est possible.

Je vais continuer à maintenir cette réponse si/lorsque des mises à jour et poussés.

3.) Une alternative est actuellement en cours d'allusion à ce qui est à l'aide d'AMD RocM initiative, et miOpen (cuDNN équivalent) de la bibliothèque. Ces sont/seront les bibliothèques open source qui permettent l'apprentissage en profondeur. Le problème, c'est que RocM à l'heure actuelle n'existe que pour Linux, et que miOpen n'a pas été relâchés dans la nature, mais Raja (AMD GPU de la tête) a dit dans un AMA que l'utilisation de la ci-dessus, il devrait être possible de faire l'apprentissage en profondeur sur les Gpu AMD. En effet, il est prévu un soutien non seulement Tensorflow, mais aussi Cafe2, Café, Torch7 et MxNet.

7voto

Selly Points 151

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é une libgpuarray back-end qui semble toujours être bogué (c'est à dire, le processus s'exécute sur le GPU, mais la réponse est fausse--8% de précision sur MNIST pour un DL modèle qui obtient ~95+% de précision sur le CPU ou nVidia CUDA). Aussi parce que ~50% à 80% de l'augmentation des performances sur la nVidia pile vient de la CUDNN les bibliothèques, OpenCL va juste être 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 que ROCM est/ce qu'il fait) est difficile à comprendre. Ils font de leur mieux, mais ils sont 4+ ans de retard. Il ne PAS ne PAS fonctionner sur un RX550 (de cette écriture). Alors ne perdez pas votre temps (c'est là que 1 de l'semaines ont passé :) ). Au premier abord, il semble ROCM est un nouvel ajout à l'ensemble des pilotes (en remplacement de AMDGPU-Pro, ou en l'augmentant), mais il est en fait un module du noyau et un ensemble de bibliothèques que l'essentiel de remplacer AMDGPU-Pro. (Penser à cela comme l'équivalent de Nvidia-381 pilote + CUDA certaines bibliothèques genre de). https://rocm.github.io/dl.html (Honnêtement, je n'ai pas encore testé les performances ou essayé de le faire fonctionner avec les plus récentes Mesa pilotes encore. Je vais le faire de temps en temps.
  3. Ajouter MiOpen à ROCM, et qui est essentiellement CUDNN. Ils ont aussi quelques très clair guides de migration. Mais mieux encore.
  4. Ils ont créé un "HIP" qui est un automagical traducteur de CUDA/CUDNN à MiOpen. Il semble fonctionner assez bien, car ils doublée de l'API est directement traduisible. Il y a des concepts qui ne sont pas parfaites cartes, 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 si, veuillez vous assurer d'avoir le matériel pris en charge!!!! https://rocm.github.io/hardware.html. Pensez que vous pouvez le faire fonctionner sans leur matériel pris en charge? Bonne chance. Vous avez été prévenu. Une fois que vous avez ROCM et en cours d'exécution (ET d'EXÉCUTER LES TESTS de VÉRIFICATION), voici le hipCaffe tutoriel--si vous avez ROCM, vous allez faire un MNIST des essais de validation dans un délai de 10 minutes-doux! https://rocm.github.io/ROCmHipCaffeQuickstart.html

5voto

nemo Points 13983

Théano n'ont de prise en charge d'OpenCL, mais il en est encore à ses premiers stades. Théano lui-même n'est pas intéressé par OpenCL, et s'appuie sur le soutien de la communauté.

La plupart des opérations sont déjà en place et c'est surtout une question de réglage et d'optimiser les opérations.

Utilisation de l'OpenCL backend, vous avez à construire libgpuarray vous-même.

Par expérience personnelle, je peux vous dire que vous obtiendrez des performances de l'UC si vous avez de la chance. L'allocation de mémoire semble être très naïvement mis en œuvre (par conséquent, le calcul sera lent) et va se planter quand il est à court de mémoire. Mais je vous encourage à l'essayer et peut-être même d'optimiser le code ou à l'aide de rapports de bugs.

3voto

Si vous avez accès à d'autres AMD gpu veuillez voir ici: https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs

Cela devrait vous aider à aller dans la bonne direction pour tensorflow sur le ROCm plate-forme, mais Selly de post à ce sujet https://rocm.github.io/hardware.html est le problème avec cette route. Cette page liste n'est pas exhaustive, j'ai trouvé sur mon propre que le Xeon E5 v2 Ivy Bridge fonctionne très bien avec ROCm même si elles liste v3 ou plus récent, les cartes graphiques sont cependant un peu plus pointilleux. gfx8 ou plus récent, à quelques exceptions près, polaris et peut-être d'autres que le temps passe.

Mise à JOUR - Il ressemble à hiptensorflow a une option pour la prise en charge opencl pendant la configuration. Je dirais étudier le lien, même si vous n'avez pas gfx8+ ou polaris gpu si l'opencl travaux de mise en œuvre. C'est un processus de longue haleine, mais une heure ou trois (selon le matériel) à la suite d'un bien écrit, l'instruction n'est pas trop à perdre pour le savoir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X