从源码构建

本页提供关于如何在各种系统上从源代码构建和安装XGBoost的说明。如果这些说明对您不起作用,请随时在 用户论坛 上提问。

备注

预构建的二进制文件可用:现在支持GPU

考虑从预构建的二进制文件安装 XGBoost,以避免从源代码构建 XGBoost 的麻烦。查看 安装指南

获取源代码

要获取 XGBoost 的开发仓库,需要使用 git

备注

使用 Git 子模块

XGBoost 使用 Git 子模块来管理依赖项。因此,当你克隆仓库时,记得指定 --recursive 选项:

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

对于使用GitHub工具的Windows用户,您可以打开Git Shell并输入以下命令:

git submodule init
git submodule update

构建共享库

本节描述了独立构建共享库和CLI接口的步骤。对于构建特定语言的包,请参阅本文档中的相应章节。

  • 在Linux和其他类UNIX系统上,目标库是 libxgboost.so

  • 在MacOS上,目标库是 libxgboost.dylib

  • 在Windows上,目标库是 xgboost.dll

这个共享库被不同的语言绑定使用(根据你选择的绑定,可能会有一些额外的内容)。最小的构建要求是

  • 支持 C++11 的最新 C++ 编译器(g++-5.0 或更高版本)

  • CMake 3.14 或更高版本。

有关CMake选项的列表,如GPU支持,请参见源代码树顶层CMakeLists.txt中的``#– Options``。

在Linux和其他类UNIX系统上构建

获取源代码后,通过运行 CMake 来构建 XGBoost:

cd xgboost
mkdir build
cd build
cmake ..
make -j$(nproc)

在 MacOS 上构建

Homebrew 获取 libomp

brew install libomp

其余部分与在Linux上构建相同。

在Windows上构建

XGBoost 支持使用 Microsoft Visual Studio 和 MinGW 进行编译。要使用 Visual Studio 进行构建,我们需要 CMake。确保安装了最新版本的 CMake。然后从 XGBoost 目录的根目录运行以下命令:

mkdir build
cd build
cmake .. -G"Visual Studio 14 2015 Win64"
# for VS15: cmake .. -G"Visual Studio 15 2017" -A x64
# for VS16: cmake .. -G"Visual Studio 16 2019" -A x64
cmake --build . --config Release

这指定了一个使用 Visual Studio 64 位生成器的源外构建。(如果您安装了不同版本的 Visual Studio,请相应地更改 -G 选项。)

构建过程成功结束后,您将在 ./lib/ 文件夹中找到一个 xgboost.dll 库文件。关于使用 MinGW 的一些注意事项已添加在 使用 MinGW-w64 为 Windows 构建 Python 包 (高级) 中。

支持GPU的构建

XGBoost 可以通过 CMake 在 Linux 和 Windows 上构建支持 GPU 的版本。关于 R 的特殊说明,请参阅 Building R package with GPU support

需要最新版本的CUDA工具包。

备注

检查您的编译器版本

CUDA 对支持的编译器非常挑剔,可以在 这里 查看适用于最新 CUDA 版本的 Linux 兼容编译器表。

一些发行版会打包一个与 CUDA 兼容的 gcc 版本。如果你在使用 nvcc 时遇到编译错误,尝试使用 -DCMAKE_CXX_COMPILER=/path/to/correct/g++ -DCMAKE_C_COMPILER=/path/to/correct/gcc 指定正确的编译器。例如,在 Arch Linux 上,这两个二进制文件都可以在 /opt/cuda/bin/ 下找到。

从Linux命令行开始,从XGBoost目录:

mkdir build
cd build
cmake .. -DUSE_CUDA=ON
make -j4

备注

指定计算能力

为了加快编译速度,可以将特定于您的GPU的计算版本传递给cmake,例如 -DCMAKE_CUDA_ARCHITECTURES=75。一些架构的快速解释和编号可以在 这个页面 中找到。

备注

使用 NCCL 进行更快的分布式 GPU 训练

默认情况下,分布式GPU训练是启用的,并使用Rabit进行通信。为了更快的训练,设置选项 USE_NCCL=ON。更快的分布式GPU训练依赖于NCCL2,可在 此链接 获取。由于NCCL2仅适用于Linux机器,更快的分布式GPU训练仅适用于Linux

mkdir build
cd build
cmake .. -DUSE_CUDA=ON -DUSE_NCCL=ON -DNCCL_ROOT=/path/to/nccl2
make -j4

