Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
formation:cbp20190606gpu [2019/06/04 15:12] equemene [Exploitation en Deep Learning avec TensorFlow] |
formation:cbp20190606gpu [2019/06/06 18:31] equemene [CBP 2019 : le GPU par la pratique] |
||
---|---|---|---|
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/FormationGPU_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 1327: | 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 1346: | 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 | ||
Ligne 1369: | 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 1406: | 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 ===== |