Soumission interactive avec utilisation des GPUS

  • Les sockets de calcul disponibles avec une carte graphique sont données par la commande topology:
[homer@hulk]$ topology --gfx
Index   Location    NASID  PCI Address    X Display       Device
---------------------------------------------------------------------
    0 r001i01b00h0      0  0000:08:00.0        -  Matrox Electronics Systems Ltd. G200eR2
    8 r001i01b04h0     16  0004:01:00.0     :0.0  NVIDIA GK110GL [Tesla K20m]
    9 r001i01b05h0     20  0005:01:00.0     :0.1  NVIDIA GK110GL [Tesla K20m]
   47 r001i33b00h1     98  0006:02:00.0     :0.2  NVIDIA GK107GL [Quadro K2000D]
   55 r001i33b04h1    114  0007:02:00.0     :0.3  NVIDIA GK107GL [Quadro K2000D]

L'utilisation d'une carte graphique nécessite donc l'utilisation d'un des 4 sockets disponibles : 8,9,47 ou 55.
Si le socket (ou vnode dans la syntaxe PBS n'est pas renseigné, PBS sélectionnera le premier disponible.
On peut sélectionner le socket suivant les besoins en ajoutant le mot clé vnode=hulk[XX] dans les ressources retenues
Il faut enfin sélectionner le bon display associé au socket lors de l'utilisation de vglrun avec l'option -d.

  • Pour pouvoir ensuite utiliser une carte graphique pendant une session de travail, il faut spécifier la queue visuq à PBS qui pointe vers les sockets disposant de carte graphique:
    [homer@hulk ~]$ qsub -I -l select=1:ncpus=1:vnode=hulk[47] -V -q visuq -l walltime=00:60:00
    
  • On peut laisser PBS choisir le socket, la queue visuq attribuant automatiquement les ressources :
    [homer@hulk ~]$ qsub -I -l select=1:ncpus=1 -V -q visuq -l walltime=00:60:00
    
  • La commande ci-dessus va lancer une session interactive (-I), en chargant l'ensemble des variables de votre shell (-V) et en sélectionnant une ressource comportant une carte graphique.
    Pour ensuite attribuer le bon display, il faut rajouter certaines commandes (ou sélectionner directement le display associé au socket sélectionné dans la commande vglrun, ici 47 correspond au display :0.2, donné par la commande topology -gfx):
    [homer@hulk ~]$ core_nb=$(taskset -cp $$ | awk -F '[, :-]' '{print $7}')
    [homer@hulk ~]$ node_nb=$(lscpu -e | awk -v core_nb=$core_nb '$1 == core_nb { print $2}')
    [homer@hulk ~]$ display=$(topology -gfx | awk -v node_nb=$node_nb '$1 == node_nb { print $5}')
    [homer@hulk ~]$ echo $display # pour verification
    :0.2
    

Enfin on peut lancer la commande utilisant le rendu graphique :

[homer@hulk ~]$  vglrun -d $display glxgears # ou un code...
...
  • Un script disponible sous /sw/tools/bin permet de récupérer directement le display associé au noeud :
    [homer@hulk ~]$ qsub -I -q visuq -l select=1:ncpus=16:vnode=hulk[55]:mem=30GB -V -l walltime=04:00:00
    qsub: waiting for job 9002.hulk to start
    qsub: job 9002.hulk ready
    
    cd /home/homer/pbs.9002.hulk.x8z
    [homer@hulk ~]$ which get_display
    /sw/tools/bin/get_display
    [homer@hulk ~]$ get_display
    :0.3
    [homer@hulk ~]$  vglrun -d `get_display` glxgears # ou un code...
    ...
    
  • On peut visualiser l'utilisation des GPUS avec la commande nvidia-smi :
[homer@hulk ~]$ nvidia-smi
Tue Sep 15 18:15:35 2015
+------------------------------------------------------+
| NVIDIA-SMI 352.30     Driver Version: 352.30         |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20m          On   | 0004:01:00.0     Off |                    0 |
| N/A   28C    P0    47W / 225W |    124MiB /  4799MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K20m          On   | 0005:01:00.0     Off |                    0 |
| N/A   24C    P8    16W / 225W |     29MiB /  4799MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Quadro K2000D       On   | 0006:02:00.0      On |                  N/A |
| 30%   28C    P8    N/A /  N/A |     23MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Quadro K2000D       On   | 0007:02:00.0      On |                  N/A |
| 30%   29C    P8    N/A /  N/A |     23MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0     35594    G   /usr/bin/Xorg                                   22MiB |
|    0    660093    G   /data/apps/abaqus/6.13-1/code/bin/ABQcaeK        2MiB |
|    1     35594    G   /usr/bin/Xorg                                   14MiB |
|    2     35594    G   /usr/bin/Xorg                                   14MiB |
|    3     35594    G   /usr/bin/Xorg                                   14MiB |
+-----------------------------------------------------------------------------+