Tensorflow: Miracles 3.0 ?

Créé le 9 nov. 2015  ·  101Commentaires  ·  Source: tensorflow/tensorflow

Est-il prévu de prendre en charge la capacité de calcul Cuda 3.0 ?

Commentaire le plus utile

En ce qui concerne la construction pour l'appareil Cuda 3.0, si vous synchronisez le dernier code TensorFlow, vous pouvez effectuer les opérations suivantes. La documentation officielle sera bientôt mise à jour. Mais voilà à quoi ça ressemble :

$ TF_UNOFFICIAL_SETTING=1 ./configure

... Identique aux paramètres officiels ci-dessus

AVERTISSEMENT : Vous configurez des paramètres non officiels dans TensorFlow. Parce que certains
les bibliothèques externes ne sont pas rétrocompatibles, ces paramètres sont en grande partie
non testé et non pris en charge.

Veuillez spécifier une liste de capacités de calcul Cuda séparées par des virgules que vous souhaitez
construire avec. Vous pouvez trouver la capacité de calcul de votre appareil sur :
https://developer.nvidia.com/cuda-gpus.
Veuillez noter que chaque capacité de calcul supplémentaire augmente considérablement
votre temps de construction et votre taille binaire. [La valeur par défaut est : "3.5,5.2"] : 3.0

La configuration de Cuda inclut
Configuration de Cuda lib64
Configuration de la corbeille Cuda
Configuration de Cuda nvvm
Configuration terminée

Tous les 101 commentaires

Officiellement, les capacités de calcul Cuda 3.5 et 5.2 sont prises en charge. Vous pouvez essayer d'activer d'autres fonctionnalités de calcul en modifiant le script de compilation :

https://github.com/tensorflow/tensorflow/blob/master/third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc#L236

Merci! Je vais essayer et rapporter ici.

Ce n'est pas encore officiellement pris en charge. Mais si vous souhaitez activer Cuda 3.0 localement, voici les endroits supplémentaires à modifier :

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L610
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/common_runtime/gpu/gpu_device.cc#L629
Où le plus petit périphérique GPU est ignoré.

Le support officiel prendra éventuellement une forme différente, où nous nous assurerons que le correctif fonctionne sur tous les environnements de calcul différents.

J'ai apporté les modifications aux lignes ci-dessus et j'ai pu compiler et exécuter l'exemple de base sur la page de démarrage : http://tensorflow.org/get_started/os_setup.md#try_your_first_tensorflow_program - il ne s'est pas plaint du gpu, mais il n'a pas signalé non plus l'utilisation du gpu.

Comment puis-je aider avec les prochaines étapes ?

infojunkie@, pourriez-vous publier votre étape et télécharger le journal ?

Si vous suiviez cet exemple :

bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

Si vous voyez la ligne suivante, le périphérique logique GPU est en cours de création :

Création d'un périphérique TensorFlow (/gpu:0) > (périphérique : ..., nom : ..., identifiant de bus pci : ...)

Si vous voulez être absolument sûr que le GPU a été utilisé, définissez CUDA_PROFILE=1 et activez le profileur Cuda. Si les journaux du profileur Cuda étaient générés, c'était un signe certain que le GPU était utilisé.

http://docs.nvidia.com/cuda/profiler-users-guide/#command-line-profiler-control

J'ai le log suivant :

I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 8
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:888] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:88] Found device 0 with properties: 
name: GeForce GT 750M
major: 3 minor: 0 memoryClockRate (GHz) 0.967
pciBusID 0000:02:00.0
Total memory: 2.00GiB
Free memory: 896.49MiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:112] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:122] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_region_allocator.cc:47] Setting region size to 730324992
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 750M, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 8

Je suppose que cela signifie que le GPU a été trouvé et utilisé. Je peux essayer le profileur CUDA si vous pensez que c'est utile.

Veuillez prioriser ce problème. Il bloque l'utilisation du processeur graphique à la fois sur OSX et sur le K520 d'AWS et pour de nombreuses personnes, il s'agit des seuls environnements disponibles.
Merci!

Ce n'est pas la meilleure solution, mais il suffit de commenter la vérification de la version de calcul cuda à _gpu_device.c_ ligne 610 à 616 , recompiler et l'accélération GPU amazon g2 semble fonctionner correctement :

example

Pour référence, voici mon patch très primitif pour travailler avec Cuda 3.0 : https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e

@infojunkie J'ai appliqué votre correctif, mais j'ai eu beaucoup de nan dans la sortie de calcul :

$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
000006/000003 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000004/000003 lambda = 2.000027 x = [79795.101562 -39896.468750] y = [159592.375000 -79795.101562]
000005/000006 lambda = 2.000054 x = [39896.468750 -19947.152344] y = [79795.101562 -39896.468750]
000001/000007 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000002/000003 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000009/000008 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000004/000004 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000001/000005 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000006/000007 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000003/000006 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]
000006/000006 lambda =     -nan x = [0.000000 0.000000] y = [0.000000 0.000000]

@markusdr , c'est très étrange. Pourriez-vous publier les étapes complètes de construction du binaire ?

Pourriez-vous utiliser avec quel GPU et système d'exploitation ? Utilisez-vous Cuda 7.0 et Cudnn 6.5 V2 ?

Juste +1 pour résoudre ce problème sur AWS dès que possible. Nous n'avons pas d'autres cartes GPU pour nos recherches.

