2015-01-13 7 views
1

sbatch 스크립트에서 SLURM이 작업을 시작하는 방식에 대해 고민 중입니다. SLURM이 --ntasks 인수를 무시하고 즉시 내 배치 파일에있는 모든 srun 작업을 시작한 것 같습니다. 여기에 예제에 유래에 this answer의 코드에 약간의 수정을 사용한다 : 나는 그것이 srun sleep 10 명령이 완료된 후 실행하도록 기대하는 반면 slurm이 요청한 것보다 많은 작업을 시작한 것 같습니다

$ salloc --ntasks=1 --ntasks-per-core=1 
salloc: Granted job allocation 1172 
$ srun -n 1 sleep 10 & time srun -n 1 echo ok 
[1] 5023 
srun: cluster configuration lacks support for cpu binding 
srun: cluster configuration lacks support for cpu binding 
ok 

real 0m0.052s 
user 0m0.004s 
sys 0m0.012s 

그래서 내 설치에 srun echo 명령이 즉시 실행되고있다.

SLURM 2.6.5를 사용하여 개인 워크 스테이션에서 8 개의 코어를 사용하여 작업을 예약 및 제출하고 직접 설치 했으므로 구성이 완벽하게 가능합니다. 여기에 slurm.conf 파일에서 일부 관련 부분은 다음과 같습니다

다음
# SCHEDULING 
SchedulerType=sched/backfill 
SelectType=select/cons_res 
SelectTypeParameters=CR_CPU 
# COMPUTE NODES 
NodeName=Tom NodeAddr=localhost CPUs=7 RealMemory=28100 State=UNKNOWN 
PartitionName=Tom Nodes=Tom Default=YES MaxTime=INFINITE State=UP 

printenv | grep SLURM의 출력입니다 salloc --ntasks=1

SLURM_NODELIST=Tom 
SLURM_NODE_ALIASES=(null) 
SLURM_MEM_PER_CPU=4100 
SLURM_NNODES=1 
SLURM_JOBID=1185 
SLURM_NTASKS=1 
SLURM_TASKS_PER_NODE=1 
SLURM_JOB_ID=1185 
SLURM_SUBMIT_DIR=/home/tom/ 
SLURM_NPROCS=1 
SLURM_JOB_NODELIST=Tom 
SLURM_JOB_CPUS_PER_NODE=1 
SLURM_SUBMIT_HOST=Tom 
SLURM_JOB_NUM_NODES=1 

내가 어떤 의견이나 제안을 감사하겠습니다 실행 한 후. 더 많은 정보가 필요한지 알려주십시오. 읽기

감사합니다,

업데이트

좀 더 주위에 재생 후 나는 약간의 진전을하지만, 난 여전히 아주 내가 원하는 동작을받지 못했습니다. 내가 --exclusive를 사용하는 경우

은 내가 echo 단계는 sleep 단계를 기다려야 얻을 수 있습니다 :

salloc --ntasks=1 
salloc: Granted job allocation 2387 
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok 
[1] 16602 
ok 
[1]+ Done     srun -n 1 --exclusive sleep 10 

real 0m10.094s 
user 0m0.017s 
sys 0m0.037s 

salloc --ntasks=2 
salloc: Granted job allocation 2388 
srun -n 1 --exclusive sleep 10 & time srun -n 1 --exclusive echo ok 
[1] 16683 
ok 

real 0m0.067s 
user 0m0.005s 
sys 0m0.020s 

하지만 난 아직도 내가 경우 제대로이를 수행하는 방법을 모른다 각 단계마다 여러 프로세서가 필요한 다중 단계 작업 실행

salloc --ntasks=6 
salloc: Granted job allocation 2389 
srun -n 2 --exclusive stress -c 2 & 
srun -n 2 --exclusive stress -c 2 & 
srun -n 2 --exclusive stress -c 2 & 

는 뜻으로, 나에게 12 개 stress 프로세스를 줄 것이다

salloc --ntasks=6 
salloc: Granted job allocation 2390 
srun -n 1 --exclusive stress -c 2 & 
srun -n 1 --exclusive stress -c 2 & 
srun -n 1 --exclusive stress -c 2 & 
srun -n 1 --exclusive stress -c 2 & 
srun -n 1 --exclusive stress -c 2 & 
srun -n 1 --exclusive stress -c 2 & 

그래서 난 내 sbatch 스크립트가 6 프로세서를 타고 2 개 프로세서와 함께 한 번에 세 단계 각각을 시작하려면 어떻게해야합니까 ? srun --exclusive -n 1 -c 2 stress -c 2을 사용하는 것이 맞습니까?

+1

하이퍼 스레딩을 사용하도록 설정 했습니까? '--ntasks-per-core = 1' 부분을 제거해보십시오. 또한''salloc''을 실행 한 후에''printenv | grep SLURM''의 출력을 공유 할 수 있습니까? – damienfrancois

+0

@damienfrancois, 답장을 보내 주셔서 감사합니다. 프로세서는 하이퍼 스레딩 기능이없는 E5-2609입니다. '--ntasks-per-core = 1'을 제거해도 도움이되지는 않았지만,'printenv | grep SLURM'. –

+0

'--ntasks-per-core = 1'을 삭제해도 클러스터 구성이 CPU 바인딩에 대한 지원이 부족합니다. –

답변

2

누락 된 부분은 --exclusive--cpus-per-task 인수라고 생각합니다. 내가 찾고있는 행동을 얻을

salloc --ntasks=6 
salloc: Granted job allocation 2457 
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 & 
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 & 
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 & 
srun --exclusive --ntasks=1 --cpus-per-task=2 stress -c 2 & 

이것은 6 stress 프로세스를 시작합니다; 4 번째 stress 명령은 끝에서 차례를 기다립니다.

이것은 분명 할 수도 있지만 알아내는 데 시간이 걸렸습니다!