Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
formation:cbp20190606gpu [2019/06/03 18:04]
equemene
formation:cbp20190606gpu [2019/06/11 10:37] (Version actuelle)
equemene [Conclusion]
Ligne 1: Ligne 1:
 ====== CBP 2019 : le GPU par la pratique ====== ====== CBP 2019 : le GPU par la pratique ======
  
-Cette session pratique accompagne le cours du 6 juin au matin réalisé par Emmanuel Quémener.+Cette session pratique accompagne le [[http://​www.cbp.ens-lyon.fr/​emmanuel.quemener/​documents/​PresentationGPU_190606_EQ.pdf|cours]] du 6 juin au matin réalisé par Emmanuel Quémener.
  
 +===== Déroulement de la journée =====
 +
 +  * 08h30-09h00 Accueil devant la salle M7-1H104
 +
 +  * 09h00-10h30 Cours d'​introduction aux GPU
 +  * 10h30-10h45 Pause
 +  * 10h45-12h30 TP première partie
 + 
 +  * 12h30-13h30 Repas salle 116
 +
 +  * 13h30-15h15 TP seconde partie
 +  * 15h30-15h45 Pause
 +  * 15h45-17h30 TP troisième partie ​
 ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? ===== ===== CQQCOQP : Comment ? Qui ? Quand ? Combien ? Où ? Quoi ? Pourquoi ? =====
  
Ligne 45: Ligne 58:
   * **p100alpha**,​ **p100beta** : stations virtuelles disposant d'une Nvidia Tesla P100   * **p100alpha**,​ **p100beta** : stations virtuelles disposant d'une Nvidia Tesla P100
   * **k40m** : station virtuelle disposant d'une Nvidia Tesla K40m   * **k40m** : station virtuelle disposant d'une Nvidia Tesla K40m
 +  * **r740gpu1** : station disposant de 2 Tesla P100 (appartenant au PSMN)
  
 Jetez un coup d'oeil sur [[http://​styx.cbp.ens-lyon.fr/​ganglia/?​r=hour&​cs=&​ce=&​m=load_one&​s=by+name&​c=Workstations|Monitoring des stations de travail]] avant de lancer vos tâches ! De grosses requêtes concurrentielles peuvent entraîner des DoS ! Jetez un coup d'oeil sur [[http://​styx.cbp.ens-lyon.fr/​ganglia/?​r=hour&​cs=&​ce=&​m=load_one&​s=by+name&​c=Workstations|Monitoring des stations de travail]] avant de lancer vos tâches ! De grosses requêtes concurrentielles peuvent entraîner des DoS !
Ligne 208: Ligne 222:
 Comme nous l'​avons vu dans l'​introduction sur le GPU, leur programmation peut-être réalisée par différentes voies. La première, pour les périphériques Nvidia, est d'​utiliser l'​environnement CUDA. Le problème sera qu'il est impossible de réexploiter votre programme sur une autre plate-forme (un CPU) ou la comparer avec d'​autres GPU. [[https://​www.khronos.org/​opencl/​|OpenCL]] reste une approche beaucoup plus polyvalente ! Comme nous l'​avons vu dans l'​introduction sur le GPU, leur programmation peut-être réalisée par différentes voies. La première, pour les périphériques Nvidia, est d'​utiliser l'​environnement CUDA. Le problème sera qu'il est impossible de réexploiter votre programme sur une autre plate-forme (un CPU) ou la comparer avec d'​autres GPU. [[https://​www.khronos.org/​opencl/​|OpenCL]] reste une approche beaucoup plus polyvalente !
  
-Sur les stations du CBP, la majorité des implémentations de OpenCL sont disponibles,​ autant sur CBP que sur GPU.+Sur les stations du CBP, la majorité des implémentations de OpenCL sont disponibles,​ autant sur CPU que sur GPU.
  
 La commande ''​clinfo''​ récupère des informations liées à tous les périphériques OpenCL disponibles. ​ La commande ''​clinfo''​ récupère des informations liées à tous les périphériques OpenCL disponibles. ​
Ligne 1316: Ligne 1330:
 export DATADIR=/​local/​$USER export DATADIR=/​local/​$USER
 sed -i "​s|tfds\.load(name|tfds\.load(data_dir\=\'​$DATADIR\'​\,​name|g"​ cifar10_input.py sed -i "​s|tfds\.load(name|tfds\.load(data_dir\=\'​$DATADIR\'​\,​name|g"​ cifar10_input.py
 +# Modification du dossier de sauvegarde de l'​apprentissage
 +sed -i '​s/​\/​tmp\//​$DATADIR/​g'​ cifar10_train.py
 # Réduction du nombre d'​itérations de 100000 à 10000 # Réduction du nombre d'​itérations de 100000 à 10000
 sed -i '​s/​100000/​10000/​g'​ cifar10_train.py sed -i '​s/​100000/​10000/​g'​ cifar10_train.py
Ligne 1325: Ligne 1341:
 </​code>​ </​code>​
  
-Le souci, c'est que le temps écoulé ici comprend (la première fois) le téléchargement et l'​expansion des archives. ​+Voici la sortie sur une machine équipée de GPUs Nvidia RTX 2080 Ti et GTX 1660 Ti. 
 + 
 +<​code>​ 
 +TIME Command being timed: "​python3 cifar10_train.py"​ 
 +TIME User time (seconds): 889.04 
 +TIME System time (seconds): 597.06 
 +TIME Elapsed (wall clock) time : 234.10 
 +TIME Percent of CPU this job got: 634% 
 +TIME Average shared text size (kbytes): 0 
 +TIME Average unshared data size (kbytes): 0 
 +TIME Average stack size (kbytes): 0 
 +TIME Average total size (kbytes): 0 
 +TIME Maximum resident set size (kbytes): 5098888 
 +TIME Average resident set size (kbytes): 0 
 +TIME Major (requiring I/O) page faults: 329 
 +TIME Minor (reclaiming a frame) page faults: 1227196 
 +TIME Voluntary context switches: 15535406 
 +TIME Involuntary context switches: 8247917 
 +TIME Swaps: 0 
 +TIME File system inputs: 10117019 
 +TIME File system outputs: 1282614 
 +TIME Socket messages sent: 0 
 +TIME Socket messages received: 0 
 +TIME Signals delivered: 0 
 +TIME Page size (bytes): 4096 
 +TIME Exit status: 0 
 +</​code>​ 
 + 
 +Le souci, c'est que le temps écoulé ici comprend (la première fois) le téléchargement et l'​expansion des archives. ​Pour disposer d'une comparaison objective du temps de calcul pour 10000 itérations,​ il faut relancer l'​apprentissage. 
 + 
 +Une relance du même apprentissage offre la sortie suivante : 
 + 
 +<​code>​ 
 +TIME Command being timed: "​python3 cifar10_train.py"​ 
 +TIME User time (seconds): 827.48 
 +TIME System time (seconds): 592.54 
 +TIME Elapsed (wall clock) time : 123.09 
 +TIME Percent of CPU this job got: 1153% 
 +TIME Average shared text size (kbytes): 0 
 +TIME Average unshared data size (kbytes): 0 
 +TIME Average stack size (kbytes): 0 
 +TIME Average total size (kbytes): 0 
 +TIME Maximum resident set size (kbytes): 4100296 
 +TIME Average resident set size (kbytes): 0 
 +TIME Major (requiring I/O) page faults: 0 
 +TIME Minor (reclaiming a frame) page faults: 933283 
 +TIME Voluntary context switches: 15603184 
 +TIME Involuntary context switches: 8643170 
 +TIME Swaps: 0 
 +TIME File system inputs: 5857597 
 +TIME File system outputs: 49573 
 +TIME Socket messages sent: 0 
 +TIME Socket messages received: 0 
 +TIME Signals delivered: 0 
 +TIME Page size (bytes): 4096 
 +TIME Exit status: 0 
 +</​code>​ 
 + 
 +Dans le cas d'une exécution uniquement sur CPU (ici 2 Xeon E5-2637 v4 @ 3.50GHz), nous avons comme sortie : 
 + 
 +<​code>​ 
 +TIME Command being timed: "​python3 cifar10_train.py"​ 
 +TIME User time (seconds): 21180.80 
 +TIME System time (seconds): 1391.54 
 +TIME Elapsed (wall clock) time : 1711.02 
 +TIME Percent of CPU this job got: 1319% 
 +TIME Average shared text size (kbytes): 0 
 +TIME Average unshared data size (kbytes): 0 
 +TIME Average stack size (kbytes): 0 
 +TIME Average total size (kbytes): 0 
 +TIME Maximum resident set size (kbytes): 2804244 
 +TIME Average resident set size (kbytes): 0 
 +TIME Major (requiring I/O) page faults: 0 
 +TIME Minor (reclaiming a frame) page faults: 283823921 
 +TIME Voluntary context switches: 26722288 
 +TIME Involuntary context switches: 6182435 
 +TIME Swaps: 0 
 +TIME File system inputs: 5857601 
 +TIME File system outputs: 83979 
 +TIME Socket messages sent: 0 
 +TIME Socket messages received: 0 
 +TIME Signals delivered: 0 
 +TIME Page size (bytes): 4096 
 +TIME Exit status: 0 
 +</​code>​
  
 <note warning>​Exercice #26 : appliquez les commandes ci-dessus <note warning>​Exercice #26 : appliquez les commandes ci-dessus
Ligne 1335: Ligne 1435:
     - définissez la variable ''​TIME''​ pour sa métrologie     - définissez la variable ''​TIME''​ pour sa métrologie
     - déplacez vous dans le dossier ''​models/​tutorials/​image/​cifar10''​     - déplacez vous dans le dossier ''​models/​tutorials/​image/​cifar10''​
-    - modifiez comme précisé ​le dossier ​de téléchargement de TensorFlow+    - modifiez comme précisé ​les dossiers ​de téléchargement ​et de sauvegarde ​
     - modifiez le nombre d'​itérations     - modifiez le nombre d'​itérations
   * Lancez une première fois l'​apprentissage avec ''​cifar10_train.py''​   * Lancez une première fois l'​apprentissage avec ''​cifar10_train.py''​
Ligne 1344: Ligne 1444:
   * Lancez une seconde fois l'​apprentissage   * Lancez une seconde fois l'​apprentissage
     - notez les informations de sortie préfixées par ''​TIME''​     - notez les informations de sortie préfixées par ''​TIME''​
-  * Lancez une seconde fois l'​apprentissage avec ''​CUDA_VISIBLE_DEVICES="" ​''​+  * Lancez une seconde fois l'​apprentissage avec ''​CUDA_VISIBLE_DEVICES=' ' ​''​
     - notez les informations de sortie     - notez les informations de sortie
   * Comparez les résultats   * Comparez les résultats
-    * Qu'​apporte le GPU comme performance par rapport au processeur ?+    * Qu'​apporte le GPU comme gain de performance par rapport au processeur ?
 </​note>​ </​note>​
  
Ligne 1367: Ligne 1467:
 </​note>​ </​note>​
  
-En cas de difficultés,​ appliquez la [[formation:​insa2018gpu:insa2018gromacs4stretch|recette de Gromacs pour Debian Stretch]] ;-)+En cas de difficultés,​ appliquez la [[formation:​cbp20190606gpu:gromacs4stretch|recette de Gromacs pour Debian Stretch]] ;-)
  
 <note warning>​Exercice #28 : Exécutez l'​exemple ''​1536'' ​ <note warning>​Exercice #28 : Exécutez l'​exemple ''​1536'' ​
Ligne 1404: Ligne 1504:
 </​note>​ </​note>​
  
-En cas de difficultés,​ appliquez la [[formation:​insa2018gpu:insa2018pkdgrav4stretch|recette d'un PKDGRAV3 pour Debian Stretch]] ;-)+En cas de difficultés,​ appliquez la [[formation:​cbp20190606gpu:pkdgrav4stretch|recette d'un PKDGRAV3 pour Debian Stretch]] ;-)
  
 ===== Conclusion ===== ===== Conclusion =====
Ligne 1412: Ligne 1512:
 L'​exploitation de "codes métier"​ vous aura aussi permis d'​entrevoir la difficulté d'​intégrer et d'​exécuter des programmes dans des environnements pourtant bien homogènes : toutes les stations exploitées ont exactement le même système d'​exploitation,​ [[developpement:​productions:​SIDUS|SIDUS]]. Les "​astuces"​ permettant de simplement pouvoir exécuter les programmes illustraient aussi que, sans expérience,​ difficile de s'en sortir. L'​exploitation de "codes métier"​ vous aura aussi permis d'​entrevoir la difficulté d'​intégrer et d'​exécuter des programmes dans des environnements pourtant bien homogènes : toutes les stations exploitées ont exactement le même système d'​exploitation,​ [[developpement:​productions:​SIDUS|SIDUS]]. Les "​astuces"​ permettant de simplement pouvoir exécuter les programmes illustraient aussi que, sans expérience,​ difficile de s'en sortir.
  
- --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] CC BY-NC-SA ​2018/11/26 15:37//+ --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] CC BY-NC-SA ​2019-06-11//
formation/cbp20190606gpu.1559577852.txt.gz · Dernière modification: 2019/06/03 18:04 par equemene