gpt4 book ai didi

python - PBS 集群节点上的多处理

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:47 26 4
gpt4 key购买 nike

我必须使用不同的参数(或随机数生成器种子)运行同一模型的多次模拟。之前我在一个具有多个核心的服务器上工作,我在其中使用了带有 apply_async 的 python 多处理库。这非常方便,因为我可以决定要占用的最大核心数量,并且模拟将进入队列。

据我从其他问题中了解到,只要您仅在一个节点上工作,多重处理就可以在 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: Error sending result: >''. >Reason: 'RecursionError('maximum recursion depth exceeded while calling a >Python object')'

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

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

有什么想法可以解决或至少理解这种行为吗?

最佳答案

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

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

关于python - PBS 集群节点上的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com