我在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
构建完成后。我再次尝试,没有任何改变。
因此,我一直在寻找解决方案。我找到了此页面。
然后我运行以下行。
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,并执行了相同的过程。它也不起作用。