2013-07-10 2 views
2

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 
+0

업그레이드 후, MPI 구현이 SGE 지원으로 재구성되지 않았을 가능성이 있습니다.이 경우,'mpirun'을 명시 적으로 실행해야 할 호스트 목록을 찾을 곳을 말해야합니다. 시스템 구성에 따라'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py'와 같이 작동해야합니다. 하지만 이것은 시스템 관리자가 설정해야하는 모든 것입니다. 당신은'hostname'을 mpirun 할 수 있어야합니다 (vs'python mycode.py')를 여러분이 기대하는 호스트를 얻고있는 빠른 테스트라고합니다. –

+0

sys 관리자는 MPI가 SGE 지원과 함께 설치되었다고 말합니다. 그러나 hostfile을 설정하면 효과가 있습니다. 그리고 mpirun 호스트 이름 사용에 관한 팁은 테스트에 매우 유용했습니다. 테스트로 호스트 이름을 인쇄했지만 더 복잡한 방법으로 - 당신의 방법은 훨씬 빠릅니다! – Laura

답변

2

호스트 파일을 사용하여 작업을 실행할 위치를 지정할 수도 있습니다. 호스트 파일을 포맷하고 사용하는 방법은 MPI 구현에 따라 다르므로 설치 방법에 대한 설명서를 참조 (man mpiexec)해야합니다.

기본 아이디어는 해당 파일 내부에서 사용하려는 노드와 해당 노드에서 원하는 순위 수를 정의 할 수 있다는 것입니다. 프로세스를 노드에 매핑하는 방법을 지정하기 위해 다른 플래그를 사용해야 할 수도 있지만, 결국에는 모든 것이 스스로 배치되는 방식을 제어 할 수 있습니다.

PBS, TORQUE, LoadLeveler 등과 같은 스케줄러를 사용하는 경우에는이 중 일부를 수행하거나 작업을 서로 다른 방법으로 매핑 할 수있는 경우가 있습니다. 별도로 설명서를 참조하거나 여기에 적절한 태그를 사용하여 다른 질문을해야합니다.

+0

예, 저는 스케줄러를 사용하고 있으며 설정 방법에 대해서는 제어 할 수 없습니다. 내가 처음에 질문을 던지는 이유는 sys 관리자에게 내가 가지고있는 문제와 그 응답이 "오"라고 말했기 때문이다. 직접 문제를 해결하기 위해 할 수있는 일이 있는지 궁금했습니다. 내가 혼자 클러스터를 가지고 있다면 hostfile을 설정하는 것이 좋겠지 만 동료가 작업을 수행하고있는 것은 아닙니다. – Laura

+1

호스트 파일 설정이 효과적입니다! 작업은 여전히 ​​모든 노드에 할당되며 hostfile에서 지정한 호스트 중 하나에서만 실행됩니다. 예를 들어, 나는 8 개의 각 노드에 3 개의 CPU를 할당 받았다. 내 hostfile에 node4와 node5 만 있으면 모든 24 개의 스레드가 node4와 node5의 작업에 할당 된 6 개의 CPU에서 실행됩니다. (이것은 내가 예상하지 못한 행동이며, 의심 할 여지없이 내 오해이다.하지만 아마도 이것은 같은 이슈를 가진 다른 누군가에게 분명히 도움이 될 것이다.) – Laura

1

클러스터는 일반적으로 배치 스케줄러와 같은이를 PBS, TORQUE, LoadLeveler 등이 있습니다. 일반적으로 스케일러에 필요한 환경 변수와 함께 mpirun 명령을 포함하는 쉘 스크립트가 제공됩니다. 배치 관리자에게 배치 MPI 작업을 제출하는 프로세스가 무엇인지 클러스터의 관리자에게 문의해야합니다.

+0

나는 이미 이렇게하고있다. 그에 따라 내 질문을 업데이트하겠습니다. 나는 당신의 대답을 오해 했습니까? – Laura

+0

@Laura 질문을 편집하여 작업 스케줄러의 이름과 작업을 제출하는 데 사용하는 명령을 나열 할 수 있습니까? 어느 쪽이든, 이것은 여전히 ​​스케줄러가 여러 노드를 제공하지 않기 때문에 클러스터 관리자에게 업그레이드로 변경된 사항을 물어봐야 할 것처럼 보입니다. – chrisaycock

+0

완료. (대답은 SGE와 qsub myjob입니다.) 이미 클러스터 관리자에게 물어 보았습니다. 그러나 이것에 대해서는 아무 것도하지 않았습니다. 그래서 여기에서 물었습니다. 대신 제가 할 수있는 일이 있기를 바랬습니다. 다시 관리자에게 물어볼 게! – Laura

관련 문제