【发布时间】:2015-02-02 12:29:18
【问题描述】:
我正在使用 Matlab (R2014a&b) 提供的TreeBagger 类以及分布式计算工具箱。我有一个 local 集群正在运行,有 30 个工作人员,在具有 40 个内核的 Windows 7 机器上。
我调用TreeBagger 构造函数来生成一个回归森林(一个包含32 棵树的集合),传递一个options 结构并将'UseParallel' 设置为'always'。
但是,TreeBagger 似乎只使用了 30 个可用工作程序中的 8 个左右(根据每个进程的 CPU 使用率判断,使用任务管理器观察)。当我尝试使用简单的parfor 循环测试池时:
parfor i=1:30
a = fft(rand(20000));
end
然后所有 30 名工人都参与进来。
我的问题是:
(如何)我可以强制TreeBagger 使用所有可用资源吗?
【问题讨论】:
-
完全推测但是基于
UseParallel选项的文档“如果并行计算工具箱的一个parpool是开放的”它可能使用更少的工人,因为它旨在与并行计算工具箱一起工作而不是分布式计算工具箱,因此可能仅限于更少(8 个工人似乎很熟悉,但我相信现在有 12 个) -
我认为在某些时候“并行计算工具箱”和“分布式计算工具箱”之间只是简单地重命名了——R2014a 和 b 不再将工作人员的数量限制为 12 个。据我通过单步执行代码可以看出,
TreeBagger只是调用parfor。 -
那里的时代似乎有点落后了...我完全同意已经检查了源代码,
TreeBagger调用了smartForSliceout的主循环,它利用了parfor和@987654337 @(基本上是gcp的包装器)来确定池大小......所以我不明白为什么所有工作人员都没有参与......问题中的信息表明有 30 个工作人员处于活动状态(除非一些固有的并行化在fft中隐藏了池小于 30 的事实 - 这很容易通过gcp进行检查) -
似乎在任何时候都只有少数工人参与。但是,大多数工作人员在执行执行 TreeBagger 期间的某个时间点变得活跃。看起来好像在某处发生了一些排队。
-
我建议向 TMW 提交支持请求。他们可能对您的反馈感兴趣并且应该能够指出瓶颈在哪里。
标签: matlab parallel-processing distributed-computing random-forest