NCCL 提供了一些额外的标志,BUILD_WITH_SHARED_NCCL 允许使用 NCCL 作为共享库来构建 XGBoost,而 USE_DLOPEN_NCCL 则允许 XGBoost 在运行时使用 dlopen 加载 NCCL。

在Windows上,按如下方式运行CMake:

mkdir build
cd build
cmake .. -G"Visual Studio 17 2022" -A x64 -DUSE_CUDA=ON

(如果您安装了不同版本的 Visual Studio,请适当更改 -G 选项。)

上述 cmake 配置运行将在构建目录中创建一个 xgboost.sln 解决方案文件。在 Release 模式下构建此解决方案,可以从 Visual Studio 或命令行中进行:

cmake --build . --target xgboost --config Release

要加快编译速度,可以通过附加选项 -- /MP 来并行运行多个作业。

联邦学习

联合学习插件需要 grpcprotobuf。要安装 grpc,请参考 gRPC 网站的安装指南。或者,如果 conda 可用,可以使用 conda forge 中的 libgrpcprotobuf 包。获取所需的依赖项后,在运行 CMake 时启用标志:-DPLUGIN_FEDERATED=ON。请注意,联合插件仅支持 Linux。

从源码构建Python包

Python 包位于 python-package/

使用默认工具链构建Python包

有几种方法可以从源代码构建和安装包:

  1. 首先使用CMake构建C++核心

你可以首先使用 CMake 构建 C++ 库,如 构建共享库 中所述。编译后,共享库将出现在 lib/ 目录中。在 Linux 发行版上,共享库是 lib/libxgboost.so。安装脚本 pip install . 将重用共享库而不是从头开始编译,这使得运行速度非常快。

$ cd python-package/
$ pip install .  # Will re-use lib/libxgboost.so
  1. 直接安装Python包

你可以导航到 python-package/ 目录,并通过运行直接安装 Python 包

$ cd python-package/
$ pip install -v .

这将使用默认的 CMake 标志编译 XGBoost 的原生(C++)代码。要启用额外的编译选项,请传递相应的 --config-settings

$ pip install -v . --config-settings use_cuda=True --config-settings use_nccl=True

使用 Pip 22.1 或更高版本来使用 --config-settings 选项。

以下是 --config-settings 可用的选项:

@dataclasses.dataclass
class BuildConfiguration:  # pylint: disable=R0902
    """Configurations use when building libxgboost"""

    # Whether to hide C++ symbols in libxgboost.so
    hide_cxx_symbols: bool = True
    # Whether to enable OpenMP
    use_openmp: bool = True
    # Whether to enable CUDA
    use_cuda: bool = False
    # Whether to enable NCCL
    use_nccl: bool = False
    # Whether to load nccl dynamically
    use_dlopen_nccl: bool = False
    # Whether to enable federated learning
    plugin_federated: bool = False
    # Whether to enable rmm support
    plugin_rmm: bool = False
    # Special option: See explanation below
    use_system_libxgboost: bool = False

use_system_libxgboost 是一个特殊选项。详见下面的第4项。

备注

建议使用详细标志

由于 pip install . 会编译 C++ 代码,因此完成需要一些时间。为了确保构建过程顺利进行,我们建议您在调用 pip install 时添加详细标志 (-v)。

  1. 可编辑安装

为了进一步促进快速开发和迭代,我们提供了一个 可编辑安装。在可编辑安装中,安装的包只是一个指向 XGBoost 源代码工作副本的符号链接。因此,您对源目录所做的每一个更改都会立即对 Python 解释器可见。要将 XGBoost 作为可编辑安装安装,首先按照之前描述的方式构建共享库,然后安装 Python 包:

# Under xgboost source directory
mkdir build
cd build
# Build shared library libxgboost.so
cmake .. -GNinja
ninja
# Install as editable installation
cd ../python-package
pip install -e .
  1. 在系统路径中使用 libxgboost.so

此选项对于希望分别打包 libxgboost.so 和 XGBoost Python 包的包管理器很有用。例如,Conda 发布了 ``libxgboost``(用于共享库)和 ``py-xgboost``(用于 Python 包)。

要使用此选项,首先确保系统库路径中存在 libxgboost.so

import sys
import pathlib
libpath = pathlib.Path(sys.base_prefix).joinpath("lib", "libxgboost.so")
assert libpath.exists()

