我有安裝了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倍的速度運行我的項目。
感謝
節點之間的通信通常是mpi,但是我不知道一個庫將它封裝在api中,就像多處理器 –