ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LightGBM 安装指南:从源码编译到多后端部署的完整实战手册

LightGBM 安装指南:从源码编译到多后端部署的完整实战手册 LightGBM 安装指南从源码编译到多后端部署的完整实战手册【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBMLightGBM 是一个基于决策树算法、面向排序、分类与回归等机器学习任务的高性能梯度提升框架。本文以仓库 docs/Installation-Guide.rst 为骨架结合 CMakeLists.txt 等源码级证据系统讲解 LightGBM 的版本规则、通用编译选项以及 Windows / Linux / macOS 三大平台上的 CLI、库文件、GPU、CUDA、ROCm、MPI、Java 与 C 测试等多种构建路径。读完本文你将掌握按需定制 LightGBM 二进制产物的完整技能并能在排错时定位到对应的 CMake 配置与源码位置。版本规则与发布形态EffVer 版本号语义LightGBM 的版本号采用三段式{major}.{minor}.{patch}遵循名为Intended Effort VersioningEffVer的版本方案。与语义化版本不同EffVer 的每一位数字直接反映升级代码需要付出的工作量major升级将需要显著工作量minor需要一定工作量patch几乎不需要工作量。因此新的 minor 版本可能包含破坏性变更不过这些变更通常较小或仅影响项目中较少使用的部分。当前仓库 VERSION.txt 中的版本号为4.7.0.99末尾的.99正是 nightly 开发版本的标记见下文。Nightly 包与版本号.99后缀当从未发布的 commit 源码构建时包版本号会追加.99形如{major}.{minor}.{patch}.99。这个.99的巧妙之处在于它让基于未发布 commit 构建的版本比此前所有正式发布版更新、又比此后所有未来版本更旧从而在包管理器中天然获得正确的排序语义。从仓库根目录执行以下命令即可下载指定 commit 的构建产物bash .ci/download-artifacts.sh ${COMMIT_ID}其中COMMIT_ID是main分支上某个 commit 的完整 SHA。产物会被下载到release-artifacts/目录。从 .ci/download-artifacts.sh 的源码可以看到该脚本会依次拉取build.yml核心产物、python_package.ymlPython 包与 NuGet 包、r_package.ymlR 包和swig.ymlSWIG 产物对应的 workflow 运行产物并将其扁平化到顶层目录便于直接上传到发布页。Python 包的 nightly 版本还可以通过pip等安装器直接获取例如 python-package/README.rst 中给出的命令pip install --no-deps --index-url https://pypi.anaconda.org/lightgbm-packages/simple lightgbm通用构建选项一次掌握所有平台以下指令均针对64 位版本。32 位版本仅在极少数受环境限制的特殊情况下才值得编译——它既慢又未经充分测试使用需自担风险且安装时需要调整部分命令。默认情况下构建会同时产出共享库Windows 为.dll、Linux 为.so、macOS 为.dylib和带命令行接口的可执行文件。这些选项全部定义在 CMakeLists.txt 顶部的option(...)声明中第 7-31 行可通过 CMake 标志自由组合CMake 标志默认值作用-DBUILD_CLIOFFON禁用 CLI 可执行文件的编译-DBUILD_STATIC_LIBONOFF构建静态库而非共享库-DINSTALL_HEADERSOFFON不把头文件安装到系统目录-DUSE_HOMEBREW_FALLBACKOFFON仅 macOS不在 Homebrew 标准目录查找依赖如 OpenMP-DUSE_TIMETAGONOFF输出内部各例程耗时便于基准测试-DUSE_DEBUGONOFF开启 Debug 模式禁用全部编译器优化执行更多内部检查-DUSE_SANITIZERON -DENABLED_SANITIZERS...OFF启用编译器 Sanitizer-DUSE_OPENMPOFFON关闭 OpenMP 支持强烈不推荐-DUSE_MPIONOFF启用基于 MPI 的分布式学习-DUSE_GPUONOFF启用 OpenCL GPU 加速训练-DUSE_CUDAONOFF启用 CUDA 加速训练-DUSE_ROCMONOFF启用 ROCm 加速训练-DUSE_SWIGONOFF启用 SWIG 生成 Java API-DBUILD_CPP_TESTONOFF使用 Google Test 构建 C 测试几点值得注意的工程细节编译工具默认使用VS Build Tools或make所有平台上都可以改用Ninja在 CMake 标志中添加-G Ninja但 VS Build Tools 无法被 Ninja 替代。在 Debug 模式下CMake 会追加-g -O0GCC/Clang或/OdMSVC等编译选项见 CMakeLists.txt 第 334-337、376-379 行也可以在 Visual Studio 中直接选择Debug_*配置如Debug_DLL、Debug_mpi。编译器版本有硬性下限检查GCC 需不低于 4.8.2、Clang 需不低于 3.8、AppleClang 需不低于 8.1.0、MSVC 需不低于 1900见 CMakeLists.txt 第 73-89 行不满足时会直接FATAL_ERROR。Sanitizer 构建调试模式之外LightGBM 还支持用编译器 Sanitizer 构建启用方式cmake -B build -S . -DUSE_SANITIZERON -DENABLED_SANITIZERSaddress;leak;undefined支持的 Sanitizer 有address— AddressSanitizerASanleak— LeakSanitizerLSanundefined— UndefinedBehaviorSanitizerUBSanthread— ThreadSanitizerTSan。注意ThreadSanitizer 不能与其他 Sanitizer 同时使用。这一点在 cmake/Sanitizer.cmake 中有严格的互斥校验若同时指定了thread与其它 Sanitizer构建会直接报错终止。该模块为undefined自动附加-fno-sanitize-recoverundefined即遇到未定义行为立即中止而非恢复执行另外 CMakeLists.txt 第 51-54 行还表明MSVC 不支持 Sanitizer一旦在 MSVC 下开启USE_SANITIZER也会直接FATAL_ERROR。用 Sanitizer 构建 C 单元测试尤其有价值见下文「Build C Unit Tests」一节这也是仓库 CI 与 CRAN 包质量检查ASAN/UBSAN所依赖的机制。Windows 构建在 Windows 上LightGBM 可用三种方式构建Visual Studio、CMake VS Build Tools、CMake MinGW。方式一Visual Studio或 VS Build ToolsGUI 构建安装 Visual Studio。在 releases 页面下载LightGBM-complete_source_code_zip.zip并解压。进入LightGBM-complete_source_code_zip/windows目录。用 Visual Studio 打开 LightGBM.sln需要可执行文件选Release配置需要共享库选DLL配置然后点击Build→Build Solution (CtrlShiftB)。若报Platform Toolset错误进入Project→Properties→Configuration Properties→General选择本机已安装的 Toolset。若报Windows SDK Version错误同样路径下选择本机已安装的 SDK。构建产物位置.exe在windows/x64/Release.dll在windows/x64/DLL。方式二CMake 命令行构建安装 Git for Windows、CMake 和 VS Build Tools若已装 Visual Studio 则无需后者。执行git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -A x64 cmake --build build --target ALL_BUILD --config Release产物.exe与.dll位于LightGBM/Release目录。其中-A x64显式指定 64 位架构与本文「所有指令面向 64 位版本」的前提一致。方式三MinGW-w64安装 Git for Windows、CMake 和 MinGW-w64。执行git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -G MinGW Makefiles cmake --build build -j4产物.exe与.dll直接位于LightGBM/目录。注意若遇到sh.exe was found in your PATH错误可能需要把cmake -B build -S . -G MinGW Makefiles再执行一次或在 CMake 标志中追加-DCMAKE_SHCMAKE_SH-NOTFOUND。官方建议在多核系统上使用Visual Studio因为其在 Windows 上的多线程效率更好详见 docs/FAQ.rst 中 Question 4 与 Question 8后者解释了为什么 MinGW 构建在大数据集、多核场景下 CPU 占用率可能只有约 10%。Linux 构建在 Linux 上LightGBM 可用CMake gcc或CMake Clang构建。编译完成后可执行文件与.so文件位于LightGBM/目录。使用 gcc安装 CMake 和 gcc。执行git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . cmake --build build -j4使用 Clang安装 CMake、Clang 和 OpenMP。执行14替换为你机器上安装的 Clang 版本号git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM export CXXclang-14 CCclang-14 cmake -B build -S . cmake --build build -j4macOS 构建与安装在 macOS 上LightGBM 既可以用包管理器直接安装也可以从源码构建。构建完成后可执行文件与.dylib文件位于LightGBM/目录。用 Homebrew 安装brew install lightgbm用 MacPorts 安装sudo port install LightGBM注意MacPorts 中的 LightGBM 端口并非由 LightGBM 官方维护者维护。从源码构建Apple Clang安装 CMake 和 OpenMPbrew install cmake libomp构建git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . cmake --build build -j4Apple Clang 默认不自带 OpenMP因此libomp是必装依赖。从源码看当USE_OPENMPON且 CMake 找不到系统 OpenMP 时会通过brew --prefix libomp回退查找 Homebrew 的 keg-only 安装位置见 CMakeLists.txt 第 192-208 行这个回退行为可以由-DUSE_HOMEBREW_FALLBACKOFF关闭。从源码构建gcc安装 CMake 和 gccbrew install cmake gcc构建7替换为你机器上安装的 gcc 版本号git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM export CXXg-7 CCgcc-7 cmake -B build -S . cmake --build build -j4macOS 上还有一处与 R 包相关的特殊处理构建出的lib_lightgbm.dylib会把 OpenMP 依赖的绝对路径改写为rpath相对引用并追加 Homebrew/opt/homebrew/opt/libomp/lib与 MacPorts/opt/local/lib/libomp等 RPATH 查找路径以避免同一进程内加载多个libomp.dylib导致段错误见 CMakeLists.txt 第 728-844 行。使用 Docker 部署仓库的 docker/README.md 提供了完整的 Docker 使用说明包含三类镜像CLI 版本dockerfile-cli只含 LightGBM 命令行工具Python 包版本dockerfile-python内置 Python-packageR 包版本dockerfile-r内置 R-package。以 CLI 镜像为例构建并训练一个二分类模型mkdir lightgbm-docker cd lightgbm-docker wget https://raw.githubusercontent.com/lightgbm-org/LightGBM/main/docker/dockerfile-cli docker build -t lightgbm-cli -f dockerfile-cli . # 配置训练参数 cat EOF train.conf task train objective binary data binary.train num_trees 10 output_model LightGBM-CLI-model.txt EOF # 训练并输出模型文件 docker run \ --rm \ --volume ${PWD}:/opt/training \ --workdir /opt/training \ lightgbm-cli \ configtrain.conf训练数据可复用仓库中的 examples/binary_classification/binary.train。GPU 版镜像见 docker/gpu/README.md其中dockerfile-cli-only-distroless.gpu基于多阶段构建可将镜像压缩到约 15 MB。构建无 OpenMP 版本不推荐LightGBM 默认基于OpenMP构建。可以构建不带 OpenMP 支持的版本但官方强烈不建议这样做。关闭方式是在所有平台的 CMake 命令中追加-DUSE_OPENMPOFF。这里仅以 Linux gcc 为例git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_OPENMPOFF cmake --build build -j4Windows GUI 方式则需要在Project→Properties→Configuration Properties→C/C→Language中把OpenMP Support改为No (/openmp-)。注意 CMakeLists.txt 第 191-213 行显示USE_OPENMPON时 OpenMP 是find_package(... REQUIRED)的硬依赖因此不装 OpenMP 就无法完成默认构建。构建 MPI 版本默认版本基于socket通信LightGBM 也支持MPI——一种支持RDMA的高性能通信方案。当需要以高性能通信运行分布式学习应用时可构建带 MPI 支持的版本。所有平台统一追加-DUSE_MPIONWindows 上 MinGW 因缺少 MPI 库而不支持构建 MPI 版本。Linux gcc 示例git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_MPION cmake --build build -j4从 CMakeLists.txt 第 169-174 行可以看到两种通信后端是互斥的USE_MPION时定义USE_MPI宏否则定义USE_SOCKET宏对应的网络实现分别为 src/network/linkers_mpi.cpp 与 src/network/linkers_socket.cpp。Windows 与 macOS 要点WindowsGUI需先安装 MS MPImsmpisdk.msi和msmpisetup.exe都需要然后在 Visual Studio 中选择Release_mpi配置构建命令行方式为cmake -B build -S . -A x64 -DUSE_MPION。macOSApple Clang 路径需brew install cmake libomp open-mpigcc 路径需brew install cmake open-mpi gcc。构建 GPU 版本OpenCL 后端GPU 版本对应训练参数device_typegpu基于OpenCL实现只有直方图计算在 GPU 上完成训练的其他部分仍在 CPU 上运行。构建时追加-DUSE_GPUON需要OpenCL和BoostBoost.Align、Boost.System、Boost.Filesystem、Boost.ChronoDebian 系对应libboost-dev、libboost-system-dev、libboost-filesystem-dev、libboost-chrono-dev等包。从 CMakeLists.txt 第 215-231 行看Windows 下 Boost 使用静态库链接Boost_USE_STATIC_LIBS ON并追加-DUSE_GPU宏核心实现在 src/treelearner/gpu_tree_learner.cpp。Linux gcc 示例git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_GPUON # 若将 NVIDIA CUDA 安装到了自定义位置需显式指定 OpenCL 头文件与库路径 # cmake -B build -S . -DUSE_GPUON -DOpenCL_LIBRARY/usr/local/cuda/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR/usr/local/cuda/include/ cmake --build build -j4Linux 上 OpenCL 头文件与库通常由 GPU 厂商提供也可以使用通用 OpenCL ICD 包如 Debian 的ocl-icd-libopencl1、ocl-icd-opencl-dev、pocl-opencl-icd。Windows 要点按 GPU 品牌安装对应 OpenCL 开发套件Intel 用 Intel SDK for OpenCL、AMD 用 AMD APP SDK、NVIDIA 用 CUDA Toolkit对应关系详见 docs/GPU-Targets.rst。安装与 Visual C 版本匹配的 Boost 预编译二进制VS 2017 →msvc-14.1-64.exe、VS 2019 →msvc-14.2-64.exe、VS 2022 →msvc-14.3-64.exe。构建命令需通过-DBOOST_ROOT与-DBOOST_LIBRARYDIR指定 Boost 位置cmake -B build -S . -A x64 -DUSE_GPUON -DBOOST_ROOTC:/local/boost_1_63_0 -DBOOST_LIBRARYDIRC:/local/boost_1_63_0/lib64-msvc-14.3 cmake --build build --target ALL_BUILD --config ReleasemacOS 不支持 GPU 版本Apple 的 OpenCL 支持不足以支撑该实现。构建 CUDA 版本全流程 GPU 加速CUDA 版本device_typecuda是与 OpenCL GPU 版本相互独立的另一套实现它把整个训练过程都放到 GPU 上显著更快且支持多 GPU 以及多节点多 GPU 训练。使用前提是Linux 环境 算力 6.0 及以上的 NVIDIA GPU。Windows 与 macOS 均不支持 CUDA 版本Windows 上请改用device_typegpu。Linux gcc 示例git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_CUDAON cmake --build build -j4构建细节见 CMakeLists.txt 第 176-184、242-259 行要求 CUDA Toolkit 11.8 及以上find_package(CUDAToolkit 11.8 REQUIRED)并且CUDA 构建强制开启 OpenMPset(USE_OPENMP ON ... FORCE)多 GPU 训练依赖NCCLfind_package(NCCL REQUIRED)对应实现为 src/boosting/cuda/nccl_gbdt.cpp默认按检测到的 CUDA Toolkit 版本生成一组硬编码的 GPU 架构列表CUDA ≥ 13.0 时为75 80 86 89 90 100 120≥ 12.9 时为70 75 80 86 89 90 100 120≥ 12.8 时为60 61 70 75 80 86 89 90 100 120≥ 11.8 时为60 61 70 75 80 86 89 90见 cmake/Utils.cmake 第 19-32 行列表末尾的架构会同时生成-realSASS性能优先与-virtualPTX向前兼容两种代码。如需支持更多架构可显式设置CMAKE_CUDA_ARCHITECTURES# 例覆盖全部 Blackwell 架构含 DGX Spark cmake -B build -S . -DUSE_CUDAON -DCMAKE_CUDA_ARCHITECTURES100;120;121-real;121-virtual # 例只针对本机 GPU cmake -B build -S . -DUSE_CUDAON -DCMAKE_CUDA_ARCHITECTURESnativeCUDA 版本的完整实现位于 src/treelearner/cuda 目录如 cuda_single_gpu_tree_learner.cpp、cuda_histogram_constructor.cu编译时通过 CMakeLists.txt 第 476-478 行将 CMakeLists.txt 中列出的LGBM_CUDA_SOURCES追加进源码列表。构建 ROCm 版本AMD GPUROCm 版本针对AMD GPU复用device_typecuda作为训练参数这是刻意为之的用户便利设计。仅支持 LinuxWindows 与 macOS 上请使用device_typegpu。Linux gcc 示例git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_ROCMON cmake --build build -j4从 CMakeLists.txt 第 186-189、261-290 行可以看到ROCm 构建启用 HIP 语言、强制开启 OpenMP并且add_definitions(-DUSE_CUDA)与add_definitions(-DUSE_ROCM)同时生效——这正是它能复用device_typecuda代码路径的原因多 GPU 通信依赖 RCCLfind_package(rccl)。ROCm 对应的内核源码以.cu文件存在并被重新指定为 HIP 语言编译第 480-489 行。构建 Java WrapperSWIG使用以下步骤可生成一个包含 LightGBM C API由 SWIG 包装的 JAR 文件构建后.jar位于LightGBM/build目录。核心接口定义在 swig/lightgbmlib.i。Linux gcc 示例安装 CMake、gcc、SWIG 和 Java确保JAVA_HOME环境变量已正确设置。构建git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_SWIGON cmake --build build -j4从 CMakeLists.txt 第 91-117、537-587 行可见SWIG 构建会强制关闭 CLI 与头文件安装生成包名com.microsoft.ml.lightgbm并在各平台把lib_lightgbm共享库连同.jar一起输出到对应目录。macOS 要点brew install cmake openjdk swig libomp export JAVA_HOME$(brew --prefix openjdk)/libexec/openjdk.jdk/Contents/Home/Windows 上同样推荐使用 VS Build Tools多核多线程效率更好。构建 Python-packagePython 包的详细安装与构建说明见 python-package/README.rst其中关键路径有从 PyPI 安装pip install lightgbmwheel 内置于 Windows/Linux 的库同时支持 CPU 与 GPU 后端GPU 只需安装 OpenCL RuntimemacOS 用户需brew install libomp。源码构建pip install lightgbm --no-binary lightgbm。构建 CUDA 版本pip install \ --no-binary lightgbm \ --config-settingscmake.define.USE_CUDAON \ --config-settingscmake.define.CMAKE_CUDA_ARCHITECTURES100;120;121-real;121-virtual \ lightgbm4.7.0从 GitHub 安装克隆仓库后执行sh ./build-python.sh install并可用--gpu、--cuda、--mpi、--nomp、--bit32、--time-costs、--mingw等开关定制构建。注意不要混淆两个 GPU 后端Python 参数{device: gpu}对应 OpenCL 版本{device: cuda}对应 CUDA/ROCm 版本。构建 R-packageR 包的安装说明见 R-package/README.md。最简单的方式是直接安装 CRAN 版本install.packages(lightgbm, repos https://cran.r-project.org)从源码构建则使用仓库根目录的 build_r.Rgit clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM Rscript build_r.Rbuild_r.R支持--no-build-vignettes、-j并行编译线程数、--skip-install、--use-gpu、--use-mingw、--use-msys2等选项。GPU 版例如Rscript build_r.R \ --use-gpu \ --opencl-library/usr/lib/x86_64-linux-gnu/libOpenCL.so \ --boost-librarydir/usr/lib/x86_64-linux-gnuR 包构建的 C 侧源码为 R-package/src/lightgbm_R.cpp 与 R-package/src/lightgbm_R.h构建时通过 CMakeLists.txt 中的__BUILD_FOR_R选项接入并会跳过 nanoarrow 子目录以避免 CRAN 对包内容的告警第 140-149 行。构建 C 单元测试C 单元测试基于Google Test构建产物是可执行文件testlightgbm。追加-DBUILD_CPP_TESTON即可例如 Linux gccgit clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DBUILD_CPP_TESTON cmake --build build --target testlightgbm -j4Windows VS Build Tools 的命令行构建为cmake -B build -S . -A x64 -DBUILD_CPP_TESTON后cmake --build build --target testlightgbm --config DebugDebug 配置产物在LightGBM/Debug。构建逻辑见 CMakeLists.txt 第 673-715 行若系统根目录找不到 Google Test会通过FetchContent拉取googletest v1.14.0测试源码位于 tests/cpp_tests如 test_common.cpp、test_serialize.cpp、test_single_row.cpp 等。小结按需组合构建选项综合全文一次典型的「功能齐全」Linux 构建可以是git clone --recursive https://github.com/lightgbm-org/LightGBM cd LightGBM cmake -B build -S . -DUSE_MPION -DUSE_GPUON -DBUILD_CPP_TESTON -DUSE_TIMETAGON cmake --build build -j4选型建议速查只需 CPU 训练默认构建即可无需任何额外参数Windows 多核性能优先优先 Visual Studio / VS Build Tools而非 MinGW分布式高性能通信追加-DUSE_MPIONNVIDIA GPU 全流程加速Linux追加-DUSE_CUDAON可配CMAKE_CUDA_ARCHITECTURESAMD GPULinux追加-DUSE_ROCMONOpenCL GPU含 Windows追加-DUSE_GPUON并提供 OpenCL/Boost 依赖输出 Java 可调用包追加-DUSE_SWIGON并配置好 SWIG 与 Java开发调试与质量检查追加-DUSE_DEBUGON、-DUSE_SANITIZERON或-DBUILD_CPP_TESTON。所有构建选项的默认值与宏定义均可回溯到 CMakeLists.txt 顶部遇到构建问题时对照该文件逐项排查即可。【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表