내장 플러그인으로 SLURM을 실행하는 클러스터에서 GPU를 일반 리소스로 요청하는 이유는 무엇입니까?


10

면책 조항 :이 게시물은 모든 관련 구성 정보를 제공하려고 시도한 한 상당히 깁니다.

상태 및 문제 :

GPU 클러스터를 관리하고 작업 관리에 slurm을 사용하고 싶습니다. 불행히도, 나는 slurm의 각각의 일반 리소스 플러그인을 사용하여 GPU를 요청할 수 없습니다.

참고 : test.sh는 환경 변수 CUDA_VISIBLE_DEVICES를 인쇄하는 작은 스크립트입니다.

작업을 --gres=gpu:1완료하지 못했습니다

실행 srun -n1 --gres=gpu:1 test.sh하면 다음 오류가 발생합니다.

srun: error: Unable to allocate resources: Requested node configuration is not available

로그:

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

작업 --gres=gram:500수행 완료

srun -n1 --gres=gram:500 test.sh그러나 전화 하면 작업이 실행되고 인쇄됩니다.

CUDA_VISIBLE_DEVICES=NoDevFiles

로그:

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

따라서 slurm은 srun요청 된 일반 자원을 사용하여 작업을 실행하도록 올바르게 구성된 것처럼 보이지만 --gres어떤 이유로 gpus를 인식하지 못합니다.

첫 번째 아이디어는 다른 일반 리소스가 작동하는 것처럼 보이지만 gpu 플러그인에 충실하고 싶을 때 gpu 일반 리소스에 다른 이름을 사용하는 것이 었습니다.

구성

클러스터에는 두 개 이상의 슬레이브 호스트가 있지만 명확성을 위해 약간 다르게 구성된 두 개의 슬레이브 호스트와 컨트롤러 호스트 인 papa (컨트롤러), smurf01 및 smurf02를 사용합니다. '

slurm.conf

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
...

참고 : 램은 GB, 그램은 MB, 스크래치는 GB로 다시 표시됩니다.

출력 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

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

smurf02 구성

GPU

smurf01과 동일한 구성 / 출력.

smurf02의 gres.conf

Name=gpu Count=8 Type=tesla File=/dev/nvidia[0-7]
Name=ram Count=48
Name=gram Count=6000
Name=scratch Count=1300

참고 : 데몬이 다시 시작되었고 시스템도 다시 부팅되었습니다. slurm 및 job submissioning 사용자는 슬레이브 및 컨트롤러 노드에서 동일한 ID / 그룹을 가지며 munge 인증이 올바르게 작동합니다.

로그 출력

DebugFlags=Gresslurm.conf 파일에 추가 했는데 플러그인이 GPU를 인식하는 것 같습니다.

컨트롤러 로그

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

슬레이브 로그

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?
NNWizard

@NMWizard 지정된 형식이없는 것과 매우 같습니다.
Pixchem

답변:


1

설치된 버전 ( 14.11.5) 의 Slurm 은 GPU에 할당 된 유형에 문제가있는 것으로 보입니다. 따라서 노드 구성 라인을 제거 Type=...하고 gres.conf그에 따라 노드 구성 라인을 변경하면 Gres=gpu:N,ram:...gpus via를 필요로하는 작업이 성공적으로 실행됩니다 --gres=gpu:N.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.