web-dev-qa-db-fra.com

Faible utilisation du processeur graphique par Keras/Tensorflow?

J'utilise keras avec le programme tensorflow sur un ordinateur doté d'un GPU nvidia Tesla K20c. (CUDA 8)

Je transforme un réseau de neurones convolutifs relativement simple. Pendant l’entraînement, je lance le programme terminal nvidia-smi pour vérifier l’utilisation du processeur graphique. Comme vous pouvez le voir dans la sortie suivante, l'utilisation du processeur graphique indique généralement entre 7% et 13%.

Ma question est la suivante: pendant la formation à CNN, l’utilisation du processeur graphique ne devrait-elle pas être plus élevée? est-ce le signe d'une mauvaise configuration du GPU ou de son utilisation par keras/tensorflow?

sortie nvidia-smi

 enter image description here

7
AEndrs

Cela peut être dû à plusieurs raisons, mais il est fort probable que vous rencontriez des problèmes lors de la lecture des données d'entraînement. Comme votre GPU a traité un lot, il nécessite plus de données. En fonction de votre implémentation, cela peut amener le processeur graphique à attendre que le processeur charge plus de données, ce qui réduira l'utilisation du processeur graphique et rallongera le temps de formation.

Essayez de charger toutes les données en mémoire si cela vous convient ou utilisez un QueueRunner qui créera un pipeline d’entrée lisant les données en arrière-plan. Cela réduira le temps d'attente de votre GPU pour plus de données.

Le Reading Data Guide sur le site Web TensorFlow contient plus d’informations.

6
Wesley

Vous devriez trouver le goulot d'étranglement: 

Sur Windows, utilisez T ask-Manager> Performance pour surveiller votre utilisation de vos ressources

Sous Linux, utilisez nmon, nvidia-smi et htop pour surveiller vos ressources. 

Les scénarios les plus possibles sont: 

  • Si vous avez un énorme ensemble de données, examinez les taux de lecture/écriture sur disque. Si vous accédez fréquemment à votre disque dur, vous devrez probablement modifier la façon dont vous traitez avec le jeu de données afin de réduire le nombre d'accès au disque. 

  • Utilisez la mémoire pour tout pré-charger autant que possible.

  • Si vous utilisez une API reposante ou des services similaires, veillez à ne pas trop attendre pour recevoir ce dont vous avez besoin. Pour les services reposants, le nombre de requêtes par seconde peut être limité (vérifiez votre utilisation du réseau via nmon/Gestionnaire de tâches).

  • Assurez-vous de ne pas utiliser swap space en tout cas! 

  • Réduisez la surcharge du prétraitement par n'importe quel moyen (par exemple, en utilisant le cache, des bibliothèques plus rapides, etc.) 

  • Jouez avec le bach_size (cependant, on dit que des valeurs plus élevées (> 512) pour la taille du lot pourraient avoir des effets négatifs sur la précision) 

0
Mohammad-Ali

Mesurer les performances et l’utilisation du processeur graphique n’est pas aussi simple que le processeur ou la mémoire. Le GPU est une unité de traitement parallèle extrême et les facteurs sont multiples. Le nombre d'utilisation du processeur graphique indiqué par nvidia-smi indique le pourcentage du temps pendant lequel au moins un groupe multitraitement gpu était actif. Si ce nombre est égal à 0, cela signifie qu'aucun processeur n'est utilisé, mais si ce nombre est égal à 100, cela ne signifie pas que le processeur graphique est utilisé à son plein potentiel. 

Ces deux articles contiennent de nombreuses informations intéressantes sur ce sujet: https://www.imgtec.com/blog/a-quick-guide-to-writing-opencl-kernels-for-rogue/https://www.imgtec.com/blog/measuring-gpu-compute-performance/

0
Fardin