2016-12-01 41 views
0

我有安裝了SLURM的HPC羣集。我可以爲自己正確分配節點和內核。我希望能夠使用所有分配的內核,而不管它們在哪個節點。正如我在此線程中看到的,Using the multiprocessing module for cluster computing這不能通過multiprocessing來實現。如何在HPC羣集上使用python上的所有已分配節點

我的劇本是這樣的(簡單化版本):

def func(input_data): 
    #lots of computing 
    return data 

parallel_pool = multiprocessing.Pool(processes=300) 
returned_data_list = [] 
for i in parallel_pool.imap_unordered(func, lots_of_input_data) 
    returned_data_list.append(i) 
# Do additional computing with the returned_data 
.... 

這個腳本工作完全正常,但正如我所說多是不是對我的好工具,因爲即使SLURM分配3個節點對我來說,多處理只能使用一個。據我瞭解這是多處理的限制。

我可以使用SLURM的srun協議,但是ust執行相同的腳本N次,我需要使用並行進程的輸出進行額外的計算。我當然可以將輸出存儲在某個地方,然後讓它恢復原狀,但必須有一些更優雅的解決方案。

在提到的線程中有像jug這樣的建議,但是當我正在閱讀它時,我沒有找到適合自己的解決方案。

也許py4mpi可以解決我的問題嗎?這個教程看起來非常混亂,我也沒有找到針對我的問題的具體解決方案。 (與mpi並行運行一個函數,然後繼續腳本)。

我試過subprocess調用,但是看起來像調用multiprocess一樣工作,所以它們只能在一個節點上運行。我還沒有找到任何確認,所以這只是從我的反覆猜測。

我該如何克服這個問題?目前我可以使用300多個內核,但一個節點只有32個,所以如果我能找到解決方案,那麼我將能夠以近10倍的速度運行我的項目。

感謝

+0

節點之間的通信通常是mpi,但是我不知道一個庫將它封裝在api中,就像多處理器 –

回答

1

了不少麻煩scoop之後是解決我的問題庫。

相關問題