PBS集群节点上的多处理

问题描述 投票:1回答:1

我必须使用不同的参数(或随机数生成器种子)对同一模型进行多次仿真。以前,我在具有许多核心的服务器上工作,在这里我将python多处理库与apply_async一起使用。这非常方便,因为我可以决定要占用的最大内核数,而仿真将排入队列。

据我从其他问题中了解到,只要您仅在一个节点上工作,多处理就可以在pbs群集上工作,目前还可以。但是,我的代码并不总是有效。

为了让您了解我的代码类型:

import functions_library as L
import multiprocessing as mp
if __name__ == "__main__":

    N = 100

    proc = 50
    pool = mp.Pool(processes = proc)



    seed = 342
    np.random.seed(seed)

    seeds = np.random.randint(low=1,high=100000,size=N)

    resul = []
    for SEED in seeds:

        SEED = int(SEED)

        resul.append(pool.apply_async(L.some_function, args = (some_args)))
        print(SEED)

    results = [p.get() for p in resul]

    database = pd.DataFrame(results)


    database.to_csv("prova.csv")

该函数创建3 N = 10000个networkx图并对其进行一些计算,然后返回一个简单的简短python字典。

我无法调试的奇怪的东西是以下错误消息:

multiprocessing.pool.MaybeEncodingError:发送结果错误:>''。 >原因:“ RecursionError('调用> Python对象时,超出了最大递归深度”)'

奇怪的是,我在不同的节点上运行多个代码实例。该代码可以正常工作3倍,而大多数情况下,它会返回前一个错误。我尝试午餐时使用了7到20个不同数量的并行模拟(节点的#个核心),但是似乎没有模式,所以我想这不是内存问题。

在其他问题中,类似的错误似乎与腌制奇怪或大的物体有关,但是在这种情况下,从函数中产生的唯一内容是短字典,因此不应与之相关。在工作开始时,我还尝试使用sys库增加允许的递归深度,但直到15000为止都没有用。

有解决或至少了解这种行为的想法吗?

python multiprocessing hpc pbs
1个回答
0
投票

这与eigenvector_centrality()不收敛有关。在多处理之外运行时,它会正确返回networkx错误,而在其内部仅返回此递归错误。

我不知道这是否是一种奇怪的,非常特定于功能的行为,或者有时多处理无法处理某些库错误。

© www.soinside.com 2019 - 2024. All rights reserved.