Avertissement: ce message est assez long car j'ai essayé de fournir toutes les informations de configuration pertinentes.
Statut et problème:
J'administre un cluster gpu et je veux utiliser slurm pour la gestion des tâches. Malheureusement, je ne peux pas demander de GPU en utilisant le plugin de ressources générique respectif de slurm.
Remarque: test.sh est un petit script imprimant la variable d'environnement CUDA_VISIBLE_DEVICES.
L'exécution du travail avec --gres=gpu:1
n'est pas terminée
L'exécution srun -n1 --gres=gpu:1 test.sh
entraîne l'erreur suivante:
srun: error: Unable to allocate resources: Requested node configuration is not available
Journal:
gres: gpu state for job 83
gres_cnt:4 node_cnt:0 type:(null)
_pick_best_nodes: job 83 never runnable
_slurm_rpc_allocate_resources: Requested node configuration is not available
Exécution du travail avec les tâches --gres=gram:500
terminées
Si j'appelle srun -n1 --gres=gram:500 test.sh
cependant, le travail s'exécute et s'imprime
CUDA_VISIBLE_DEVICES=NoDevFiles
Journal:
sched: _slurm_rpc_allocate_resources JobId=76 NodeList=smurf01 usec=193
debug: Configuration for job 76 complete
debug: laying out the 1 tasks on 1 hosts smurf01 dist 1
job_complete: JobID=76 State=0x1 NodeCnt=1 WIFEXITED 1 WEXITSTATUS 0
job_complete: JobID=76 State=0x8003 NodeCnt=1 done
Ainsi, slurm semble être correctement configuré pour exécuter des travaux à l'aide srun
des ressources génériques demandées, --gres
mais ne reconnaît pas le gpus pour une raison quelconque.
Ma première idée a été d'utiliser un autre nom pour la ressource générique gpu car les autres ressources génériques semblent fonctionner mais j'aimerais m'en tenir au plugin gpu.
Configuration
Le cluster a plus de deux hôtes esclaves, mais pour plus de clarté, je m'en tiendrai à deux hôtes esclaves légèrement configurés différemment et à l'hôte contrôleur: papa (contrôleur), smurf01 et smurf02.´
slurm.conf
Les parties génériques-resrouce-pertinentes de la configuration slurm:
...
TaskPlugin=task/cgroup
...
GresTypes=gpu,ram,gram,scratch
...
NodeName=smurf01 NodeAddr=192.168.1.101 Feature="intel,fermi" Boards=1 SocketsPerBoard=2 CoresPerSocket=6 ThreadsPerCore=2 Gres=gpu:tesla:8,ram:48,gram:no_consume:6000,scratch:1300
NodeName=smurf02 NodeAddr=192.168.1.102 Feature="intel,fermi" Boards=1 SocketsPerBoard=2 CoresPerSocket=6 ThreadsPerCore=1 Gres=gpu:tesla:8,ram:48,gram:no_consume:6000,scratch:1300
...
Remarque: le ram est en Go, le gramme est en Mo et le scratch en Go à nouveau.
Sortie de scontrol show node
NodeName=smurf01 Arch=x86_64 CoresPerSocket=6
CPUAlloc=0 CPUErr=0 CPUTot=24 CPULoad=0.01 Features=intel,fermi
Gres=gpu:tesla:8,ram:48,gram:no_consume:6000,scratch:1300
NodeAddr=192.168.1.101 NodeHostName=smurf01 Version=14.11
OS=Linux RealMemory=1 AllocMem=0 Sockets=2 Boards=1
State=IDLE ThreadsPerCore=2 TmpDisk=0 Weight=1
BootTime=2015-04-23T13:58:15 SlurmdStartTime=2015-04-24T10:30:46
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
NodeName=smurf02 Arch=x86_64 CoresPerSocket=6
CPUAlloc=0 CPUErr=0 CPUTot=12 CPULoad=0.01 Features=intel,fermi
Gres=gpu:tesla:8,ram:48,gram:no_consume:6000,scratch:1300
NodeAddr=192.168.1.102 NodeHostName=smurf02 Version=14.11
OS=Linux RealMemory=1 AllocMem=0 Sockets=2 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1
BootTime=2015-04-23T13:57:56 SlurmdStartTime=2015-04-24T10:24:12
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
configuration de smurf01
GPU
> ls /dev | grep nvidia
nvidia0
...
nvidia7
> nvidia-smi | grep Tesla
| 0 Tesla M2090 On | 0000:08:00.0 Off | 0 |
...
| 7 Tesla M2090 On | 0000:1B:00.0 Off | 0 |
...
gres.conf
Name=gpu Type=tesla File=/dev/nvidia0 CPUs=0
Name=gpu Type=tesla File=/dev/nvidia1 CPUs=1
Name=gpu Type=tesla File=/dev/nvidia2 CPUs=2
Name=gpu Type=tesla File=/dev/nvidia3 CPUs=3
Name=gpu Type=tesla File=/dev/nvidia4 CPUs=4
Name=gpu Type=tesla File=/dev/nvidia5 CPUs=5
Name=gpu Type=tesla File=/dev/nvidia6 CPUs=6
Name=gpu Type=tesla File=/dev/nvidia7 CPUs=7
Name=ram Count=48
Name=gram Count=6000
Name=scratch Count=1300
configuration de smurf02
GPU
Même configuration / sortie que smurf01.
gres.conf sur smurf02
Name=gpu Count=8 Type=tesla File=/dev/nvidia[0-7]
Name=ram Count=48
Name=gram Count=6000
Name=scratch Count=1300
Remarque: les démons ont été redémarrés, les machines ont également été redémarrées. L'utilisateur slurm et le soumissionnaire ont les mêmes identifiants / groupes sur les nœuds esclave et contrôleur et l'authentification munge fonctionne correctement.
Sorties de journal
J'ai ajouté DebugFlags=Gres
dans le fichier slurm.conf et les GPU semblent être reconnus par le plugin:
Journal du contrôleur
gres / gpu: state for smurf01
gres_cnt found : 8 configured : 8 avail : 8 alloc : 0
gres_bit_alloc :
gres_used : (null)
topo_cpus_bitmap[0] : 0
topo_gres_bitmap[0] : 0
topo_gres_cnt_alloc[0] : 0
topo_gres_cnt_avail[0] : 1
type[0] : tesla
topo_cpus_bitmap[1] : 1
topo_gres_bitmap[1] : 1
topo_gres_cnt_alloc[1] : 0
topo_gres_cnt_avail[1] : 1
type[1] : tesla
topo_cpus_bitmap[2] : 2
topo_gres_bitmap[2] : 2
topo_gres_cnt_alloc[2] : 0
topo_gres_cnt_avail[2] : 1
type[2] : tesla
topo_cpus_bitmap[3] : 3
topo_gres_bitmap[3] : 3
topo_gres_cnt_alloc[3] : 0
topo_gres_cnt_avail[3] : 1
type[3] : tesla
topo_cpus_bitmap[4] : 4
topo_gres_bitmap[4] : 4
topo_gres_cnt_alloc[4] : 0
topo_gres_cnt_avail[4] : 1
type[4] : tesla
topo_cpus_bitmap[5] : 5
topo_gres_bitmap[5] : 5
topo_gres_cnt_alloc[5] : 0
topo_gres_cnt_avail[5] : 1
type[5] : tesla
topo_cpus_bitmap[6] : 6
topo_gres_bitmap[6] : 6
topo_gres_cnt_alloc[6] : 0
topo_gres_cnt_avail[6] : 1
type[6] : tesla
topo_cpus_bitmap[7] : 7
topo_gres_bitmap[7] : 7
topo_gres_cnt_alloc[7] : 0
topo_gres_cnt_avail[7] : 1
type[7] : tesla
type_cnt_alloc[0] : 0
type_cnt_avail[0] : 8
type[0] : tesla
...
gres/gpu: state for smurf02
gres_cnt found:TBD configured:8 avail:8 alloc:0
gres_bit_alloc:
gres_used:(null)
type_cnt_alloc[0]:0
type_cnt_avail[0]:8
type[0]:tesla
Journal esclave
Gres Name = gpu Type = tesla Count = 8 ID = 7696487 File = / dev / nvidia[0 - 7]
...
gpu 0 is device number 0
gpu 1 is device number 1
gpu 2 is device number 2
gpu 3 is device number 3
gpu 4 is device number 4
gpu 5 is device number 5
gpu 6 is device number 6
gpu 7 is device number 7
--gres=gpu:tesla:1
?