Descargo de responsabilidad: esta publicación es bastante larga ya que intenté proporcionar toda la información de configuración relevante.
Estado y problema:
Administro un clúster de gpu y quiero usar slurm para la gestión de trabajos. Desafortunadamente, no puedo solicitar GPU utilizando el complemento de recursos genéricos respectivo de slurm.
Nota: test.sh es un pequeño script que imprime la variable de entorno CUDA_VISIBLE_DEVICES.
Ejecutar trabajo con --gres=gpu:1
no se completa
srun -n1 --gres=gpu:1 test.sh
Resultados en ejecución en el siguiente error:
srun: error: Unable to allocate resources: Requested node configuration is not available
Iniciar sesión:
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
Ejecutando trabajo con --gres=gram:500
completa
srun -n1 --gres=gram:500 test.sh
Sin embargo, si llamo , el trabajo se ejecuta e imprime
CUDA_VISIBLE_DEVICES=NoDevFiles
Iniciar sesión:
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
Por lo tanto, slurm parece estar configurado correctamente para ejecutar trabajos srun
con los recursos genéricos solicitados, --gres
pero no reconoce el gpus por alguna razón.
Mi primera idea fue usar otro nombre para el recurso genérico gpu ya que los otros recursos genéricos parecen funcionar, pero me gustaría seguir con el complemento gpu.
Configuración
El clúster tiene más de dos hosts esclavos, pero en aras de la claridad, me quedaré con dos hosts esclavos configurados de forma ligeramente diferente y el host del controlador: papa (controlador), smurf01 y smurf02.´
slurm.conf
Las partes genéricas relevantes para el recurso de la configuración 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
...
Nota: ram está en GB, gram está en MB y scratch en GB nuevamente.
Salida 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
configuración 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
configuración de smurf02
GPU
Misma configuración / salida que smurf01.
gres.conf en smurf02
Name=gpu Count=8 Type=tesla File=/dev/nvidia[0-7]
Name=ram Count=48
Name=gram Count=6000
Name=scratch Count=1300
Nota: Los demonios se han reiniciado, las máquinas también se han reiniciado. La slurm y el usuario que envía el trabajo tienen los mismos identificadores / grupos en los nodos esclavo y controlador y la autenticación Munge funciona correctamente.
Salidas de registro
He añadido DebugFlags=Gres
en el archivo slurm.conf y las GPU parece ser reconocido por el plugin:
Registro del controlador
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
Registro esclavo
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
?