然后向 pip install 传递 use_system_libxgboost=True 选项:

cd python-package
pip install . --config-settings use_system_libxgboost=True

备注

有关将 XGBoost 打包并分发为 Python 分发的说明,请参阅 关于打包 XGBoost 的 Python 包的说明

使用 MinGW-w64 为 Windows 构建 Python 包 (高级)

Python 的 Windows 版本是使用 Microsoft Visual Studio 构建的。通常,Python 二进制模块是使用与解释器相同的编译器构建的。然而,由于以下原因,您可能无法使用 Visual Studio:

  1. VS 是专有和商业软件。微软提供了一个免费的“社区”版本,但其许可条款对使用地点和方式施加了限制。

  2. Visual Studio 包含遥测功能,如 Microsoft Visual Studio 许可条款 中所述。运行带有遥测功能的软件可能违反您组织的政策。

因此,您可能希望自行承担风险使用 GCC 构建 XGBoost。这带来了一些困难,因为 MSVC 使用 Microsoft 运行时,而 MinGW-w64 使用自己的运行时,并且这些运行时具有不同的不兼容内存分配器。但实际上,如果您知道如何处理,这种设置是可以使用的。以下是一些经验。

  1. 如果在退出时使用了XGBoost,Python解释器将会崩溃。这通常不是一个大问题。

  2. -O3 是可以的。

  3. -mtune=native 也是可以的。

  4. 不要使用 -march=native gcc 标志。如果实际使用了 DLL,使用它会导致 Python 解释器崩溃。

  5. 你可能需要为库提供运行时库。如果 mingw32/bin 不在 PATH 中,可以构建一个 wheel(pip wheel),用归档工具打开它并将所需的 dll 文件放到 xgboost.dll 所在的目录中。然后你可以使用 pip 安装这个 wheel。

从源代码构建R包

默认情况下,通过运行 install.packages 安装的包是从源代码构建的。这里我们列出了一些安装开发版本的其它选项。

安装开发版本(Linux / Mac OSX)

确保你已经安装了git和一个支持C++11的最新C++编译器(参见上文关于构建C++核心的要求部分)。

由于使用了 git-submodules,remotes::install_github() 不能用于安装 R 包的最新版本。因此,必须先运行 git 来检出代码,参见 获取源代码 了解如何为 XGBoost 初始化 git 仓库。获取源代码后,安装 R 包的最简单方法是:

cd R-package
R CMD INSTALL .

但如果你想使用CMake构建以获得更好的性能(它包含检测可用CPU指令的逻辑)或围绕编译标志获得更大的灵活性,可以将上述代码片段替换为:

mkdir build
cd build
cmake .. -DR_LIB=ON
make -j$(nproc)
make install

使用 Visual Studio 安装开发版本(Windows)

在Windows上,可以使用带有Visual C++ Build Tools(或Visual Studio)的CMake来构建R包。

虽然不是必需的,但如果你安装了 R 包 processx ,即通过 install.packages("processx") ,这个构建过程可以更快。

备注

在Windows上设置正确的PATH环境变量

如果你使用的是Windows,请确保在PATH环境变量中包含正确的目录。

  • 如果你使用的是R 4.x和RTools 4.0: - C:\rtools40\usr\bin - C:\rtools40\mingw64\bin

  • 如果你使用的是 R 3.x 和 RTools 3.x:

    • C:\Rtools\bin

    • C:\Rtools\mingw_64\bin

打开命令提示符并导航到 XGBoost 目录,然后运行以下命令。确保指定正确的 R 版本。

cd C:\path\to\xgboost
mkdir build
cd build
cmake .. -G"Visual Studio 16 2019" -A x64 -DR_LIB=ON -DR_VERSION=4.0.0
cmake --build . --target install --config Release

使用GPU支持构建R包

该过程和要求与 支持GPU的构建 中的相似,因此请务必先阅读它。

在Linux上,从XGBoost目录开始输入:

mkdir build
cd build
cmake .. -DUSE_CUDA=ON -DR_LIB=ON
make install -j$(nproc)

当使用默认目标时,R 包共享库将在 build 区域中构建。install 目标除了在 build/R-package 下将包文件与这个共享库组合外,还会运行 R CMD INSTALL

在Windows上,必须使用带有Visual Studio的CMake来构建支持GPU的R包。还需要安装Rtools。

备注

在Windows上设置正确的PATH环境变量

