【问题标题】:XGBoost not using max number of cores available under Windows?XGBoost 不使用 Windows 下可用的最大内核数?
【发布时间】:2019-11-29 09:57:53
【问题描述】:

我通过 R 包使用 XGBoost,并且没有指定 nthread 参数(应该默认为可用内核的最大数量,它在 Ubuntu 中这样做)。

但是,在配备 i7-4770 CPU(4 核 = 8 线程)的 Windows PC 上,最多只有即使我手动设置nthread = 8,也达到了最大 CPU 级别的 50%(完全相同的代码在 Ubuntu 下使用 100% 的最大 CPU 级别,所以我认为这不是实现问题)。我还尝试了nthread = 4,这会导致大约 30% 的最大 CPU 使用率。

如何让 XGBoost 使用 Windows 下的所有可用线程?

【问题讨论】:

  • 它确实在你的所有内核上运行,有点因为并行化是使用 cpp 完成的,它不会像直接在 R 中并行化时那样预定 100% 的处理器。
  • @JacobJacox 所以在 Linux 中它之所以有效,是因为 OS / cpp 处理并行处理的方式不同?
  • 你问我太多了 :) 我在 r 中手动并行化 rf 或在 rcpp 中编写我自己的时注意到了这一点。

标签: r windows parallel-processing xgboost


【解决方案1】:

我发现当通过install.packages("xgboost") 从 CRAN 安装 Windows XGBoost R 包时,它不支持 MPI。如果没有 MPI,您将无法获得并行处理的全部好处,并且您的 CPU 将得不到充分利用。您可以在您的场景中通过在 xgboost.dll 文件上使用 Dependency Walker 等软件来确认这一点——您会注意到它没有与任何 MPI 库(通常是 vcomp140.dll em> 在 Windows 上)。

在我的情况下,解决方案是卸载 CRAN 提供的 R 包并从源代码构建 XGBoost 及其 R 包,这本身就是一次冒险,但确实给了我一个启用 MPI 的安装,它将我的所有 16 个内核系统利用率达到 100%。

(为更加清晰而编辑)

【讨论】:

  • 这是一个很好的观察。但是你的问题是什么?您是在问如何确保 XGBoost 使用所有内核?此外,由于您在谈论硬件方面的考虑,您可能应该提供一些详细信息,例如:您的 R 版本/实现、您的操作系统详细信息、您的 CPU/GPU 详细信息以及您认为可能相关的任何其他内容。
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2021-10-24
相关资源
最近更新 更多