Bonjour, je ne sais pas s'il s'agit d'un problème distinct, mais j'essaie de construire avec un GPU CUDA 3.0 (Geforce 660 Ti) et j'obtiens de nombreuses erreurs avec --config=cuda. Voir le fichier joint ci-dessous. Cela ne semble pas lié aux modifications recommandées ci-dessus. J'ai remarqué qu'il essaie de compiler un fichier temporaire compute_52.cpp1.ii qui serait la mauvaise version pour mon GPU.

Je suis sur Ubuntu 15.10. J'ai modifié le host_config.h dans le Cuda inclut pour supprimer la vérification de version sur gcc. J'utilise Cuda 7.0 et cuDNN 6.5 v2 comme recommandé, bien que des versions plus récentes soient également installées.

cuda_build_fail.txt

Oui, j'utilisais Cuda 7.0 et Cudnn 6.5 sur une instance EC2 g2.2xlarge avec cet AIM :
cuda_7 - ami-12fd8178
Ubuntu 14.04, gcc 4.8, cuda 7.0, atlas et opencv.
Pour construire, j'ai suivi les instructions sur tensorflow.org.

Il semble que nous assistions à une incompatibilité d'API entre Compute Capability v3 et Compute Capability v3.5 ; postez le correctif d'infojunkie , je suis tombé sur ce problème

I tensorflow/core/common_runtime/gpu/gpu_device.cc:643] Création d'un périphérique TensorFlow (/gpu:0) -> (périphérique : 0, nom : Quadro K2100M, identifiant de bus pci : 0000:01:00.0)
I tensorflow/core/common_runtime/local_session.cc:45] Threads de parallélisme inter op de session locale : 8
F tensorflow/stream_executor/cuda/cuda_blas.cc:229] Échec de la vérification : f != nullptr _n'a pas pu trouver cublasCreate_v2 dans cuBLAS DSO_ ; dlerror : bazel-bin/tensorflow/cc/tutorials_example_trainer : symbole non défini : cublasCreate_v2

Je cours sur Ubuntu 15.04, gcc 4.9.2, CUDA Toolkit 7.5, cuDNN 6.5 ;

+1 pour la prise en charge de Compute Capability v3

cublas est-il installé ? et où est-il lié à
ls -lah /usr/local/cuda/lib64/libcublas.so ?

@allanzelener , quelles versions d'OS et de GCC avez-vous ? Vos erreurs semblent provenir de compilateurs C++ incompatibles.

Il est recommandé d'utiliser Ubuntu 14.04 et GCC 4.8 avec TensorFlow.

@vsrikarunyan , il est préférable d'utiliser CUDA Toolkit 7.0, comme recommandé. Vous pouvez installer une ancienne boîte à outils CUDA avec votre nouvelle boîte à outils. Pointez simplement TensorFlow "configure" et peut-être LD_LIBRARY_PATH vers CUDA 7.0 lorsque vous exécutez TensorFlow.

@avostryakov , le premier correctif de @infojunkie devrait fonctionner sur AWS.

https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e

Un patch officiel est en train de se frayer un chemin dans le pipeline. Cela exposerait une option de configuration pour vous permettre de choisir votre cible de calcul. Mais en dessous, il fait des changements similaires. Je l'ai essayé sur AWS g2 et j'ai découvert une fois que les choses fonctionneraient, après avoir complètement désinstallé le pilote NVIDIA et réinstallé le dernier pilote GPU de NVIDIA.

Encore une fois, le paramètre recommandé sur AWS à ce stade est le suivant.
Ubuntu 14.04, GCC 4.8, CUDA Toolkit 7.0 et CUDNN 6.5. Pour les deux dernières, vous pouvez les installer sans affecter votre installation existante des autres versions. De plus, les versions officielles recommandées pour les deux derniers pourraient également changer bientôt.

J'ai appliqué le même patch sur une instance g2.2xlarge et j'ai obtenu le même résultat que @markusdr... un tas de nan.

@ zheng-xq Oui, je suis sur Ubuntu 15.10 et j'utilisais GCC 5.2.1. Le problème était le compilateur. Je n'arrivais pas à comprendre comment changer le compilateur avec bazel, mais le simple fait d'installer gcc-4.8 et d'utiliser update-alternatives pour modifier les liens symboliques dans usr/bin semble avoir fonctionné. (Plus d'informations : http://askubuntu.com/questions/26498/choose-gcc-and-g-version). Merci pour votre aide, je reviendrai si je rencontre d'autres problèmes.

J'ai réussi à faire fonctionner cela sur une instance g2.2xlarge et j'ai exécuté l'exemple de formation, et j'ai vérifié que le gpu était actif à l'aide de l'outil nvidia-smi , mais lors de l'exécution de convolutional.py de mnist, il manquait de mémoire. Je soupçonne que cela a simplement à voir avec la taille du lot et le fait que les gpus aws n'ont pas beaucoup de mémoire, mais je voulais juste le lancer pour m'assurer que cela sonne correctement. Pour clarifier, j'ai exécuté ce qui suit, et il a duré environ 15 minutes, puis j'ai manqué de mémoire.

python tensorflow/models/image/mnist/convolutional.py

@nbenhaim , qu'avez-vous dû faire pour que cela fonctionne ?

@markusdr , @jbencook , le NAN est assez troublant. J'ai fait la même chose moi-même et je n'ai eu aucun problème.

Si vous utilisez le paramètre logiciel recommandé : Ubuntu 14.04, GCC 4.8, Cuda 7.0 et Cudnn 6.5, ma prochaine supposition est le pilote Cuda. Pourriez-vous désinstaller et réinstaller le dernier pilote Cuda.

Voici la séquence que j'ai essayé sur AWS, votre kilométrage peut varier :

sudo apt-get remove --purge "nvidia*"
wget http://us.download.nvidia.com/XFree86/Linux-x86_64/352.55/NVIDIA-Linux-x86_64-352.55.run
sudo ./NVIDIA-Linux-x86_64-352.55.run --accept-license --no-x-check --no-recursion

Merci d'avoir suivi @zheng-xq - Je vais essayer aujourd'hui.

Un autre +1 pour la prise en charge des GPU pré-3.5, en tant que quelqu'un d'autre dont la seule option réaliste pour la formation sur des données réelles est les instances de GPU AWS.

Même pour les tests locaux, il s'avère que le GPU de mon ordinateur portable (récent, développeur) ne prend pas en charge 3.5 :-(

@anjishnu Je viens de suivre le correctif de @infojunkie https://gist.github.com/infojunkie/cb6d1a4e8bf674c6e38e après avoir effectué une installation propre et construit en suivant les instructions.

Quelques commentaires - L'AMI que j'utilisais avait le kit d'outils NVIDIA cuda 6.5 installé, donc quand j'ai suivi le lien dans le guide de démarrage de tensorflow, j'ai téléchargé le fichier 7.0 .run pour ubuntu 14.04 , mis à jour le pilote et installé cuda 7.0 dans /usr/local/cuda-7.0 sans créer de lien symbolique vers /usr/local/cuda puisque j'avais déjà installé 6.5 et que je ne voulais pas le tuer

Ensuite, lors de la construction, je viens de spécifier le bon emplacement de cuda 7.0. Une chose déroutante est que lors de la construction de la bibliothèque python, le tutoriel ne vous rappelle pas de spécifier --config=cuda , mais vous devez le faire si vous voulez que la bibliothèque python utilise gpu

@markusdr , @jbencook , j'ai obtenu un NaN et toutes sortes de valeurs foirées lorsque j'ai appliqué le correctif initialement, mais ce qui l'a corrigé était de faire un "bazel clean" et de le reconstruire à partir de zéro après avoir apporté les modifications proposées décrites dans @infojunkie le patch. Avez-vous essayé cela?

Intéressant... non je n'ai pas encore eu l'occasion. Avez-vous essayé d'exécuter le CNN à partir du guide de démarrage ?

python tensorflow/models/image/mnist/convolutional.py

Curieux de savoir si cela a fonctionné correctement.

@jbencook comme je l'ai mentionné, convolutional.py semble fonctionner correctement, mais après environ 15 minutes, il se bloque en raison d'un manque de mémoire, mais la sortie semble correcte et j'ai utilisé l'outil de nvidia-smi pour vérifier qu'il fonctionne réellement sur le GPU et il est. Je soupçonne que c'est à cause de la taille du lot ... je sais que les gpus sur ec2 n'ont pas beaucoup de mémoire, mais je ne sais vraiment pas pourquoi il manque de mémoire

L'exemple convolutional.py a également manqué de mémoire GPU pour moi, sur une GeForce GTX 780 Ti.

J'ai pu l'installer sur AWS après beaucoup de douleur. Voir https://gist.github.com/erikbern/78ba519b97b440e10640 – J'ai aussi construit une AMI : ami-cf5028a5 (dans la région de Virginie)

Il fonctionne sur g2.2xlarge et g2.8xlarge et il détecte correctement les appareils (respectivement 1 et 4). Cependant, je ne vois aucune accélération des 4 cartes GPU sur le g2.8xlarge. Les deux machines traitent environ 330 exemples/sec en exécutant l'exemple CIFAR 10 avec plusieurs GPU. Performances également très similaires sur l'exemple convolutif MNIST. Il se bloque également après environ 15 minutes avec "Mémoire GPU insuffisante, voir le vidage de l'état de la mémoire ci-dessus" comme d'autres personnes l'ont mentionné ci-dessus.

J'ai exécuté l'exemple du CIFAR pendant environ une heure et il semble bien fonctionner jusqu'à présent

En ce qui concerne la construction pour l'appareil Cuda 3.0, si vous synchronisez le dernier code TensorFlow, vous pouvez effectuer les opérations suivantes. La documentation officielle sera bientôt mise à jour. Mais voilà à quoi ça ressemble :

$ TF_UNOFFICIAL_SETTING=1 ./configure

... Identique aux paramètres officiels ci-dessus

AVERTISSEMENT : Vous configurez des paramètres non officiels dans TensorFlow. Parce que certains
les bibliothèques externes ne sont pas rétrocompatibles, ces paramètres sont en grande partie
non testé et non pris en charge.

Veuillez spécifier une liste de capacités de calcul Cuda séparées par des virgules que vous souhaitez
construire avec. Vous pouvez trouver la capacité de calcul de votre appareil sur :
https://developer.nvidia.com/cuda-gpus.
Veuillez noter que chaque capacité de calcul supplémentaire augmente considérablement
votre temps de construction et votre taille binaire. [La valeur par défaut est : "3.5,5.2"] : 3.0

La configuration de Cuda inclut
Configuration de Cuda lib64
Configuration de la corbeille Cuda
Configuration de Cuda nvvm
Configuration terminée

@nbenhaim @markusdr

Le problème de mémoire insuffisante peut être dû au fait que convolutional.py exécute l'évaluation sur l'ensemble du jeu de données de test (10 000) exemples. Cela se produit après la fin de la formation, comme dernière étape :

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/mnist/convolutional.py#L266

Pouvez-vous essayer de trancher train_data et test_labels pour qu'ils soient plus petits ?

Je peux confirmer qu'avec le script d'installation de @erikbern et la dernière branche principale de TensorFlow, le cifar10_multi_gpu_train.py fonctionne comme prévu sur le GPU :

step 100, loss = 4.49 (330.8 examples/sec; 0.387 sec/batch)

Bien que cette ligne se brise maintenant à cause des changements de code.

De plus, si je prends 1000 échantillons de test, l'exemple convolutional.py fonctionne aussi.

EDIT : L'exemple bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu fonctionne également sans me donner un tas de nan.

Je confirme que la dernière version prend en charge la spécification de la capacité de calcul via
$ TF_UNOFFICIAL_SETTING=1 ./configure
sans besoin de patch. Merci!

Je pense que ce problème peut être résolu, à moins que quelqu'un ne rencontre une fonction réelle qui échoue pour Cuda < 3.5.

En fait, laissez-moi reprendre cela :-) Le script ./configure modifie le code source en changeant les lignes pertinentes avec les versions Cuda spécifiées à la main. Ensuite, git signale les modifications non validées et il devient très difficile de travailler avec cette base de code sans annuler la modification, git pull ing et reconfigurer, sans parler de soumettre des contributions.

