从源码构建
本页提供关于如何在各种系统上从源代码构建和安装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
从源码构建Python包
Python 包位于 python-package/
。
使用默认工具链构建Python包
有几种方法可以从源代码构建和安装包:
首先使用CMake构建C++核心
你可以首先使用 CMake 构建 C++ 库,如 构建共享库 中所述。编译后,共享库将出现在
lib/
目录中。在 Linux 发行版上,共享库是lib/libxgboost.so
。安装脚本pip install .
将重用共享库而不是从头开始编译,这使得运行速度非常快。$ cd python-package/ $ pip install . # Will re-use lib/libxgboost.so
直接安装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
)。
可编辑安装
为了进一步促进快速开发和迭代,我们提供了一个 可编辑安装。在可编辑安装中,安装的包只是一个指向 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 .
在系统路径中使用
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:
VS 是专有和商业软件。微软提供了一个免费的“社区”版本,但其许可条款对使用地点和方式施加了限制。
Visual Studio 包含遥测功能,如 Microsoft Visual Studio 许可条款 中所述。运行带有遥测功能的软件可能违反您组织的政策。
因此,您可能希望自行承担风险使用 GCC 构建 XGBoost。这带来了一些困难,因为 MSVC 使用 Microsoft 运行时,而 MinGW-w64 使用自己的运行时,并且这些运行时具有不同的不兼容内存分配器。但实际上,如果您知道如何处理,这种设置是可以使用的。以下是一些经验。
如果在退出时使用了XGBoost,Python解释器将会崩溃。这通常不是一个大问题。
-O3
是可以的。-mtune=native
也是可以的。不要使用
-march=native
gcc 标志。如果实际使用了 DLL,使用它会导致 Python 解释器崩溃。你可能需要为库提供运行时库。如果
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
。