2013-11-04 35 views
1

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

回答

3

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) 

而另一种是graph-based dependencies,你可能会使用它来创建壁垒,允许一个任务被提交阻止他人到其他引擎。