Une meilleure approche serait de lire ces paramètres de version à partir d'un fichier de configuration.

ErikBern ci-dessus et son AMI travaille pour cifar pour moi - ami-cf5028a5

Obtenir ~ 320 échantillons par seconde par rapport à ma boîte Windows i7 sur docker qui obtient ~ 105 échantillons par seconde pour cifar10_train.py

@infojunkie : oui, ce n'est pas l'idéal (@zheng-xq et j'en ai un peu discuté pendant le test !).

Nous essaierons de penser à une meilleure façon de gérer cela, même si nous aimerions garder la possibilité pour le filtrage des périphériques d'exécution d'être synchronisé avec la façon dont le binaire a été construit (d'où la nécessité d'éditer le code source à la fois pour la compilation et Durée). Sinon, les utilisateurs obtiennent des erreurs difficiles à déboguer.

Nous continuerons à travailler pour rendre cela plus facile, mais nous espérons que cela vous permettra de progresser.

@vrv : oui, je peux définitivement continuer mon travail avec ces correctifs. Merci pour le soutien!

Juste curieux, comme c4.4xlarge avec 16 vCpus est d'environ 0,88 par heure par rapport à l'instance gpu qui est de 0,65 par heure, ne serait-il pas préférable d'utiliser plusieurs cpu plutôt que gpu?

@timshephard J'en doute, mais n'hésitez pas à exécuter quelques benchmarks - vous pouvez installer mon AMI (ami-cf5028a5) sur un c4.4xlarge et exécuter cifar10_train.py

En fait, le g2.2xlarge dispose de 8 processeurs aux côtés du GPU. Je vais essayer ça.

Le processeur multi-thread est pris en charge, mais si vous voulez faire une vraie formation,
GPU 4 Life, jusqu'à la sortie de l'implémentation distribuée

Le jeudi 12 novembre 2015 à 16h53, Erik Bernhardsson < [email protected]

a écrit:

@timshephard https://github.com/timshephard J'en doute, mais n'hésitez pas
pour exécuter des benchmarks - vous pouvez installer mon AMI (ami-cf5028a5) sur un
c4.4xlarge et exécutez cifar10_train.py


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -156274039
.

Je n'obtenais qu'une accélération 3x pour le GPU Amazon sur mon CPU Windows sur Docker. Bien, mais ce n'était qu'un de mes noyaux. Les 4 cœurs de ma boîte Windows pourraient probablement battre un GPU Amazon.

c'est intéressant, car avec caffe , je n'ai pas fait de véritables benchmarks,
mais la formation en mode CPU est horrible, comme un ordre de grandeur ou plus
différence. Peut-être que TF est mieux optimisé en mode CPU - ne serait pas surprenant
moi.

Le jeudi 12 novembre 2015 à 17h01, timshephard [email protected]
a écrit:

Je n'obtenais qu'une accélération 3x pour le GPU amazon sur mon processeur Windows sur
docker. Bien, mais ce n'était qu'un de mes noyaux. Tout pour 4 cœurs sur mon
Windows Box pourrait probablement battre un GPU Amazon.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -156275410
.

Veuillez garder à l'esprit que le tutoriel cifar10 tel qu'il est n'est pas censé être une référence. Il est destiné à présenter quelques fonctionnalités différentes, telles que l'économiseur et le résumé. Dans sa forme actuelle, il sera limité par le CPU, même avec le GPU. Pour se benchmarker, il faudra être plus prudent et n'utiliser que les fonctionnalités essentielles.

Peut-être que les GPU Amazon sont lents pour une raison quelconque https://www.reddit.com/r/MachineLearning/comments/305me5/slow_gpu_performance_on_amazon_g22xlarge/
Rapport intéressant : "Un g2.2xlarge est un GK104 downclocké (797 MHz), ce qui le rendrait 1/4 de la vitesse du TitanX récemment sorti et 2,7 fois plus lent qu'un GTX 980."

fwiw, obtention du 13/11/2015 00:38:05.472034 : étape 20, perte = 4,64 (362,5 exemples/s ; 0,353 s/lot)
maintenant avec 7 processeurs et cifar10_multi_gpu_train.py. J'ai changé toutes les références de périphérique de gpu à cpu, si cela a du sens.

d'accord, bizarre. 2015-11-13 00:43:56.914273 : étape 10, perte = 4,65 (347,4 exemples/s ; 0,368 s/lot) et en utilisant 2 processeurs, il est donc clair que quelque chose a échoué ici. Doit encore utiliser le GPU. Il est intéressant de noter qu'il traite un peu plus rapidement que la version à processeur unique du script.

même avec les instructions d'erikbern, je reçois toujours

AssertionError : le modèle a divergé avec perte = NaN lorsque j'essaie cifar_train.py et ceci lors de l'exécution de mnist/convolutional.py

Époque 1.63
Perte de mini-lot : nan, taux d'apprentissage : nan
Erreur de mini-lot : 90,6 %
Erreur de validation : 90,4 %
Époque 1.75
Perte de mini-lot : nan, taux d'apprentissage : 0,000000
Erreur de mini-lot : 92,2 %
Erreur de validation : 90,4 %
Époque 1.86
Perte de mini-lot : nan, taux d'apprentissage : 0,000000

Je l'ai fait fonctionner sur GPU sur AWS, mais comme les autres, j'obtiens des vitesses peu impressionnantes.

J'ai pu exécuter l'exemple convolutional.py sans manquer de mémoire après avoir utilisé le correctif correct suggéré par @zheng-xq pour définir l'option lors de l'exécution de configure

Le script d'installation fourni par @erikbern ne fonctionne plus à partir du commit 9c3043ff3bf31a6a81810b4ce9e87ef936f1f529

Le commit le plus récent a introduit ce bogue, @keveman a déjà fait une note sur le commit ici :
https://github.com/tensorflow/tensorflow/commit/9c3043ff3bf31a6a81810b4ce9e87ef936f1f529#diff -1a60d717df0f558f55ec004e6af5c7deL25

Salut! J'ai un problème avec la compilation de tensorflow avec GTX 670. Je lance

TF_UNOFFICIAL_SETTING=1 ./configure
bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

J'ai eu une erreur :

INFO: Found 1 target...
INFO: From Compiling tensorflow/core/kernels/bias_op_gpu.cu.cc:
tensorflow/core/kernels/bias_op_gpu.cu.cc(40): error: identifier "__ldg" is undefined
          detected during:
            instantiation of "void tensorflow::functor::BiasOpCustomKernel(int, const T *, const T *, int, int, T *) [with T=float]" 
(57): here
            instantiation of "void tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::operator()(const tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::Device &, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::ConstTensor, tensorflow::TTypes<T, 1, Eigen::DenseIndex>::ConstVec, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::Tensor) [with T=float, Dims=2]" 
(69): here

tensorflow/core/kernels/bias_op_gpu.cu.cc(40): error: identifier "__ldg" is undefined
          detected during:
            instantiation of "void tensorflow::functor::BiasOpCustomKernel(int, const T *, const T *, int, int, T *) [with T=double]" 
(57): here
            instantiation of "void tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::operator()(const tensorflow::functor::Bias<tensorflow::GPUDevice, T, Dims>::Device &, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::ConstTensor, tensorflow::TTypes<T, 1, Eigen::DenseIndex>::ConstVec, tensorflow::TTypes<T, Dims, Eigen::DenseIndex>::Tensor) [with T=double, Dims=2]" 
(69): here

2 errors detected in the compilation of "/tmp/tmpxft_000067dd_00000000-7_bias_op_gpu.cu.cpp1.ii".
ERROR: /home/piotr/tensorflow/tensorflow/tensorflow/core/BUILD:248:1: output 'tensorflow/core/_objs/gpu_kernels/tensorflow/core/kernels/bias_op_gpu.cu.o' was not created.
ERROR: /home/piotr/tensorflow/tensorflow/tensorflow/core/BUILD:248:1: not all outputs were created.
Target //tensorflow/cc:tutorials_example_trainer failed to build

Informations sur ma carte à partir d'échantillons NVIDIA deviceQuery :

Device 0: "GeForce GTX 670"
  CUDA Driver Version / Runtime Version          7.5 / 7.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2046 MBytes (2145235968 bytes)
  ( 7) Multiprocessors, (192) CUDA Cores/MP:     1344 CUDA Cores
  GPU Max Clock rate:                            980 MHz (0.98 GHz)
  Memory Clock rate:                             3004 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 524288 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.0, NumDevs = 1, Device0 = GeForce GTX 670

Des idées pourquoi cela ne fonctionne pas?
Merci!

la primitive __ldg n'existe que pour 3.5+ je pense. Nous avons un correctif interne pour prendre en charge les deux que nous essaierons de déployer bientôt.

Voir https://github.com/tensorflow/tensorflow/issues/320 pour plus de détails

Merci! L'ajout du correctif de # 320 m'a aidé, je peux compiler (avec beaucoup d'avertissements) et exécuter

bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

Lorsque je lance des exemples :

tensorflow/models/image/mnist$ python convolutional.py 

Je reçois un avertissement :

Ignoring gpu device (device: 0, name: GeForce GTX 670, pci bus id: 0000:01:00.0) with Cuda compute capability 3.0. The minimum required Cuda capability is 3.5.

Comment activer le GPU dans les exemples de tensorflow/models/images ?

@erikbern
avez-vous trouvé plusieurs problèmes de GPU sur Amazon ? J'exécute également plusieurs instances GPU CIFAR, mais je ne vois aucune accélération.

Voici l'état d'utilisation du GPU, il semble que tous les GPU soient utilisés mais ils ne font rien.

+------------------------------------------------------------- -----+
| Version du pilote NVIDIA-SMI 346.46 : 346.46 |
|-------------------------------+----------------- -----+----------------------+
| Nom du GPU Persistance-M | Bus-Id Disp.A | Non corr. volatil. CEC |
| Ventilateur Temp Perf Pwr:Utilisation/Cap | Utilisation de la mémoire | GPU-Util Compute M. |
|==============================+================= =====+======================|
| 0 GRILLE K520 Arrêt | 0000:00:03.0 Désactivé | N/A |
| S/O 54C P0 55W / 125W | 3832 Mo / 4095 Mo | 37 % par défaut |
+-------------------------------+------------------------------ -----+----------------------+
| 1 GRILLE K520 Arrêt | 0000:00:04.0 Désactivé | N/A |
| S/O 42C P0 42W / 125W | 3796 Mo / 4095 Mo | 0 % par défaut |
+-------------------------------+------------------------------ -----+----------------------+
| 2 GRILLE K520 Arrêt | 0000:00:05.0 Arrêt | N/A |
| S/O 46C P0 43W / 125W | 3796 Mo / 4095 Mo | 0 % par défaut |
+-------------------------------+------------------------------ -----+----------------------+
| 3 GRILLE K520 Arrêt | 0000:00:06.0 Arrêt | N/A |
| S/O 43C P0 41W / 125W | 3796 Mo / 4095 Mo | 0 % par défaut |
+-------------------------------+------------------------------ -----+----------------------+

+------------------------------------------------------------- -------------------------------------+
| Processus : Mémoire GPU |
| GPU PID Type Nom du processus Utilisation |
|================================================ ============================|
| 0 60160C python 3819MiB |
| 1 60160C python 3783MiB |
| 2 60160C python 3783MiB |
| 3 60160 C python 3783MiB |
+------------------------------------------------------------- -------------------------------------+

@mhejrati selon un commentaire sur https://news.ycombinator.com/item?id=10555692 , il semble que vous ne puissiez pas le faire dans AWS :

La virtualisation Xen désactive les copies P2P, donc les GPU ont ce que nous appelons un "échec de communication et certains GPU que vous ne pouvez tout simplement pas atteindre (sans passer par le CPU qui est)."

Je ne sais pas à quel point les commentaires de HN sont dignes de confiance, mais c'est tout ce que je sais jusqu'à présent

@erikbern @mhejrati Je ne suis pas sûr que la propriété spécifique de Xen soit un problème. Les copies P2P ne semblent pas nécessaires car le processeur peut toujours assigner du travail à chaque GPU sans que les GPU aient besoin de communiquer entre eux. Il est toujours étrange que tous les GPU de l'instance semblent être dans cet état semi-utilisé, mais le travail se déroule sans erreur.

Je ferme ce bug. Veuillez en ouvrir un nouveau avec un titre plus spécifique si certains problèmes ici restent non résolus.

Cela signifie-t-il que la dernière version de tensorflow fonctionne sur les instances Amazon g2 sans aucun piratage ? Et cela signifie-t-il que cela fonctionne plus d'un GPU là-bas?

Je ne sais pas si nous devrions appeler TF_UNOFFICIAL_* "pas un hack", mais oui, cela _devrait_ fonctionner. Si ce n'est pas le cas, cela n'est probablement pas lié à Cuda 3.0 en soi, et nous devrions avoir un bogue plus spécifique.

Et est-il possible d'exécuter du code sur deux GPU ou plus sur une instance Amazon ? Par exemple, le parallélisme des données pour former un modèle comme dans l'exemple CIFAR. Plusieurs gars juste 5 commentaires au-dessus de ce commentaire ont écrit que ce n'était pas possible.

Je ne sais pas. Mais si c'est toujours un problème avec la version 0.6.0, il devrait s'agir d'un bogue, juste un bogue plus spécifique concernant plusieurs GPU.

J'utilise 0.6.0 sur Ubuntu, je ne peux pas utiliser plus d'un GPU. L'utilisation du GPU sur un GPU est toujours de 0.

À titre de référence, la location d'un K40 ou d'un K80 n'est en fait pas excessivement chère. Amazon ne les a pas, mais plusieurs des options sur http://www.nvidia.com/object/gpu-cloud-computing-services.html le font. (Certains pour aussi peu que 3 $/h)

Theano et Torch n'ont aucun problème avec le calcul 3.0. Pouvons-nous nous attendre à ce que TensorFlow prenne en charge le calcul 3.0 de sitôt ?

Ou au moins ajouter la possibilité de passer outre la restriction sans avoir à recompiler.

@Dringite , vous pouvez activer Cuda 3.0 en utilisant ce qui suit :

TF_UNOFFICIAL_SETTING=1 ./configure

Il doit être fonctionnel. Et si ce n'est pas le cas, n'hésitez pas à créer un autre problème pour le suivre.

Le guide d'installation de tensorflow inclut désormais également un correctif pour cuda 3.0

Le mercredi 10 février 2016 à 14h37, zheng-xq [email protected] a écrit :

@Dringite https://github.com/Dringite , vous pouvez activer Cuda 3.0 en utilisant
ce qui suit:

TF_UNOFFICIAL_SETTING=1 ./configure

Il doit être fonctionnel. Et si ce n'est pas le cas, n'hésitez pas à en déposer un autre
problème pour le suivre.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -182610763
.

Je pense que le guide actuel ne fonctionne pas pour les GPU - le test renvoie les nan comme indiqué précédemment.
En particulier, vous devez encore faire ceci:
TF_UNOFFICIAL_SETTING=1 ./configure

Je ne trouve pas le guide d'installation comprenant un correctif pour cuda 3.0, quelqu'un pourrait-il me le signaler ? THX!

printf "\ny\n7.5\n\n\n\n3.0\n" | ./configure

7.5 est la version cuda, 3.0 est le calculateur.

Toujours aucune amélioration des performances pour plusieurs GPU chez Amazon (CUDA = 7,5, cudnn = 4,0, calcul = 3,0) par rapport à un seul GPU.

quelqu'un a réussi sur la capacité de calcul Cuda 2.0 ?

Vérifié que 'TF_UNOFFICIAL_SETTING=1 ./configure' fonctionne sur un macbook pro avec au GeForce GT 750M. Merci!

Y a-t-il un ETA pour le correctif officiel ? C'est vraiment pénible à maintenir (par exemple, construire des images avec notre propre dockerfile) en production.

Mon ordinateur portable me donne ce journal lorsque j'essaie d'exécuter l'exemple mnist :
« Ignorer le périphérique gpu (périphérique : 0, nom : GeForce GT 635M, ID de bus pci) avec la capacité de calcul Cuda 2.1. La capacité Cuda minimale requise est 3.0.
Cela signifie-t-il donc que je ne peux pas utiliser la version GPU car le Cuda minimum pour tensorflow est 3.0 ?
Merci

Si vous utilisez les binaires prédéfinis, oui. Si vous construisez à partir de la source, vous pouvez
construire avec le support Cuda 2.1 mais je ne sais pas si cela fonctionne réellement. C'est
probablement que le minimum effectif est cuda 3.0.
Le sam. 10 sept. 2016 à 11:51 Mojtaba Tabatabaie [email protected]
a écrit:

Mon ordinateur portable me donne ce journal lorsque j'essaie d'exécuter l'exemple mnist :
"Ignorer le périphérique gpu (périphérique : 0, nom : GeForce GT 635M, identifiant de bus pci) avec Cuda
capacité de calcul 2.1. La capacité Cuda minimale requise est 3.0 . "
Cela signifie-t-il donc que je ne peux pas utiliser la version GPU car le minimum Cuda
pour tensorflow est 3.0 ?
Merci


Vous recevez ceci parce que vous avez modifié l'état d'ouverture/fermeture.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/tensorflow/tensorflow/issues/25#issuecomment -246128896,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAjO_RvNrRMQEmsueXWoaU5FX4tWHZq3ks5qovwegaJpZM4Ge0kc
.

@smtabatabaie Avez-vous essayé de construire cuDNN à partir de la source comme suggéré par @martinwicke , je suis confronté exactement aux mêmes problèmes que le vôtre et cela m'aiderait beaucoup si vous partagiez votre expérience?

Un peu d'aide s'il vous plait. Je reçois le même message d'erreur avec "Ignoring visible gpu device (device: 0, name: GeForce GT 750M, pci bus id: 0000:01:00.0) with Cuda compute capacity 3.0. La capacité Cuda minimale requise est 3.5."

J'ai lu les messages des autres, le seul problème est qu'il s'agit d'une installation directe de Windows et non sur AWS, comme je suppose que la plupart des gens ici l'ont fait. Sur le site Web de tensorflow, il est indiqué qu'un minimum de 3.0 est requis, pourquoi ne puis-je pas l'utiliser ? et comment puis-je le contourner?

Des suggestions sur la façon de procéder sont les bienvenues.

@gunan @mrry les packages Windows ne sont-ils pas construits avec cuda 3.0 ? Ç'est pourquoi
ils sont si petits ?

@martinwicke Les nightlies le sont et rc1 devrait l'être aussi.

des nightlies oui.
rc0 je pense était 3.5.
Avons-nous sélectionné le changement pour utiliser 3.0 à r0.12 ?

Nous avons sélectionné le changement.
@cydal , vous pouvez utiliser les versions nocturnes ici :
http://ci.tensorflow.org/view/Nightly/job/nightly-win/14/DEVICE=gpu ,OS=windows/artifact/cmake_build/tf_python/dist/tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64. tout

Ou vous pouvez attendre la 0.12.0rc1, qui devrait arriver dans quelques jours.

Merci les gars pour la réponse rapide, je ne m'y attendais pas depuis un moment au moins. Désolé si cela ressemble à une question stupide, comment puis-je l'installer ? puis-je simplement l'installer par pip? (si oui, est-ce que j'ai supprimé le GPU tensorflow précédent ? ou le fait-il automatiquement ?) ou faut-il le télécharger et l'installer manuellement d'une manière ou d'une autre ? considérez-moi un peu comme un débutant.

Le lien pointe vers un "paquet PIP".
Si vous avez utilisé la commande pip install , vous devriez pouvoir utiliser la même commande avec le drapeau --upgrade .
Ou vous pouvez exécuter pip uninstall tensorflow puis installer le package répertorié ci-dessus.
Une fois que vous avez donné l'URL à la commande pip, il se télécharge et s'installe automatiquement.

C'est tout ce que je peux donner avec une connaissance limitée de votre système, de votre distribution Python, etc.
Envisagez de faire une recherche sur Google pour plus de détails sur le fonctionnement de l'installation du package pip avec votre distribution python.

Salut, j'ai simplement désinstallé le précédent et réinstallé et ça marche! Merci beaucoup, vous m'avez évité d'acheter un nouvel ordinateur portable.

Salut @gunan avec le dernier changement pour la compatibilité 3.5, j'obtiens le journal suivant :

>>>> sess = tf.Session()
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties:
name: Quadro K4100M
major: 3 minor: 0 memoryClockRate (GHz) 0.7055
pciBusID 0000:01:00.0
Total memory: 4.00GiB
Free memory: 3.69GiB
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:906] DMA: 0
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:916] 0:   Y
I c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (d
evice: 0, name: Quadro K4100M, pci bus id: 0000:01:00.0)
E c:\tf_jenkins\home\workspace\nightly-win\device\gpu\os\windows\tensorflow\core
\common_runtime\gpu\gpu_device.cc:586] Could not identify NUMA node of /job:loca
lhost/replica:0/task:0/gpu:0, defaulting to 0.  Your kernel may not have been bu
ilt with NUMA support.

