MPI を使用して複数の CPU でコードを実行しようとしています。
私は以下を使用して実行します:
$ mpirun -np 24 python mycode.py
それぞれ 12 個の CPU を備えた 8 つのノードを持つクラスターで実行しています。24 個のプロセスがすべてのノードに分散しています。
ノード node1、node2、...、node8 を呼び出して、マスター プロセスが node1 にあり、私のジョブだけが実行されていると仮定します。したがって、node1 にはマスター プロセスといくつかのスレーブ プロセスがあり、残りのノードにはスレーブ プロセスしかありません。
マスター プロセスを持つノード (つまり、node1) のみが使用されています。ノード 2 ~ 8 の負荷は ~0 で、ノード 1 の負荷は ~24 であるため、わかります (各ノードの負荷は、そのノードからジョブに割り当てられた CPU の数にほぼ等しいと予想されます)。また、関数が評価されるたびに、それが実行されているホストの名前を出力するように取得し、毎回「node1」を出力します。マスター プロセスだけが何かを行っているのか、それともマスターと同じノード上のスレーブ プロセスも使用されているのかはわかりません。
私が実行しているクラスターは最近アップグレードされました。アップグレード前は、同じコードを使用していましたが、完全に期待どおりに動作していました (つまり、24 個の CPU を要求すると、24 個の CPU が提供され、24 個の CPU すべてが使用されました)。この問題はアップグレードしてから発生したばかりなので、どこかで設定が変更またはリセットされたと思います。以前にこの問題を見て、どうすれば修正できるか知っている人はいますか?
編集:これは、次を使用してスケジューラにジョブとして送信されます。
#!/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
クラスターは SGE を実行しており、次を使用してこのジョブを送信します。
qsub myjob