首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调查经济放缓

调查经济放缓
EN

Stack Overflow用户
提问于 2017-12-20 15:13:21
回答 1查看 882关注 0票数 0

我正在尝试使用强权b并行地制作一个定制的随机森林实现列车。

这个任务的并行性令人尴尬,所以我认为加速应该不会太难。

下面是一些示例代码:

代码语言:javascript
运行
复制
class RandomForest(object):
    def __init__(self, settings, data):
        self.forest = [None] * settings.n_trees
        self.parallel = Parallel(n_jobs=settings.njobs, backend="threading")

    def fit(self, data, train_ids_current_minibatch, settings, param, cache):
        self.forest = self.parallel(
            delayed(_parallel_build_trees_batch)(
                i_t, data, train_ids_current_minibatch, settings, param, cache)
            for i_t, tree in enumerate(self.forest))

    def partial_fit(self, data, train_ids_current_minibatch, settings, param, cache):
        self.forest = self.parallel(
            delayed(_parallel_build_trees_partial)(
                tree, i_t, data, train_ids_current_minibatch, settings, param, cache)
            for i_t, tree in enumerate(self.forest))

但是,在批处理和增量情况下,使用多个作业时,培训要慢得多。数据和缓存参数是包含(大型) numpy数组的块,所以我想知道这是否是原因。

我尝试过使用multiprocessing.Pool编写同样的代码,结果甚至更糟,因为没有使用joblib的threading后端,我假设是因为fit函数大量使用了numpy/scipy代码。

对于如何调试/修正经济放缓有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-22 07:22:43

在我看来,您的分析是正确的:放缓是由于datacache是大对象造成的。现在,在多处理环境中,您没有共享内存,因此您需要以某种方式共享这些对象。Python通过共享对象支持这一点:有一个真正保存对象的“主进程”。但是,其他进程需要通过某种机制(AFAIK,对象被腌制,然后通过管道或队列发送)发送所有更新,从而减慢速度。

我看到了你的一些选择:

  • 转换您的代码,以便它使用分区:我不熟悉随机林。我猜每个进程都有data作为初始数据集,然后您尝试找到一个“最优”。如果您可以按process 1找到所有“类型A”优化,而进程2找到所有“类型B”优化,然后让每个进程(例如,将其结果写入文件rf_process_x.txt中),则不需要共享内存状态。
  • 转换代码,使其使用队列(参见此页上的最后一个示例):如果分区不起作用,那么也许可以:
    1. 启动n个工作进程
    2. 每个进程都为自己建立自己的data集(所以它不是在共享内存中)。
    3. 在主要过程中,您将“作业”放入task_queue中,例如,使用这组特定的参数查找随机林。工作人员从task_queue中获取作业,计算它并将其结果放到result_queue上。只有在任务和结果缓慢的情况下,这才是快速的,因为需要对这些对象进行腌制,并通过管道将这些对象从父进程发送到辅助进程。

  • 使用joblibs Joblibs支持将对象转储到磁盘上,然后赋予每个对象对该文件的内存映射访问权限。
  • 如果您的操作不受CPU约束(磁盘或网络操作繁重),则可以迁移到multithreading.。这样你就真的有了一个共享的记忆。但据我所见,您是cpu绑定的,并且会遇到"GIL锁“问题(在cpython中,一次只运行一个线程)。
  • 您可能会发现其他加速随机森林的方法,例如这就是答案提到了几个
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47909126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档