Comment puis-je le contourner ? Les suggestions sur la façon de procéder sont les bienvenues.

@ kay10 Il semble que cela ait fonctionné. Ce message d'erreur sur la dernière ligne est inoffensif et va être supprimé dans la version.

Comme je le vois dans ce fil, tout le monde a un niveau de compatibilité 3. Pour ceux qui ont une compatibilité de 2, existe-t-il une solution sans compiler le code source ?
J'ai essayé la construction nocturne partagée par @gunan et j'ai eu l'erreur :
tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
ce n'est pas une roue Linux et je m'en suis rendu compte un peu vite.

Situation actuelle sur un Ubuntu 16.04.
I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 0, name: GeForce GTX 590, pci bus id: 0000:03:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0. I tensorflow/core/common_runtime/gpu/gpu_device.cc:948] Ignoring visible gpu device (device: 1, name: GeForce GTX 590, pci bus id: 0000:04:00.0) with Cuda compute capability 2.0. The minimum required Cuda capability is 3.0.

@batuhandayioglugil trop de nos noyaux GPU reposent sur des fonctionnalités qui ne sont disponibles que dans la version 3.0 et supérieure, donc malheureusement, vous aurez besoin d'un GPU plus récent. Vous pouvez également envisager d'essayer l'un des services cloud.

