2017-09-05 36 views
1

우리는 slurm salloc gpu 할당에 대한 조언을 찾고 있습니다. 현재 주어진 :작업 당 1 GPU의 slurm/salloc을 설정하는 방법은 무엇입니까? 작업은 여러 GPU를 사용합니까?

% salloc -n 4 -c 2 -gres=gpu:1 
% srun env | grep CUDA 
CUDA_VISIBLE_DEVICES=0 
CUDA_VISIBLE_DEVICES=0 
CUDA_VISIBLE_DEVICES=0 
CUDA_VISIBLE_DEVICES=0 

그러나 우리는 단지 장치 0 이상을 원합니다.
다음을 얻으려면 srun/mpirun을 사용하여 salloc을 지정하는 방법이 있습니까? 각 작업은 1 개 GPU를 얻을 수 있음을

CUDA_VISIBLE_DEVICES=0 
CUDA_VISIBLE_DEVICES=1 
CUDA_VISIBLE_DEVICES=2 
CUDA_VISIBLE_DEVICES=3 

는 필요하지만, 전체 GPU 사용량은 4 개 가능한 장치 (아래 gres.conf 참조)들 사이에 전염됩니다. 모든 작업이 device = 0을 얻는 곳이 아닙니다.

그런 식으로 각 작업은 현재의 경우와 같이 다른 작업에서 자유 로워지기 위해 장치 0에서 대기하지 않습니다.

4 개의 작업에 대해 1 gpu 이상/무료 (총 4 개)가 있더라도 예상되는 동작입니까? 우리는 무엇을 놓치고 오해 하는가?

  • salloc/srun 매개 변수?
  • slurm.conf 또는 gres.conf 설정?

요약 우리는 각 순위/작업 1 개 GPU를 사용하도록 slurm와 MPI를 사용할 수 있도록하려면,하지만 작업을 확산 할 수있는 작업은/4의 GPU들 중 하나입니다. 현재 우리는 장치 0에만 국한되어있는 것으로 보입니다. 또한 mpi 사용으로 인해 salloc/sbatch 내에서 여러 srun 제출을 피하고자합니다.

OS : CentOS는 7

Slurm 버전 : 16.05.6

우리가 이것에 대한 wrapper based methods을 사용하도록 강요?

gpus가 어떻게 할당되는지 slurm 버전 (14에서 16)과 차이가 있습니까?

감사합니다.

참조 : gres.conf 우선은, --gres=gpu:1으로

% salloc -n 4 -c 2 -gres=gpu:4 

4 개 개의 GPU를 요청하려고

Name=gpu File=/dev/nvidia0 
Name=gpu File=/dev/nvidia1 
Name=gpu File=/dev/nvidia2 
Name=gpu File=/dev/nvidia3 

답변

1

, 그것은 모든 작업이 하나 개의 GPU를 참조 예상되는 동작입니다. --gres=gpu:4으로, 출력은 래퍼 스크립트를 사용하거나 다음과 같이 당신의 srun 명령을 수정할 수

CUDA_VISIBLE_DEVICES=0,1,2,3 
CUDA_VISIBLE_DEVICES=0,1,2,3 
CUDA_VISIBLE_DEVICES=0,1,2,3 
CUDA_VISIBLE_DEVICES=0,1,2,3 

당신이 원하는 것을 얻으려면 다음과 같습니다

srun bash -c 'CUDA_VISIBLE_DEVICES=$SLURM_PROCID env' | grep CUDA 

는 당신이 얻을 것이다

CUDA_VISIBLE_DEVICES=0 
CUDA_VISIBLE_DEVICES=1 
CUDA_VISIBLE_DEVICES=2 
CUDA_VISIBLE_DEVICES=3 
+1

답장을 보내 주셔서 감사합니다. 우리는'--c, --cpus-per-task ='옵션의 동작처럼'--gres = gpu : 1'이 실제로'--gres_per_task = gpu : 1'이 될 것으로 기대하고있었습니다. 그러나'--gres_per_node = gpu : 1'처럼 보입니다.우리는 또한 wrapper 기반의 메소드를 피하기를 희망한다. 우리는 slurm이이 사용 사례를 처리 할 수 ​​있어야한다고 생각 했었습니다. 우리의 기대는 상당히 일반적 일 것이기 때문입니다. –

+0

@CharlieHemlock 예'--gres'는 태스크마다가 아니라 노드마다 있습니다. 나는 당 작업 요청이 그 공통점 일지 확신하지 못한다. 대부분의 경우 작업은 독립적이며 작업 배열로 제출되거나 독립적이지 않으며 MPI 작업의 일부로 노드의 모든 GPU를 완전히 제어하고 작업을 GPU에 배포합니다. 손에있는 응용 프로그램을위한 최선의 방법. – damienfrancois