GPU support for XGBoost and Ligh

作者: padluo | 来源:发表于2020-03-08 00:01 被阅读0次

    GBDT 是表格型数据挖掘比赛的大杀器,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。XGBoost 和 LightGBM 是两个实现 GBDT 算法的框架,为了加快模型的训练效率,本文记录了 GPU Support 的 XGBoost and LightGBM 的构建过程。

    本次构建的系统环境为 CentOS 7.2。

    Installation Guide for XGBoost GPU support

    Building XGBoost from source,构建和安装 XGBoost 包括如下两个步骤,

    • 从 C++ 代码构建共享库(libxgboost.so for Linux/OSX and xgboost.dll for Windows)
    • 安装语言包(如Python)

    Building the Shared Library

    在 CentOS 上构建共享库,默认情况下,分布式 GPU 训练是关闭的,仅仅只有一个 GPU 将被使用,为开启分布式 GPU 训练,用 CMake 构建时,设置选项USE_NCLL=ON,分布式 GPU 训练依赖 NCLL2 ,可在 https://developer.nvidia.com/nccl 获取,下载过程需要登录并完成调查问卷,所以构建 GPU Support 的 Pre-installation Actions is,

    • gcc/g++ 5.0 or higher
    • CMake 3.3 or higher(3.12 or higher for building with CUDA)
    • NCLL2

    gcc/g++ 5.0+

    CentOS 7.2 默认的 gcc/g++ 版本为4.8.5,不满足构建的需要,需升级 gcc/g++,首先做一些准备工作,

    tar xjvf gcc-7.4.0.tar.bz2 && cd gcc-7.4.0
    
    • 编译安装gcc的依赖组件,在机器不能联网的环境,从 ./contrib/download_prerequisites 查找指定的版本,自行下载这些组件到目录 gcc-7.4.0,将 download_prerequisites 里面的 wget 全部注释。
    gmp='gmp-6.1.0.tar.bz2'
    mpfr='mpfr-3.1.4.tar.bz2'
    mpc='mpc-1.0.3.tar.gz'
    isl='isl-0.16.1.tar.bz2'
    

    再执行,

    ./contrib/download_prerequisites
    
    • configure,新建一个目录存储编译文件,默认安装目录为 /usr/local ,可以使用 --prefix 修改自定义路径,编译选项参考默认的 gcc-4.8.5 的编译选项。建议使用make -j8进行编译,缩短编译时间,但可能会编译失败。
    mkdir gcc-7.4.0-build && cd gcc-7.4.0-build
    ../configure --prefix=/usr/local/gcc-7.4.0 --enable-bootstrap --enable-build-with-cxx --enable-cloog-backend=isl --disable-libjava-multilib --enable-checking=release --enable-gold --enable-ld --enable-libada --enable-libssp --enable-lto --enable-objc-gc --enable-vtable-verify --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --disable-multilib
    make -j8
    make install
    
    • 配置环境变量,配置库文件和头文件路径,在 .bashrc 配置,
    export PATH=/usr/local/gcc-7.4.0/bin/:$PATH
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64/:$LD_LIBRARY_PATH
    export C_INCLUDE_PATH=/usr/local/include/:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=/usr/local/include/:$CPLUS_INCLUDE_PATH
    

    验证 gcc 版本,

    $ gcc -v
    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/local/gcc-7.4.0/libexec/gcc/x86_64-redhat-linux/7.4.0/lto-wrapper
    Target: x86_64-redhat-linux
    Configured with: ../configure --prefix=/usr/local/gcc-7.4.0 --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 7.4.0 (GCC)
    

    但 g++ 和 c++ 版本仍指向原来的4.8.5,增加软链接修改指向,

    sudo cp /usr/bin/g++ /usr/bin/g++-4.8.5.bak
    sudo rm /usr/bin/g++
    sudo ln -s  /usr/local/gcc-7.4.0/bin/g++ /usr/bin/g++
    
    sudo cp /usr/bin/c++ /usr/bin/c++-4.8.5.bak
    sudo rm /usr/bin/c++
    sudo ln -s  g++ /usr/bin/c++
    c++ -v
    g++ -v
    

    CMake
    build CMake from source,参考 https://cmake.org/install/

    tar -zxvf cmake-3.16.2.tar.gz
    cd cmake-3.16.2/
    ./bootstrap --prefix=/usr/local
    make
    make install
    which cmake
    cmake -version
    

    NCLL2
    参考
    https://docs.nvidia.com/deeplearning/sdk/nccl-install-guide/index.html

    When compiling applications, specify the directory path to where you installed NCCL, for example /usr/local/nccl-<version>/

    tar -zxvf nccl-2.5.6-2.tar.gz
    mv nccl-2.5.6-2 /usr/local/
    ll /usr/local/nccl-2.5.6-2
    

    GPU support for XGBoost

    By default, distributed GPU training is disabled and only a single GPU will be used. To enable distributed GPU training, set the option USE_NCCL=ON. Distributed GPU training depends on NCCL2, available at this link. Since NCCL2 is only available for Linux machines, distributed GPU training is available only for Linux.

    首先从 Git 获取源码,

    git clone --recursive https://github.com/dmlc/xgboost
    

    编译支持 GPU 训练,设置选项 USE_CUDA=ON,分布式 GPU 训练,设置选项 USE_NCCL=ON,指定 NCCL2 根路径,

    cd xgboost
    mkdir build
    cd build
    cmake .. -DUSE_CUDA=ON -DUSE_NCCL=ON -DNCCL_ROOT=/usr/local/nccl-2.5.6-2
    make -j4
    

    XGBoost Python Package Installation

    python 包位于 xgboost/python-package

    cd python-package
    sudo python setup.py install
    

    benchmark测试,

    cd xgboost/tests/benchmark
    python benchmark_tree.py
    

    XGBoost GPU accelerated Usage

    compute capability of GPU card,
    https://en.wikipedia.org/wiki/CUDA#GPUs_supported

    使用 sklearn 风格的接口,使用 sklearn 风格的参数。

    import xgboost as xgb
    clf = xgb.XGBClassifier(tree_method='gpu_hist', gpu_id=0)
    

    Installation Guide for LightGBM GPU support

    Building LightGBM from source

    Requirements

    • glibc >= 2.14
    • OpenCL 1.2 headers and libraries
    • libboost 1.56 or later (1.61 or later is recommended)
    • CMake 3.2 or later

    glibc和CMake已满足要求,CentOS 7.2 的base repo中 boost 版本为1.53,epel repo有1.69,或者从 boost 源码编译。

    libboost installation

    #sudo yum install boost169 boost169-devel
    #Error: Package: python36-libs-3.6.8-1.el7.x86_64 (centos72-epel)
    #           Requires: libcrypto.so.10(OPENSSL_1.0.2)(64bit)
    #rpm -qa | grep boost
    tar -zxvf boost_1_69_0.tar.gz
    cd boost_1_69_0/
    ./bootstrap.sh
    ./b2
    ./b2 install
    

    OpenCL

    查看 OpenCL headers and library,

    ls /usr/local/cuda/lib64/libOpenCL.so /usr/local/cuda/include/
    

    Build LightGBM GPU Version

    构建 LightGBM GPU 版本,

    git clone --recursive https://github.com/microsoft/LightGBM
    cd LightGBM
    mkdir build
    cd build
    cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda/include/ ..
    make -j4
    

    LightGBM Python-package Installation

    cd LightGBM/python-package
    python setup.py install
    

    主要参考文档,

    https://xgboost.readthedocs.io/en/latest/
    https://lightgbm.readthedocs.io/en/latest/index.html


    微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。

    数据分析

    读者交流电报群

    https://t.me/sspadluo


    知识星球交流群

    知识星球读者交流群

    相关文章

      网友评论

        本文标题:GPU support for XGBoost and Ligh

        本文链接:https://www.haomeiwen.com/subject/xaxldhtx.html