2017-03-27 5 views
0

Je suis confronté à un problème étrange avec l'affectation de couple des GPU. J'utilise Torque 6.1.0 sur une seule machine dotée de deux GPU NVIDIA GTX Titan X. Il s'agit de la version 6.1.0 de Torque 6.1.0. J'utilise pbs_sched pour la planification. sortie nvidia-smi au repos est la suivante:Les jobs de couple ne peuvent pas trouver de GPU lorsque CUDA_VISIBLE_DEVICES n'est pas égal 0

+-----------------------------------------------------------------------------+ 
| NVIDIA-SMI 375.39     Driver Version: 375.39     | 
|-------------------------------+----------------------+----------------------+ 
| GPU Name  Persistence-M| Bus-Id  Disp.A | Volatile Uncorr. ECC | 
| Fan Temp Perf Pwr:Usage/Cap|   Memory-Usage | GPU-Util Compute M. | 
|===============================+======================+======================| 
| 0 GeForce GTX TIT... Off | 0000:03:00.0  On |     N/A | 
| 22% 40C P8 15W/250W |  0MiB/12204MiB |  0% E. Process | 
+-------------------------------+----------------------+----------------------+ 
| 1 GeForce GTX TIT... Off | 0000:04:00.0  Off |     N/A | 
| 22% 33C P8 14W/250W |  0MiB/12207MiB |  0% E. Process | 
+-------------------------------+----------------------+----------------------+ 

+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| No running processes found             | 
+-----------------------------------------------------------------------------+ 

J'ai un script de test simple pour évaluer l'affectation des GPU comme suit:

#PBS -S /bin/bash 
#PBS -l nodes=1:ppn=1:gpus=1:reseterr:exclusive_process 

echo "CUDA_VISIBLE_DEVICES: $CUDA_VISIBLE_DEVICES" 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 

deviceQuery est l'utilitaire qui vient avec CUDA. Lorsque je l'exécute à partir de la ligne de commande, il trouve correctement les deux GPU. Quand je limiterai à un appareil de la ligne de commande comme ça ...

CUDA_VISIBLE_DEVICES=0 ~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 
#or 
CUDA_VISIBLE_DEVICES=1 ~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery 

... il trouve aussi bien un ou l'autre GPU.

Lorsque j'exécute test.sh dans la file d'attente avec qsub, et lorsque aucun autre travail n'est en cours, il fonctionne de nouveau correctement. Voici le résultat:

CUDA_VISIBLE_DEVICES: 0 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting... 

CUDA Device Query (Runtime API) version (CUDART static linking) 

Detected 1 CUDA Capable device(s) 

Device 0: "GeForce GTX TITAN X" CUDA Driver Version/Runtime Version   8.0/8.0 CUDA Capability Major/Minor version number: 5.2 Total amount of global memory:     12204 MBytes (12796887040 bytes) (24) Multiprocessors, (128) CUDA Cores/MP:  3072 CUDA Cores GPU Max Clock rate:     1076 MHz (1.08 GHz) Memory Clock rate:        3505 Mhz Memory Bus Width:        384-bit L2 Cache Size:         3145728 bytes Maximum Texture Dimension Size (x,y,z)   1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory:    65536 bytes Total amount of shared memory per block:  49152 bytes Total number of registers available per block: 65536 Warp size:          32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block:   1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch:   2147483647 bytes Texture alignment:        512 bytes Concurrent copy and kernel execution:   Yes with 2 copy engine(s) Run time limit on kernels:      No Integrated GPU sharing Host Memory:   No Support host page-locked memory mapping:  Yes Alignment requirement for Surfaces:   Yes Device has ECC support:      Disabled Device supports Unified Addressing (UVA):  Yes Device PCI Domain ID/Bus ID/location ID: 0/3/0 Compute Mode: 
    < Exclusive Process (many threads in one process is able to use ::cudaSetDevice() with this device) > 

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX TITAN X Result = PASS 

Cependant, si un travail est déjà en cours d'exécution sur gpu0 (à savoir si elle est affectée CUDA_VISIBLE_DEVICES = 1), le travail ne peut pas trouver des processeurs graphiques. Sortie:

CUDA_VISIBLE_DEVICES: 1 
~/test/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/deviceQuery Starting... 

CUDA Device Query (Runtime API) version (CUDART static linking) 

cudaGetDeviceCount returned 38 
-> no CUDA-capable device is detected 
Result = FAIL 

Quelqu'un sait ce qui se passe ici?

+0

J'ai vu beaucoup de correctifs GPU/CUDA récents en 6.1-dev. Cela pourrait valoir la peine d'essayer contre cette branche pour voir comment elle se comporte. – clusterdude

+0

Merci @clusterdude. Je ne pouvais pas travailler en 6.1, mais le même problème est présent en 6.1.1 – Shaun

Répondre

0

Je pense que j'ai résolu mon propre problème, mais j'ai malheureusement essayé deux choses à la fois. Je ne veux pas revenir en arrière et confirmer qui a résolu le problème. Il s'agit de l'un des éléments suivants:

  1. Supprimez l'option --enable-cgroups du script de configuration de Torque avant de créer.

  2. L'exécution de ces étapes dans le processus d'installation du couple:

    faire des paquets

    sh torque-package-server-linux-x86_64.sh --install

    sh couple paquet-MAMAN linux-x86_64.sh --install

    sh torque-package-clients-linux-x86_64.sh --install

Pour la deuxième option, je sais que ces étapes sont correctement documentées dans les instructions d'installation du couple. Cependant, j'ai une configuration simple où j'ai juste un seul noeud (le noeud de calcul et le serveur sont la même machine). Je pensais que 'make install' devrait faire tout ce que le paquetage fait pour ce seul noeud, mais peut-être que je me suis trompé.