首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么xgboost在我更好的计算机上要慢得多呢?

为什么xgboost在我更好的计算机上要慢得多呢?
EN

Stack Overflow用户
提问于 2022-02-26 20:11:10
回答 1查看 848关注 0票数 0

对于我更强大的计算机来说,xgboost表现得非常缓慢,尤其是xgboost。

较弱的计算机规格:

  • Windows 10,python3.9.7 (jupyter),熊猫1.3.5,sklearn 1.0.2,xgboost 1.5.1
  • 16 10内存,Intel i7-10870H

强大的计算机规格:

  • Ubuntu,python 3.9.5,熊猫1.4.0,sklearn 1.0.2,xgboost 1.5.2
  • 32 RAM内存,AMD 5900

下面的代码在功能强大的计算机上花费了2.7分钟,而在我较弱的计算机上则花费了1.1分钟。当使用sklearn的交叉验证类(利用多处理)时,性能差异甚至更大(大约慢了30倍)。

代码语言:javascript
复制
import pandas as pd
from sklearn.datasets import load_iris
import xgboost as xgb
import datetime

iris = load_iris()

x = iris.data
y = iris.target

start = datetime.datetime.now()
print(start)
for i in range(1000):
    mdl2 = xgb.XGBClassifier(learning_rate=.15
                             , max_depth=9
                             , min_child_weight=1
                             , min_split_loss=.1
                             , colsample_bytree=.5
                             , scale_pos_weight=.46)
     
    mdl2.fit(x, y)

finished = ((datetime.datetime.now() - start).seconds/60)
print(finished)

更新1:我怀疑AMD CPU与英特尔相比不太兼容xgboost。我正在购买英特尔的i9 12900,并将在1周后更新

更新2:虽然性能有了很大的提高,从AMD 95900到英特尔的i9 12900 (2.7分钟到1.8分钟),但我仍然有一些问题,在较弱的计算机表现优于(1.1分钟)。也许xgboost并不适合linux和/或现代高端CPU。我将再次指出,这只是xgboost (而不是sklearn模型)。我还注意到,在训练期间cpu温度出乎意料地冷(~40℃),因此系统显然没有增加CPU的潜力。

更新3:我在功能强大的计算机上安装了Windows 10和anaconda,并运行了上述代码,它在0.86分钟内完成。因此,很明显,xgboost是在Ubuntu上为Windows 10优化的

EN

回答 1

Stack Overflow用户

发布于 2022-02-26 20:31:07

为了确保在这两个系统上使用相同的库,我建议使用pip freeze。只要在PC上做pip freeze -l > requirements.txt,拷贝的执行时间就会更短。

然后在目标计算机上创建一个虚拟环境并执行pip install requirements.txt。这样,您将一次性安装相同的软件包。

然而,一种解释性能差异的猜测是,该算法可能需要高频单核,而不是更低频率的AMD核心。因此,这可能是AMD设备性能下降的原因。

更新

我在两个系统上遇到了同样的问题:我使用sudo dmidecode -t processor | grep "Speed"获得CPU速度,最大可能显示超频时的最高速度)

PC1:

代码语言:javascript
复制
Ubuntu 20.04 server
377GB RAM, 
2CPUs: 96cores in sum with  Max Speed: 4500 MHz Current Speed: 2200 MGHz
lscpu model name: `Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz`
nvcc -V: 11.0

PC2:

代码语言:javascript
复制
Ubuntu 20.04
31GB RAM, 
12 cores    Max Speed: 8300 MHz Current Speed: 3200 MHz
lscpu: model name: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
nvcc -V: 10.1

为了进行比较,我使用python 3.9.7创建了一个新的Conda环境,并在这两个版本上安装了以下版本:

代码语言:javascript
复制
certifi==2021.10.8
DateTime==4.4
joblib==1.1.0
numpy==1.22.2
pandas==1.4.1
python-dateutil==2.8.2
pytz==2021.3
scikit-learn==1.0.2
scipy==1.8.0
six==1.16.0
sklearn==0.0
threadpoolctl==3.1.0
xgboost==1.5.2
zope.interface==5.4.0

其他要点:根据90%+的说法,两个测试的所有CPU核心都是90%+。

最后:使用python testXGboost.py

PC1:3.7 ~ 4.7 s

PC2:0.93 ~ 1.04 s

CUDA_VISIBLE_DEVICES=-1 python testXGboost.py

PC1:~ 13.5

PC2:4.7

我认为一个原因是,在XGBoost性能中,每核时钟比核心计数更重要。第二个原因是,XGboost可能会在某种程度上自动使用GPU。因此,这两个解释(可能)为什么性能是不同的,在你的两台电脑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71279948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档