MPI를 사용하여 여러 CPU에서 코드를 실행하려고합니다.할당 된 모든 CPU를 사용하지 않는 MPI
내가 사용하여 실행 : 나는 12 개의 CPU와 8 개 노드, 각각의 클러스터에서 실행 해요
$ mpirun -np 24 python mycode.py
. 24 개의 프로세스가 모든 노드에 분산되어 있습니다.
노드 node1, node2, ..., node8을 호출하고 마스터 프로세스가 node1에 있고 내 작업이 실행중인 유일한 노드라고 가정합시다. 따라서 node1에는 마스터 프로세스와 몇 개의 슬레이브 프로세스가 있고 나머지 노드에는 슬레이브 프로세스 만 있습니다.
마스터 프로세스 (예 : node1)가있는 노드 만 사용됩니다. node2-8에는 ~ 0의로드가 있고 node1에는 ~ 24의로드가 있습니다 (각 노드의로드가 해당 노드의 내 작업에 할당 된 CPU의 수와 거의 같을 것으로 예상하는 반면). 또한, 함수가 평가 될 때마다, 나는 실행중인 호스트의 이름을 출력하고 매번 "node1"을 출력한다. 마스터 프로세스가 아무 것도하지 않는지 아니면 마스터 노드와 동일한 노드의 슬레이브 프로세스도 사용되는지는 알 수 없습니다.
내가 현재 실행중인 클러스터가 최근에 업그레이드되었습니다. 업그레이드하기 전에 동일한 코드를 사용하고 예상대로 동작했습니다 (예 : 24 개의 CPU를 요청하면 24 개의 CPU를 사용하고 24 개의 CPU를 모두 사용함). 이 문제는 업그레이드 이후에만 발생하므로 어딘가에서 설정이 변경되거나 재설정 된 것으로 가정합니다. 누구든지이 문제를 전에 보았고 그것을 고칠 수있는 방법을 알고 있습니까?
편집 : 이것은 사용하여 스케줄러 작업으로 제출 : 클러스터 SGE를 실행
#!/bin/bash
#
#$ -cwd
#$ -pe * 24
#$ -o $JOB_ID.out
#$ -e $JOB_ID.err
#$ -r no
#$ -m n
#$ -l h_rt=24:00:00
echo job_id $JOB_ID
echo hostname $HOSTNAME
mpirun -np $NSLOTS python mycode.py
내가 사용하여이 작업 제출
qsub myjob
업그레이드 후, MPI 구현이 SGE 지원으로 재구성되지 않았을 가능성이 있습니다.이 경우,'mpirun'을 명시 적으로 실행해야 할 호스트 목록을 찾을 곳을 말해야합니다. 시스템 구성에 따라'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py'와 같이 작동해야합니다. 하지만 이것은 시스템 관리자가 설정해야하는 모든 것입니다. 당신은'hostname'을 mpirun 할 수 있어야합니다 (vs'python mycode.py')를 여러분이 기대하는 호스트를 얻고있는 빠른 테스트라고합니다. –
sys 관리자는 MPI가 SGE 지원과 함께 설치되었다고 말합니다. 그러나 hostfile을 설정하면 효과가 있습니다. 그리고 mpirun 호스트 이름 사용에 관한 팁은 테스트에 매우 유용했습니다. 테스트로 호스트 이름을 인쇄했지만 더 복잡한 방법으로 - 당신의 방법은 훨씬 빠릅니다! – Laura