在centos7上安装xgboost的时候遇到这样的问题:
File "/usr/local/lib/python3.5/subprocess.py", line 271, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', 'xgboost', '-GUnix Makefiles', '-DUSE_OPENMP=1', '-DUSE_AZURE=0', '-DBUILD_WITH_SHARED_NCCL=0', '-DUSE_HDFS=0', '-DHIDE_CXX_SYMBOLS=1', '-DUSE_CUDA=0', '-DPLUGIN_LZ4=0', '-DUSE_S3=0', '-DPLUGIN_DENSE_PARSER=0', '-DUSE_NCCL=0']' returned non-zero exit status 1
----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-as6kfgv9/xgboost/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-7zuj1muf/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-as6kfgv9/xgboost
这种情况是因为xgboost的安装依赖于cmake和gcc编译器,如果版本不够新的话就会报错,而安装xgboost1.1.0以上版本需要cmake3.13.0和gcc5.0版本。
一、升级cmake
下载文件https://cmake.org/files/v3.15/cmake-3.15.0-rc1-Linux-x86_64.tar.gz
下载好之后解压到/usr/local,并且重命名为cmake-3.15.0
tar -xzvf cmake-3.15.0-rc1-Linux-x86_64.tar.gz
mv cmake cmake-3.15.0-rc1-Linux-x86_64 cmake-3.15.0
将原软链接备份后,增加新的软链接
mv /usr/bin/cmake /usr/bin/cmake.bak
ln -s /usr/local/cmake-3.15.0/bin/cmake /usr/bin/cmake
即可。可以使用cmake --version
查询cmake的版本检查是否已经更新
二、升级gcc
这里参考了该博客CentOS 7升级gcc版本
主要步骤为:
安装centos-release-scl和devtoolset
yum install centos-release-scl
yum install devtoolset-8-gcc*
安装的devtoolset是在 /opt/sh 目录下的,所以将gcc、g++、c++的软链接全部替换为devtoolset目录里的内容
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++-4.8.5
mv /usr/bin/c++ /usr/bin/c++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/c++ /usr/bin/c++
检查gcc、g++、c++版本(举例gcc,其他同)
gcc --version
若更新成功应如下:
三、安装xgboost
pip install xgboost
安装成功如下:
总结:千万不要随便去编译安装,我在服务器升级gcc安装xgboost很快就完成了,而自己电脑虚拟机上升级gcc,因为用的编译安装(使用的make -j4),安装了整整4个多小时还没有编译完成,简直坑啊。