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.