我正嘗試使用MPI在多個CPU上運行一些代碼。MPI不使用所有分配的CPU
我運行使用:
$ mpirun -np 24 python mycode.py
我一個集羣上運行有8個節點,每個具有12個CPU。我的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
升級後,MPI實現可能不會被SGE支持重建,在這種情況下,您必須明確告訴'mpirun'在哪裏找到要運行的主機列表;取決於你的系統配置,像'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py'應該可以工作。但是這些都是你的系統管理員應該爲你設置/記錄的東西。你應該能夠mpirun'hostname'(就像'python mycode。py')作爲一個快速測試,您將獲得您期望的主機。 –
系統管理員說MPI安裝了SGE支持(他們甚至爲我確定重新安裝了它),但不是快樂。設置一個主機文件已經工作,所以這樣做。關於使用mpirun主機名的提示對測試非常有幫助。我打印出主機名稱作爲測試,但它是一個更復雜的方式 - 你的方式更快! – Laura