macOS High Sierra上的XGBoost并行化问题

时间:2018-11-08 10:07:35

标签: python macos openmp xgboost macos-high-sierra

我在macOS High Sierra上使用Anaconda环境,即使将 nthread 参数设置为8,也无法运行具有8个线程的XGBoost。

python代码是这样的。运行它时,我会通过查看 htop 来监视执行情况。只有一个过程是100%。

clf = xgb.XGBClassifier(
     **xgb_params,
     n_estimators=1000,
     nthread=8
)

然后我在互联网上搜索并找到了此链接。有人提到了这个,我也遵循了。

https://www.ibm.com/developerworks/community/blogs/jfp/entry/Installing_XGBoost_on_Mac_OSX?lang=en

➜  ~ brew install gcc --without-multilib
Warning: gcc 8.2.0 is already installed and up-to-date
To reinstall 8.2.0, run `brew reinstall gcc`

看到此信息后,我在xgboost配置中添加了以下几行

export CC = gcc-8
export CXX = g++-8

构建完成后。我再次尝试,没有任何改变。

因此,我一直在寻找解决方案。我找到了此页面。

https://clang-omp.github.io/

然后我运行以下行。

brew install llvm

我尝试在该站点中进行示例。我创建了一个名为hello.c的文件,并将以下代码放入其中。

#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
  printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), 
  omp_get_num_threads());
}

然后我尝试按照提及的方法对其进行编译。

clang -fopenmp hello.c -o hello

成功了!我还尝试了gcc-8,如下所示。

gcc-8 -fopenmp hello.c -o hello

它也起作用。因此,这是我运行 ./ hello

时的输出
➜  ~ ./hello 
Hello from thread 4, nthreads 8
Hello from thread 7, nthreads 8
Hello from thread 2, nthreads 8
Hello from thread 1, nthreads 8
Hello from thread 6, nthreads 8
Hello from thread 3, nthreads 8
Hello from thread 0, nthreads 8
Hello from thread 5, nthreads 8

因此,我在xgboost配置文件中添加了gcc-8,并且gcc-8可以与-fopenmp选项并行运行,如您所见。但是,即使我使用此设置进行编译并将Xthread的nthread参数设置为8,XGBoost也不会并行运行。

有什么想法可以尝试更多吗?

编辑1 :我尝试了更复杂的代码来确保伞形化。我尝试了this code。输出显示8个线程工作。我也可以通过输入 htop 看到它。

➜  ~ clang -fopenmp OpenMP.c -o OpenMP
➜  ~ ./OpenMP 
---- Serial
---- Serial done in 37.058571 seconds.
---- Parallel
---- Parallel done in 9.674641 seconds.
---- Check
Passed

编辑2 :我安装了gcc-7,并执行了相同的过程。它也不起作用。

0 个答案:

没有答案