gpt4 book ai didi

python-3.x - 在 HPC 集群上使用 Python 多处理

转载 作者:行者123 更新时间:2023-12-05 00:55:57 30 4
gpt4 key购买 nike

我在 Windows HPC 集群上运行 Python 脚本。脚本中的一个函数使用 starmap来自 multiprocessing包来并行化某个计算密集型过程。

当我在一台非集群机器上运行脚本时,我获得了预期的速度提升。当我登录到一个节点并在本地运行脚本时,我获得了预期的速度提升。但是,当作业管理器运行脚本时,速度从 multiprocessing 提升。要么完全缓解,要么有时甚至慢 2 倍。我们注意到当 starmap 时会发生内存分页。函数被调用。我们认为这与 Python 的 multiprocessing 的性质有关。 ,即为每个核心启动一个单独的 Python 解释器的事实。

由于我们从单个节点的控制台成功运行,我们尝试使用 HPC_CREATECONSOLE=True 运行脚本。 ,无济于事。

在运行使用 multiprocessing 的 Python 脚本时,我们应该使用作业管理器中的某种设置吗? ?是 multiprocessing只是不适合 HPC 集群?

最佳答案

不幸的是,我无法在社区中找到答案。但是,通过实验,我能够更好地隔离问题并找到可行的解决方案。

问题源于 Python 的 multiprocessing 的性质执行。当Pool创建对象(即控制并行工作的处理核心的管理器类),为每个核心启动一个新的 Python 运行时。我的代码中有多个地方 multiprocessing使用包和 Pool对象实例化...每个需要它的函数都会创建一个 Pool对象,然后在退出之前加入和终止。因此,如果我在代码中调用该函数 3 次,则会启动 8 个 Python 实例,然后关闭 3 次。在单台机器上,与函数的计算负载相比,它的开销根本不重要……但是在 HPC 上,它高得离谱。

我重新构建了代码,以便 Pool对象在进程调用的最开始创建,然后根据需要传递给每个函数。它在整个过程结束时关闭、加入和终止。

我们发现大部分时间都花在了 Pool 的创建上。每个节点上的对象。这是一个改进,因为它只被创建一次!然后我们意识到潜在的问题是多个节点试图通过网络在同一时间在同一个地方访问 Python(它只安装在头节点上)。我们在所有节点上安装了 Python 和应用程序,问题完全解决。

这个解决方案是反复试验的结果……不幸的是,我们对集群计算的了解在这一点上还很低。我分享这个答案,希望它会受到批评,以便我们能够获得更多的洞察力。感谢您的时间。

关于python-3.x - 在 HPC 集群上使用 Python 多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37221133/

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