2013-07-10 65 views
2

我正嘗試使用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 
+0

升級後,MPI實現可能不會被SGE支持重建,在這種情況下,您必須明確告訴'mpirun'在哪裏找到要運行的主機列表;取決於你的系統配置,像'mpirun -machinefile $ PE_HOSTFILE -np $ NSLOTS python mycode.py'應該可以工作。但是這些都是你的系統管理員應該爲你設置/記錄的東西。你應該能夠mpirun'hostname'(就像'python mycode。py')作爲一個快速測試,您將獲得您期望的主機。 –

+0

系統管理員說MPI安裝了SGE支持(他們甚至爲我確定重新安裝了它),但不是快樂。設置一個主機文件已經工作,所以這樣做。關於使用mpirun主機名的提示對測試非常有幫助。我打印出主機名稱作爲測試,但它是一個更復雜的方式 - 你的方式更快! – Laura

回答

2

也可以使用hostfile指定希望作業運行的位置。主機文件的格式和使用方式因MPI實施而異,所以您需要查閱已安裝的文檔(man mpiexec)以瞭解如何使用它。

其基本思想是在該文件中,您可以定義要使用的節點以及您希望在這些節點上排列多少個等級。這可能需要使用其他標誌來指定進程如何映射到節點,但最終,您通常可以控制自己如何佈置所有內容。

如果您使用PBS,TORQUE,LoadLeveler等調度程序,所有這些都會有所不同,因爲這些調度程序有時可以爲您執行某些操作,或者有不同的自定義作業方式。你必須單獨查閱這些文檔,或者在這裏用適當的標籤詢問關於它們的另一個問題。

+0

是的,我正在使用調度程序,並且我無法控制如何設置。我之所以首先問這個問題的原因是因爲我告訴系統管理員我遇到了什麼問題,他們的回答是「哦」。我想知道是否有任何事情可以直接解決問題。建立一個主機文件聽起來像是我的羣集可以工作,但如果我的同事也在運行作業,就不會。 – Laura

+1

設置一個hostfile工作!這些作業仍然分配給所有節點,並且只能在我在hostfile中指定的任何主機上運行。例如,我在8個節點的每個節點上分配了3個CPU;如果我的主機文件中只有node4和node5,則所有24個線程都在分配給node4和node5上的作業的6個CPU上運行。 (這是我沒有想到的行爲,無疑是我的一個誤解,但也許這將有助於爲有相同問題的其他人解決問題。) – Laura

1

集羣通常有一個批處理調度像PBS,TORQUE,LoadLeveler等。這些通常被賦予一個shell腳本,其中包含您的mpirun命令以及調度程序需要的環境變量。您應該詢問羣集管理員提交批處理MPI作業的過程。

+0

我已經這樣做了。我會相應地更新我的問題。 還是我誤解了你的答案? – Laura

+0

@Laura你可以編輯你的問題來列出你的工作調度程序的名字和你用來提交工作的命令嗎?無論哪種方式,這仍然看起來像你必須問集羣管理員什麼改變隨着升級,因爲調度程序沒有給你多個節點。 – chrisaycock

+0

完成。 (答案是SGE和qsub myjob。)我已經問過羣集管理員,但他們沒有做任何事情,這就是爲什麼我在這裏問 - 我希望有一些事情可以做。我會再次詢問管理員! – Laura