You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows与Ubuntu系统中XGBoost执行时间差异原因及优化咨询

XGBoost在Ubuntu上运行远慢于Windows的原因及优化方法

我有一个包含405行、45列的小型数值型数据集,计划使用R语言的xgboost库构建回归模型,代码如下:

library(tidyverse)
library(xgboost)
df = read_csv('df.csv')
y_train = as.matrix(df$y)
x_train = as.matrix(df[, 2:45])
params = list(max_depth = 6, eta = 0.05, subsample=0.8, objective = "reg:squarederror")
xgb_train = xgb.DMatrix(data = x_train, label = y_train)

s1 = Sys.time()
model = xgb.train(data=xgb_train, nrounds = 100, params = params)
s2 = Sys.time()
print(s2-s1)

在搭载Intel Xeon处理器、128GB内存的Windows电脑上运行该代码耗时约0.5秒,而在搭载Intel Xeon处理器、256GB内存的Ubuntu机器上耗时达1.12分钟。以下是可能的原因及优化方法:

可能的原因

  • XGBoost编译版本差异:Windows上的xgboost多为预编译的多线程优化版本,而Ubuntu上的xgboost可能在编译时未启用OpenMP多线程支持,或默认线程数设置过低,无法充分利用CPU核心。
  • 编译优化缺失:Ubuntu上的R或xgboost可能使用默认编译选项构建,未开启针对Intel Xeon的CPU指令集优化(如AVX、SSE),而Windows版本通常会做针对性优化。
  • 系统资源调度差异:Linux和Windows的线程调度机制不同,Ubuntu可能未给R进程分配足够的CPU资源,或进程优先级较低,导致运行时被其他进程抢占资源。
  • 磁盘IO性能差异:若Ubuntu机器使用的磁盘(如机械硬盘)IO性能远低于Windows的SSD,数据读取阶段的耗时会被计入总运行时间,拖慢整体速度。

优化方法

  • 启用并配置多线程:
    • 先检查xgboost的OpenMP支持:运行xgboost::xgb.config(),若输出显示OpenMP support: enabled则正常,否则需重新编译xgboost并开启OpenMP。
    • 在参数中手动指定线程数,比如修改params为:
      params = list(max_depth = 6, eta = 0.05, subsample=0.8, 
                    objective = "reg:squarederror", nthread = parallel::detectCores())
      
      直接利用全部可用CPU核心。
  • 重新编译xgboost并开启CPU优化:
    • 从GitHub克隆xgboost源码,编译时添加优化选项:
      git clone --recursive https://github.com/dmlc/xgboost
      cd xgboost
      mkdir build && cd build
      cmake -DUSE_OPENMP=ON -DUSE_AVX=ON -DUSE_SSE=ON ..
      make -j$(nproc)
      
      之后在R中安装本地编译的版本:install.packages("../", repos = NULL, type = "source")。
  • 提升进程优先级:
    • 在Ubuntu上运行脚本时,用nice命令提高R进程优先级:
      nice -n -10 Rscript your_script_name.R
      
      让系统优先分配CPU资源给该进程。
  • 优化数据读取:
    • 改用data.table包的fread()函数读取数据,其在Linux环境下的读取速度显著优于read_csv():
      library(data.table)
      df = fread('df.csv')
      
  • 更新xgboost版本:
    • 检查当前版本:packageVersion("xgboost"),若版本较旧,更新到最新稳定版:install.packages("xgboost"),新版本通常会修复性能问题。

内容的提问来源于stack exchange,提问作者Álvaro Méndez Civieta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:30:06