如果你使用的是Windows,请确保在PATH环境变量中包含正确的目录。

  • 如果你使用的是 R 4.x 和 RTools 4.0:

    • C:\rtools40\usr\bin

    • C:\rtools40\mingw64\bin

  • 如果你使用的是 R 3.x 和 RTools 3.x:

    • C:\Rtools\bin

    • C:\Rtools\mingw_64\bin

打开命令提示符并导航到 XGBoost 目录,然后运行以下命令。确保指定正确的 R 版本。

cd C:\path\to\xgboost
mkdir build
cd build
cmake .. -G"Visual Studio 16 2019" -A x64 -DUSE_CUDA=ON -DR_LIB=ON -DR_VERSION=4.0.0
cmake --build . --target install --config Release

如果在配置步骤中CMake找不到您的R,您可以像这样向CMake提供R的位置:-DLIBR_HOME="C:\Program Files\R\R-4.0.0"

如果在Windows上,在尝试写入…Program Files/R/… 时遇到“权限被拒绝”错误,请在您的个人主目录中创建一个 .Rprofile 文件(如果该目录中还没有此文件),并向其中添加一行代码,指定您的R包用户库的位置,如下所示:

.libPaths( unique(c("C:/Users/USERNAME/Documents/R/win-library/3.4", .libPaths())))

你可以在 R GUI 或 RStudio 中通过运行 .libPaths() 来找到确切的位置。

构建JVM包

使用 Maven 构建 XGBoost4J 需要 Maven 3 或更新版本、Java 7+ 以及用于编译 Java 代码和 Java Native Interface (JNI) 绑定的 CMake 3.13+。

在安装 XGBoost4J 之前,您需要将环境变量 JAVA_HOME 定义为您的 JDK 目录,以确保您的编译器能够正确找到 jni.h,因为 XGBoost4J 依赖 JNI 来实现 JVM 与本地库之间的交互。

在正确设置 JAVA_HOME 后,只需在 jvm-packages 目录下运行 mvn package 即可安装 XGBoost4J。如果你确信本地设置的正确性,也可以通过运行 mvn -DskipTests=true package 来跳过测试。

要将工件发布到本地 Maven 仓库,请运行

mvn install

或者,如果你想跳过测试,运行

mvn -DskipTests install

此命令将发布 xgboost 二进制文件、编译后的 java 类以及 java 源代码到您的本地仓库。然后您可以通过在 pom.xml 中包含以下依赖项在您的 Java 项目中使用 XGBoost4J:

<dependency>
  <groupId>ml.dmlc</groupId>
  <artifactId>xgboost4j</artifactId>
  <version>latest_source_version_num</version>
</dependency>

对于 sbt,请在 build.sbt 中添加仓库和依赖,如下所示:

resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"

"ml.dmlc" % "xgboost4j" % "latest_source_version_num"

如果你想使用 XGBoost4J-Spark,请将 xgboost4j 替换为 xgboost4j-spark

备注

XGBoost4J-Spark 需要 Apache Spark 2.3 及以上版本

XGBoost4J-Spark 现在需要 Apache Spark 2.3+。最新版本的 XGBoost4J-Spark 广泛使用 org.apache.spark.ml.param.shared 的设施,以提供与 Spark MLLIB 框架的紧密集成,而这些设施在早期版本的 Spark 中并不完全可用。

此外,请确保直接从 Apache 网站 安装 Spark。上游 XGBoost 不保证与第三方分发的 Spark 兼容,例如 Cloudera Spark。 请咨询相应的第三方以获取他们的 XGBoost 分发版本。

为 Mac OS 启用 OpenMP

如果你使用的是 Mac OS 并且使用支持 OpenMP 的编译器,你需要进入文件 xgboost/jvm-packages/create_jni.py 并注释掉该行

CONFIG["USE_OPENMP"] = "OFF"

为了获得多线程的好处。

支持GPU的构建

如果你想构建支持分布式GPU训练的XGBoost4J,请运行

mvn -Duse.cuda=ON install

构建文档

XGBoost 使用 Sphinx 进行文档编写。要在本地构建它,你需要安装带有所有依赖项的 XGBoost,以及:

  • 系统依赖项

    • git

    • graphviz

  • Python 依赖项

    查看 doc/ 目录下的 requirements.txt 文件

xgboost/doc 目录下,运行 make <format> ,将 <format> 替换为你想要的格式。要查看支持的格式列表,请在同一目录下运行 make help