0

我有 2 台计算机,它们都有 pathos Python 模块。我有一个 Pathos 多处理池,并且一直在尝试让 pathos 使用以下代码在两个 CPU 之间平均分配进程数:

from pathos.multiprocessing import ProcessPool
ngramPool = ProcessPool()
ngramPool.ncpus = 8
ngramPool.servers = ('localhost:5653','ec2-18-223-23-82.us-east-2.compute.amazonaws.com:5653')
questionNgrams = []
i = 0
previousI = 0
previousTime = time.time()
#Test questions
#questions = ["To whom do I owe this great pleasure","Who do I owe this great pleasure which is a great pleasure to","Who do I owe this great pleasure to"]
questionNgrams = ngramPool.map(n_gram.stringToNgrams,questions)

但是,不是在我的本地 CPU 上运行 4 个进程,在 Amazon EC2 实例上运行 4 个进程,而是在我的本地处理器上运行所有 8 个进程。如何设置 pathos 以便它在我的 CPU 上生成 4 个进程,在 Amazon 实例上生成另外 4 个进程?

4

1 回答 1

1

我是pathos作者。使用分布式资源并不像您希望的那样简单。您是正确的(在您的评论中)pathos使用基于 RPC(包装在 SSH 中)的连接。ppserver你也是正确的,你必须在远程主机上设置一个。如果您需要建立 ssh 连接,则可以使用pathos_connect脚本(请参阅相关文档)或直接使用pathos.secure模块中的代码来完成。请注意,您还需要确保您有一个工作ssh-agent并设置了 ssh 密钥对身份验证(即在初始连接后不使用密码)。

话虽如此,要专门获得 4 个远程工作人员和 4 个本地工作人员是非常困难的——因为它们ParallelPool是动态负载平衡的。因此,如果您有“快速”任务要运行,那么绝大多数(如果不是全部)任务将在本地运行,因为启动连接并传送任务和检索结果将比仅在本地运行作业花费更多时间。您可以通过清零(或严格限制)池的本地可用任务来强制任务远程运行ncpus,但是在哪里运行多少作业将取决于本地可用任务数量的自动负载平衡,以及它的时间测量完成单个作业所需的时间与远程连接和运行作业所需的时间。

于 2018-08-27T16:21:33.983 回答