@vrv Je suis arrivé à ce point après avoir passé beaucoup de temps sur ces problèmes et acheté un nouveau bloc d'alimentation, donc cela m'a coûté cher. Pour éviter toute perte de temps supplémentaire, je souhaite poser une question : il existe au moins 15 bibliothèques d'apprentissage en profondeur que j'ai entendues. Cuda et cuDNN étaient nécessaires pour tensorflow. Cette situation (capacité de calcul) est-elle spéciale pour la bibliothèque cuda ? Puis-je avoir d'autres chances ? sinon, je vais abandonner le droit de savoir et continuer à travailler avec le processeur (pardonnez mon ignorance)

Je pense que ce sera plus difficile que cela ne vaut la peine d'essayer de faire fonctionner votre carte 2.0 - il est possible que votre processeur existant soit aussi rapide ou plus rapide que votre GPU spécifique, et beaucoup moins de problèmes pour démarrer. Je ne sais pas ce que les autres bibliothèques exigent, malheureusement.

prend-il déjà en charge le calcul GPU 3.0 ?

Oui.

@martinwicke merci pour la réponse rapide. dois-je encore le construire à partir des sources, ou simplement l'installer directement par pip ? Je suis sur Arch Linux et j'ai du mal à le construire à partir de la source donnant une erreur avec le compilateur c.

Je pense que cela devrait fonctionner à partir du binaire.

J'ai le même problème : "Ignorer le périphérique gpu (périphérique : 0, nom : GeForce GT 635M, identifiant de bus pci) avec la capacité de calcul Cuda 2.1. La capacité minimale requise pour Cuda est 3.0." . @smtabatabaie @martinwicke @alphajatin. aider !!!!

La capacité de calcul 2.1 est trop faible pour exécuter TensorFlow. Vous aurez besoin d'une carte graphique plus récente (ou plus puissante) pour exécuter TensorFlow sur un GPU.

L'url de réponse à la question est invalide. Pouvez-vous le mettre à jour ?

Pour les packages pip nocturnes, la méthode d'installation recommandée consiste à utiliser la commande pip install tf-nightly .
ci.tensorflow.org est obsolète.

Cette page vous a été utile?
0 / 5 - 0 notes