我有两台计算机,它们都有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)但是,所有8个进程都在我的本地处理器上运行,而不是在我的本地CPU上运行4个进程,在Amazon EC2实例上运行4个进程。我如何设置pathos,使其在我的CPU上产生4个进程,并在Amazon实例上产生另外4个进程?
发布于 2018-08-28 00:21:34
我是pathos的作者。使用分布式资源并不像您希望的那样简单。您(在您的评论中)是正确的,即pathos使用基于RPC(包装在SSH中)的连接。您还必须在远程主机上设置ppserver,这一点也是正确的。如果需要建立ssh连接,则可以使用pathos_connect脚本(请参阅相关文档)或直接使用pathos.secure模块中的代码进行连接。请注意,您还需要确保有一个有效的ssh-agent并设置了ssh密钥对身份验证(即在初始连接后不使用密码)。
话虽如此,要具体获得4个远程工作者和4个本地工作者是相当困难的--因为ParallelPool是动态负载平衡的。因此,如果您有“快速”任务要运行,那么绝大多数(如果不是全部)任务将在本地运行,因为启动连接、发送任务和检索结果将比仅在本地运行作业花费更多的时间。您可以通过将本地可用于池的ncpus清零(或严格限制)来强制任务远程运行,但运行多少作业将取决于本地可用任务数量的自动负载平衡,以及单个作业完成所需时间与远程连接和运行作业所需时间的某种度量。
https://stackoverflow.com/questions/51997048
复制相似问题