2017-10-01 1 views
0

J'utilise un réseau convolutif typique à 5 couches sur le GPU en tensorflow. Quand je cours sur un GPU TI rapide de 1080 j'obtiens environ 35% d'utilisation de GPU. Sur un M40 plus lent, j'obtiens 80% d'utilisation et 97% d'utilisation sur un GPU mobile de 970m.Tensorflow fonctionnant à 35% d'utilisation du GPU, le profileur montre une activité cpu étrange

J'ai implémenté la file d'attente GPU tf.StagingArea et ai confirmé avec un message d'avertissement que StagingArea n'est pas vide avant chaque étape d'apprentissage, il est en cours d'alimentation de manière asynchrone.

J'ai exécuté le profileur de flux tensor vu ci-dessous. Notamment, les opérations principales sur le GPU semblent se terminer en 15ms, mais il y a un écart entre 15ms et 40ms où rien n'est enregistré par le profiler. A 40ms, trois petites opérations CPU apparaissent liées à l'optimiseur (mise à jour de l'étape globale).

Ce comportement est cohérent à chaque étape.

Une idée pourquoi il y a un tel retard ici?

enter image description here

Répondre

1

Il y a une façon comment vous pouvez déterminer ce qui se passe sur le processeur à l'intérieur de cet intervalle avec l'aide d'Intel VTune Amplifier (l'outil est pas libre, mais il existe libres versions entièrement fonctionnelles académiques et essai) . Vous pouvez utiliser une recette de this article pour importer des données de chronologie vers Intel VTune Amplifier et les analyser à cet endroit. Vous aurez besoin du groupement de fonctions de domaine/source de trame. Développez la ligne [No frame domain - Outside any frame] et vous obtiendrez la liste des hotspots se trouvant dans l'intervalle qui vous intéresse.