J'ai récemment commencé à utiliser le wandb avec mon script PyTorch, pour s'assurer que les GPU fonctionnent efficacement. Cependant, je ne suis pas sûr de ce que les graphiques indiquent exactement.
J'ai suivi le tutoriel de ce lien, https://lambdalabs.com/blog/weights-and-bias-gpu-cpu-utilization/ et j'ai été troublé par cette intrigue :
J'ai des doutes sur les graphiques du % de GPU et du % d'accès à la mémoire du GPU. Les descriptions dans le blog sont les suivantes :
-
GPU % : Ce graphique est probablement le plus important. Il indique le pourcentage du temps, sur la dernière période d'échantillonnage, pendant lequel un ou plusieurs noyaux ont été exécutés sur le GPU. En principe, vous voulez que ce pourcentage soit proche de 100%, ce qui signifie que le GPU est occupé en permanence à faire du data crunching. Le diagramme ci-dessus comporte deux courbes. C'est parce qu'il y a deux GPU et qu'un seul d'entre eux (bleu) est utilisé pour l'expérience. Le GPU bleu est occupé à environ 90%, ce qui signifie qu'il n'est pas trop mal mais qu'il peut encore être amélioré. La raison de cette utilisation sous-optimale est due à la petite taille du lot (4) que nous avons utilisé dans cette expérience. Le GPU récupère une petite quantité de données de sa mémoire très souvent, et ne peut pas saturer le bus mémoire ni les cœurs CUDA. Nous verrons plus tard qu'il est possible d'augmenter ce nombre en augmentant simplement la taille du lot.
-
% d'accès à la mémoire du GPU : C'est une mesure intéressante. Il mesure le pourcentage du temps sur la dernière période d'échantillonnage pendant lequel la mémoire du GPU a été lue ou écrite. Nous devons maintenir ce pourcentage à un niveau bas car nous voulons que le GPU passe la plupart de son temps à calculer au lieu d'aller chercher des données dans sa mémoire. Dans la figure ci-dessus, le GPU occupé a environ 85% de temps d'accès à la mémoire. Ce pourcentage est très élevé et a causé des problèmes de performance. Une façon de réduire le pourcentage ici est d'augmenter la taille du lot, afin que la récupération des données devienne plus efficace.
J'avais les questions suivantes :
- La somme des valeurs susmentionnées n'est pas égale à 100 %. Il semble que notre GPU peut soit consacrer du temps au calcul, soit consacrer du temps à la lecture/écriture de la mémoire. Comment la somme de ces deux valeurs peut-elle être supérieure à 100% ?
- Pourquoi l'augmentation de la taille des lots réduit-elle le temps d'accès à la mémoire du GPU ?