小编Pat*_*l75的帖子

使用 Ray 并行化大型程序的正确方法

我有一个相当大的 Python 程序(约 800 行),其结构如下:

  • 设置说明,我在其中处理用户提供的输入文件并定义对程序执行全局的变量/对象。
  • 主函数,它利用之前的设置阶段并调用程序的主要附加函数。
  • 附加函数可以是主要函数,即它们由主函数直接调用,也可以是次要函数,即它们仅由主要附加函数调用。
  • 我处理主函数结果的最后几行代码。

该程序是大规模并行的,因为主函数的每次执行都独立于前一个和下一个函数。因此,我使用 Ray 在集群中的多个工作节点上并行执行主函数。操作系统为 CentOS Linux 版本 8.2.2004(Core),集群执行 PBS Pro 19.2.4.20190830141245。我使用的是 Python 3.7.4、Ray 0.8.7 和 Redis 3.4.1。

我的Python脚本中有以下内容,foo主要函数在哪里:

@ray.remote(memory=2.5 * 1024 * 1024 * 1024)
def foo(locInd):
    # Main function

if __name__ == '__main__':
    ray.init(address='auto', redis_password=args.pw,
             driver_object_store_memory=10 * 1024 * 1024 * 1024)
    futures = [foo.remote(i) for i in zip(*np.asarray(indArr == 0).nonzero())]
    waitingIds = list(futures)
    while len(waitingIds) > 0:
        readyIds, waitingIds = ray.wait(
            waitingIds, num_returns=min([checkpoint, len(waitingIds)]))
        for r0, r1, r2, …
Run Code Online (Sandbox Code Playgroud)

python memory-management shared-memory redis ray

2
推荐指数
1
解决办法
3398
查看次数

标签 统计

memory-management ×1

python ×1

ray ×1

redis ×1

shared-memory ×1