繁体   English   中英

Ipython并行和多核流程

[英]Ipython parallel and multicore processes

我想在计算集群上使用ipython parallel执行作业。 设置相对简单,但我将执行的一些工作包括对多线程应用程序(生物信息学)的子进程调用。 是否有一种简单的方法告诉ipython单个python调用正在使用多个内核或整个引擎? 更一般地说,我想跟踪使用和可用的资源,以便我可以运行异构作业(内存要求,核心要求)。

IPython不为单个任务进行任何资源分配。 所有资源分配都在引擎创建时完成。 例如,如果您的作业已经完全多线程且可识别多核,那么您可能不希望每台物理机器有多个IPython引擎。 如果您的作业是单线程的,那么每个CPU核心一个引擎是合乎逻辑的。 如果您的任务在多个非独占资源上受IO限制,那么您可能需要更多引擎而不是内核。

如果您的工作是高度异构的(例如,某些任务仅限于一个线程,而其他任务将很乐意使用整个机器),那么您可能希望安排一些更复杂的调度。 尝试这两个有用的信息是创建引擎子集的视图。 例如,集群中每台机器只有一个引擎的负载均衡和直接视图:

import socket
host_map = client[:].apply_async(socket.gethostname).get_dict()
r = { v:k for k,v in host_map.items() }
one_id_per_machine = list(r.values())
one_per_machine = client[one_id_per_machine]
lb_per_machine = client.load_balanced_view(one_id_per_machine)

另一个是您可能用于创建障碍的基于图形的依赖项 ,允许一个任务阻止其他任务被提交到其他引擎。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM