簡體   English   中英

在Slurm中使用Python多處理,以及我需要的ntasks或ncpus的組合

[英]Using Python multiprocessing in Slurm, and which combination of ntasks or ncpus I need

我正在嘗試在slurm集群上運行python腳本,而我正在使用python的內置multiprocessing模塊。

我使用了一個非常簡單的設置,為了測試目的,示例是:

len(arg_list)
Out[2]: 5

threads = multiprocessing.Pool(5)
output = threads.map(func, arg_list)

所以funcarg_list 5個參數上並行應用了5次。 我想知道的是如何在slurm中分配正確數量的cpu / tasks以使其按預期工作。 這就是我的slurm批處理腳本的相關部分:

#!/bin/bash

# Runtime and memory
#SBATCH --time=90:00:00
#SBATCH --mem-per-cpu=2G

# For parallel jobs
#SBATCH --cpus-per-task=10
##SBATCH --nodes=2
#SBATCH --ntasks=1
##SBATCH --ntasks-per-node=4  

#### Your shell commands below this line ####

srun ./script_wrapper.py 'test'

如你所見,目前我有ntasks=1cpus-per-task=10 請注意,func的主要部分包含一個scipy例程,該例程往往在兩個內核上運行(即使用200%cpu使用,這就是為什么我想要10 cpus而不是5 cpu)。

這是為我的目的分配資源的正確方法,因為此時作業需要比預期更長的時間(更像是在單個線程中運行)。

我需要設置ntasks=5嗎? 因為我對在線文檔的印象是, ntasks=5會改為調用srun ./script_wrapper.py 'test'五次,這不是我想要的。 我在這個假設中是對的嗎?

另外,有沒有辦法輕松檢查諸如CPU使用率和multiprocessing.Pool調用的python任務的所有進程id之類的東西? 目前我正在嘗試使用sacct -u <user> --format=JobID,JobName,MaxRSS,Elapsed,AveCPU ,但AveCPUMaxRSS字段由於某種原因(?)總是空出來,而我看到第一個腳本作為一個過程,我沒有看到應該通過多處理調用的其他5個。 例:

       JobID    JobName     MaxRSS    Elapsed     AveCPU 
------------ ---------- ---------- ---------- ---------- 
16260892             GP              00:13:07            
16260892.0   script_wr+              00:13:07            

您的Slurm任務分配對我來說是正確的。 Python的多處理只能在一台機器上運行,在我看來,就像你正確地在一個節點上分配10個CPU一樣。 可能導致此問題的原因是多處理的Pool.map默認在輸入列表的“塊”上工作,而不是一次一個元素。 它可以在任務很短時將開銷降至最低。 要強制多處理一次處理列表的一個元素,請將地圖的chunksize參數設置為1,例如

threads.map(func, arglist, 1)

有關更多信息,請參閱多處理文檔

因為您說您使用的是多線程版本的SciPy,所以您可能還需要檢查底層庫的相關線程級別。 例如,如果您的SciPy是針對Intel Math Kernel Library構建的,請嘗試設置OMP_NUM_THREADSMKL_NUM_THREADS 環境變量 ,以確保每個進程使用不超過2個線程並充分利用(而不是過度使用)已分配的SLURM資源。

編輯:sacct只會為您提供由srun直接啟動的任何進程的運行時間,而不是任何子進程。 因此,在您的情況下,您將只使用單個srun命令中的一個進程。 要監視子進程,您可能需要查看在系統級而不是通過Slurm運行的監視工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM