16개 코어가 있는 VPS에서 두 프로세스를 동시에 실행하려고 합니다. 각 작업에서 8개 코어를 활용하고 사용 가능한 코어 수를 최대화하고 싶습니다.
그래서 저는 다음과 같이 두 가지 별도의 프로세스를 실행할 수 있다고 생각했습니다.
$ mpirun -np 8 pmemd.MPI -O -i input_proc1.in -o output_proc1.out
$ mpirun -np 8 pmemd.MPI -O -i input_proc2.in -o output_proc2.out
이것이 코어 1-8에 프로세스 1을 배치하고 코어 9-16에 프로세스 2를 배치하는 것처럼 보였지만 분명히 그렇지 않습니다. htop
출력을 검사해 보면 두 프로세스 모두 코어 1~8로 가득 차 있어 8개의 코어가 활용되지 않는 것으로 나타났습니다.
백그라운드에서 이러한 명령을 실행하고 일련의 mpirun
명령을 별도의 두 폴더에 있는 파일에 넣고 각 명령을 다음과 같이 실행합니다.
$ nohup ./runscript.sh < /dev/null > /dev/null 2>&1 &
실행해야 하는 일련의 프로세스를 완료하는 데 며칠이 걸릴 수 있으므로 로그아웃한 후 백그라운드에서 실행되도록 합니다.
한 작업에 대해 어떻게든 8개의 코어(1-8)를 "예약"할 수 있어야 한다고 생각합니다. 그런 다음 다음 작업을 시작할 때 작업은 나머지 8개의 코어를 사용해야 하지만 아직 사용하지 못했습니다. 다음 메서드는 원하는 동작 --bind-to
옵션을 구현합니다. 이것이 OpenStack VPS 머신인 시스템과 관련이 있는지, 아니면 제가 제대로 하고 있지 않은지 잘 모르겠습니다.
저는 Ubuntu 18.04.2 LTS를 실행하는 Ubuntu VPS에서 mpirun(Open MPI) 2.1.1을 사용하고 있습니다.
원하는 동작을 달성하는 데 대한 피드백이나 제안을 주시면 감사하겠습니다.
감사합니다
답변1
그래서 더 깊이 파고든 후에 내 질문에 대한 답을 찾았습니다.스택 오버플로. 내 목적을 위해 apt-get
다음 hwloc
명령을 설치하여 사용 가능한 코어를 매핑 lstopo -p
한 후 명령을 실행했습니다.
$ nohup mpirun --cpu-set 0-7 --bind-to core -np 8 pmemd.MPI [arguments]
$ nohup mpirun --cpu-set 8-15 --bind-to core -np 8 pmemd.MPI [arguments]
이는 첫 번째 작업을 처음 8개 코어에 성공적으로 배포하고 두 번째 작업을 나머지 8개 코어에 성공적으로 배포하여 사용 가능한 16개 코어를 모두 활용합니다.
나중에 누군가가 이 질문을 우연히 발견할 경우를 대비해 여기에 답변을 게시하겠다고 생각했습니다.