zoukankan      html  css  js  c++  java
  • XGBoost--3--CPU、GPU与Multi-GPU安装

    本文主要介绍的是XGBoost的CPU、GPU与Multi-GPU的安装,以下几点说明:

    • linux平台、源码编译、支持python

    补充:相比于本文,XGBoost文档提供了更为详细、丰富的的安装过程,其实完全可以参考原文;那么,该文目的在哪呢,想了一下主要有两点:

    • 一方面是中文介绍,
    • 另一方面就是对一些可能发生的问题进行避免,并特别说明,这一点是比较重要的;

    另外,全文无图;

    1. 依赖环境

    虽然XGBoost可以提供多种语言的接口,如Python、R、JVM、Ruby等等,但本文仅涉及Python;

    因此,需要创建一个独立的虚拟python环境,用于测试;

    创建独立python运行环境,并激活使用;

    virtualenv -p /usr/bin/python3 env
    source env/bin/activate
    
    • virtualenv用于创建多个独立的python运行环境;
    • -p /usr/bin/python用于指定采用基础python环境,不包含任何其他第三方库;
    • env表示将新建的python运行环境所需文件指定到该路径;
    • source env/bin/activate用于激活;

    另外,不管进行哪个版本的安装,都需要下载XGBoost的源码

    git clone --recursive https://github.com/dmlc/xgboost  # 挺慢的
    

    注意下载的xgboost下文件夹cub/dmlc-coregputreeshap是否包含文件,如果是空的需要在指定仓库下下载;

    另外,在下面的验证代码中,使用了scikit-learnpandas,因此这里也一并安装上;

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
    

    2. XGBoost的CPU版本安装

    除了源码编译安装之外,其实还有一个更为简单的方式使用XGBoost CPU的版本,相比大家也可以想的到,那么就是使用pip安装;

    2.1 pip安装

    这里借助的是清华源镜像:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost
    

    安装成功后,使用下面代码进行验证;

    import xgboost as xgb
    from sklearn.datasets import make_classification
    from sklearn.model_selection import train_test_split
    
    # 创建数据集
    dataset, labels = make_classification(n_samples=10000, n_features=50, n_informative=3, n_classes=3)
    print(dataset.shape, labels.shape)
    # 拆分数据集
    x_train, x_test, y_train, y_test = train_test_split(dataset, labels, test_size=0.3, random_state=7)
    print("x_train: {}, x_test: {}".format(x_train.shape, x_test.shape))
    
    # 构建DMatrix
    dtrain = xgb.DMatrix(x_train, y_train)
    dtest = xgb.DMatrix(x_test, y_test)
    
    # 参数设置
    params = {
            'tree_method': "hist",
            'booster': 'gbtree',
            'objective': 'multi:softmax',
            'num_class': 3,
            'max_depth': 6,
            'eval_metric': 'merror',
            'eta': 0.01,
            # 'gpu_id': cr.gpu_id
        }
    
    # 训练
    evals = [(dtrain, 'train'), (dtest, 'val')]
    model = xgb.train(params, dtrain, num_boost_round=100,
                      evals=evals)
    

    输出如下:

    (10000, 50) (10000,)
    x_train: (7000, 50), x_test: (3000, 50)
    [0]     train-merror:0.12200    val-merror:0.15467
    [1]     train-merror:0.12371    val-merror:0.15267
    [2]     train-merror:0.12286    val-merror:0.15333
    [3]     train-merror:0.12343    val-merror:0.15467
    ...
    

    2.2 源码编译XGBoost CPU版本

    2.2.1 编译XGBoost

    CPU版本最简单的方法就是使用pip安装,这里再一次利用源码编译是为了熟悉整个流程;

    进入到已经下载并解压(或者git clone)成功的xgboost文件夹,依次执行:

    cd xgboost
    mkdir build
    cd build
    cmake ..
    make -j12
    
    • build
    • make -j12中的12表示机器的核心数,可以通过在命令行中,执行nproc进行查看;根据具体情况设置大小;

    如果没有报错,那么就表示编译成功;

    2.2.2 配置Python Package

    那么接下来进行Python Package的安装配置;

    需要注意的是,下载完成的xgboost默认是master分支,如果想要使用最新版本的python包,则不需要切换分支;如果想要安装指定版本的python包,则需要切换分支,具体操作如下:

    首先,定位到xgboost根目录下:

    git branch -a  # 查看分支
    git checkout remotes/origin/release_1.2.0  # 切换指定版本的分支
    

    其次,定位到python_packages

    cd python_packages
    

    执行:

    python setup.py install  # Install the XGBoost to your current Python environment.
    python setup.py build    # Build the Python package.
    python setup.py build_ext # Build only the C++ core.
    python setup.py sdist     # Create a source distribution
    python setup.py bdist     # Create a binary distribution
    python setup.py bdist_wheel # Create a binary distribution with wheel format
    

    成功执行后,通过pip list查看已经安装成功;

    2.2.3 验证

    使用下面例子(同上)进行验证:

    import xgboost as xgb
    from sklearn.datasets import make_classification
    from sklearn.model_selection import train_test_split
    
    # 创建数据集
    dataset, labels = make_classification(n_samples=10000, n_features=50, n_informative=3, n_classes=3)
    print(dataset.shape, labels.shape)
    # 拆分数据集
    x_train, x_test, y_train, y_test = train_test_split(dataset, labels, test_size=0.3, random_state=7)
    print("x_train: {}, x_test: {}".format(x_train.shape, x_test.shape))
    
    # 构建DMatrix
    dtrain = xgb.DMatrix(x_train, y_train)
    dtest = xgb.DMatrix(x_test, y_test)
    
    # 参数设置
    params = {
            'tree_method': "hist",
            'booster': 'gbtree',
            'objective': 'multi:softmax',
            'num_class': 3,
            'max_depth': 6,
            'eval_metric': 'merror',
            'eta': 0.01,
            # 'gpu_id': cr.gpu_id
        }
    
    # 训练
    evals = [(dtrain, 'train'), (dtest, 'val')]
    model = xgb.train(params, dtrain, num_boost_round=100,
                      evals=evals)
    

    3. XGBoost的GPU版本安装

    3.1 编译XGBoost

    与CPU版本相比,GPU版本训练过程会更高效一些;几倍之差吧;

    配置过程与CPU版本类似:

    cd xgboost
    mkdir build
    cd build
    cmake .. -DUSE_CUDA=ON
    make -j12
    
    • -DUSE_CUDA=ON表示支持CUDA加速;因此,需要注意的是在此之前需要Nvidia的显卡及其驱动、CUDA等的成功配置;

    3.2 配置Python Package

    注意:如果需要安装指定版本的XGBoost,需要切换到相应的分支下;

    git branch -a
    git checkout remotes/origin/release_1.2.0
    

    然后,定位到python-packages目录:

    cd python-packages
    

    执行(注意,这里和CPU的略有不同):

    python setup.py install --use-cuda
    python setup.py build   
    python setup.py build_ext
    python setup.py sdist     
    python setup.py bdist    
    python setup.py bdist_wheel 
    

    配置成功,使用pip list查看;

    3.3 验证

    配置成功,使用代码进行验证:

    (这里就不放完整的代码了,与CPU的验证类似,差别之处在下面指出)

    # 参数设置
    params = {
            'tree_method': "gpu_hist",  # 与CPU不同
            'booster': 'gbtree',
            'objective': 'multi:softmax',
            'num_class': 3,
            'max_depth': 6,
            'eval_metric': 'merror',
            'eta': 0.01,
            'gpu_id': 0  # 与CPU不同
        }
    
    • 需要将tree_method对应的值改成gpu_hist
    • 指定使用的GPU,gpu_id指定为0

    4. XGBoost的Multi-GPU版本安装

    XGBoost的CPU和GPU版本两者相差不大,仅计算平台不同;相比于CPU、GPU,Multi-GPU有以下不同:

    • 相对复杂的安装配置过程;
    • 不同的代码实现;

    4.1 安装配置NCCL

    安装Multi-GPU版本的XGBoost,那么就需要多个GPU的通信,需要NCCL;

    NCCL(NVIDA Collective Communications Library)目的是为了实现Multi-GPU或Multi-node之间的通信;

    有两种安装方式,一是具有root权限的安装,二是不具有root权限的安装配置;

    安装方式见:Linux下NCCL源码编译安装

    4.2 编译XGBoost

    与CPU版本相比,GPU版本训练过程会更高效一些;几倍之差吧;

    配置过程与CPU版本类似:

    cd xgboost
    mkdir build
    cd build
    cmake .. -DUSE_CUDA=ON -DUSE_NCCL=ON -DNCCL_ROOT=/home/chenz/software/nccl
    make -j12
    
    • -DUSE_CUDA=ON表示支持CUDA加速;因此,需要注意的是在此之前需要Nvidia的显卡及其驱动、CUDA等的成功配置;
    • -DUSE_NCCL=ON表示使用NCCL;
    • -DNCCL_ROOT表示nccl的安装位置;

    4.3 配置Python Package

    注意:如果需要安装指定版本的XGBoost,需要切换到相应的分支下;

    git branch -a
    git checkout remotes/origin/release_1.2.0
    

    然后,定位到python-packages目录:

    cd python-packages
    

    执行(注意,这里和CPU/单GPU的略有不同):

    python setup.py install --use-cuda --use-nccl
    python setup.py build   
    python setup.py build_ext
    python setup.py sdist     
    python setup.py bdist    
    python setup.py bdist_wheel 
    

    配置成功,使用pip list查看;

    4.4 Dask与dask-cuda的安装

    使用pip list成功看到xgboost,表明编译成功;

    XGBoost支持使用Dask进行分布式训练,那么接下来就需要安装两个库,分别是:Daskdask-cuda

    Dask是一个基于Python的并行计算库,能够更容易的管理分布式的worker...

    安装Dask

    pip install dask==2.21.0
    
    • 我这边安装的是2.21.0

    另外,还需要dask-cuda,可以从dask-cuda页面下载,我下载的是0.14.1版本;

    pip install dask_cuda-0.14.1-py3-none-any.whl
    

    4.5 验证

    配置成功,使用代码进行验证:

    XGBoost的Multi-GPU的代码与CPU/单GPU有很大的不同,如下:

    import time
    from sklearn.datasets import make_classification
    from sklearn.model_selection import train_test_split
    from dask_cuda import LocalCUDACluster
    from dask.distributed import Client
    from xgboost.dask import DaskDMatrix
    import xgboost as xgb
    from dask import array as da
    
    
    def train():
    
        dataset, labels = make_classification(n_samples=10000, n_features=50, n_informative=3, n_classes=3)
        print(dataset.shape, labels.shape)
    
        x_train, x_test, y_train, y_test = train_test_split(dataset, labels, test_size=0.3, random_state=7)
        print("x_train: {}, x_test: {}".format(x_train.shape, x_test.shape))
    
        X_train_da = da.from_array(x_train, chunks=(100))
        X_test_da = da.from_array(x_test, chunks=(100))
        y_train_da = da.from_array(y_train, chunks=(100))
        y_test_da = da.from_array(y_test, chunks=(100))
    
        dtrain = DaskDMatrix(client, X_train_da, y_train_da)
        dtest = DaskDMatrix(client, X_test_da, y_test_da)
    
        params = {
            'tree_method': 'gpu_hist',
            'booster': 'gbtree',
            'objective': 'multi:softmax',
            'num_class': 3,
            'max_depth': 6,
            'eval_metric': 'merror',
            'eta': 0.01
        }
    
        evals = [(dtrain, 'train'), (dtest, 'val')]
    
        res = xgb.dask.train(client, params, dtrain, num_boost_round=100,
                               evals=evals)
    
        train_error = res['history']['train']['merror']
        eval_error = res['history']['val']['merror']
        for tra, eva in zip(train_error, eval_error):
            print("train: {}, eval: {}".format(tra, eva))
    
    if __name__ == "__main__":
        with LocalCUDACluster(n_workers=1, threads_per_worker=3, CUDA_VISIBLE_DEVICES="0,1,2,3") as cluster:
            with Client(cluster) as client:
                train()
    

    输出结果:

    task [xgboost.dask]:tcp://127.0.0.1:43551 connected to the tracker
    task [xgboost.dask]:tcp://127.0.0.1:43551 got new rank 0
    train: 0.091143, eval: 0.117333
    train: 0.091571, eval: 0.117333
    train: 0.090857, eval: 0.117333
    train: 0.090714, eval: 0.117667
    ...
    

    好了,XGBoost的CPU、GPU、Multi-GPU三个版本的安装到此完成;

  • 相关阅读:
    多个在线参考手册,值得收藏
    DIV层,点“+”展开,“-”关闭
    网页设计标准尺寸
    【转】 大年三十整理的asp.net资料! (.NET) (ASP.NET)
    【转】xml操作
    【配色】web2.0 配色参考
    【转】关闭开机硬盘自检的方法
    【转】css的一些基础的东西
    web.config加密解密
    [转]用 Javascript 获取滚动条位置等信息
  • 原文地址:https://www.cnblogs.com/chenzhen0530/p/13885234.html
Copyright © 2011-2022 走看看