linux 为什么xgboost在我更好的电脑上速度明显更慢?

cgh8pdjw  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(151)

xgboost在我的更强大的计算机上执行得非常慢,特别是xgboost。
较弱的计算机规格:

  • Windows 10,python 3.9.7(jupyter),pandas 1.3.5,sklearn 1.0.2,xgboost 1.5.1
  • 16GB RAM,Intel i7-10870H

强大的计算机规格:

  • Ubuntu,python 3.9.5,pandas 1.4.0,sklearn 1.0.2,xgboost 1.5.2
  • 32GB RAM,AMD Ryzen 5900

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

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 Ryzen 9 5900切换到Intel i9 12900的性能提高了很多(2.7分钟到1.8分钟),我仍然有问题,较弱的计算机是优于(1.1分钟).也许xgboost对Linux来说不是那么好,和/或现代高端CPU。我再次指出,这只是xgboost(不是sklearn模型).我还注意到,在训练过程中,CPU温度出乎意料地低(~ 40 C),所以系统显然没有推动CPU的潜力。
更新#3:我在强大的计算机上安装了Windows 10和anaconda,并运行了上述代码,它在0.86分钟内完成。

8i9zcol2

8i9zcol21#

为了确保你在两个系统上使用相同的库;我建议使用pip freeze。只要在PC上使用pip freeze -l > requirements.txt,复制的执行时间更短。
然后在目标计算机上创建一个虚拟环境并执行pip install requirements.txt。通过这种方式,您将一次安装所有相同的软件包。
然而,解释性能差异的一种猜测是;该算法可能需要高频率的单核,而不是低得多的频率AMD内核。因此,这可能是AMD设备性能较低的原因。

更新

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

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

字符串
PC 2:

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环境,并在两个环境上安装了以下版本:

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


其他要点:根据htop,两次测试的所有CPU核心都是90%+
上一篇:python testXGboost.py
PC1:3.7 ~ 4.7 s
PC 2:0.93 ~ 1.04 s
CUDA_VISIBLE_DEVICES=-1 python testXGboost.py
PC 1:~ 13.5
PC 2:4.7
我认为其中一个原因是,在XGBoost性能中,每核时钟比核数更重要。第二个原因是,XGBoost可能会在某种程度上自动使用GPU。因此,这两个原因(可能)解释了为什么两台PC上的性能不同。

相关问题