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分钟内完成。
1条答案
按热度按时间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:
字符串
PC 2:
型
为了公平起见,我用python
3.9.7
做了一个新的Conda环境,并在两个环境上安装了以下版本:型
其他要点:根据
htop
,两次测试的所有CPU核心都是90%+上一篇:
python testXGboost.py
PC1:
3.7 ~ 4.7
sPC 2:
0.93 ~ 1.04
sCUDA_VISIBLE_DEVICES=-1 python testXGboost.py
:PC 1:
~ 13.5
PC 2:
4.7
我认为其中一个原因是,在XGBoost性能中,每核时钟比核数更重要。第二个原因是,XGBoost可能会在某种程度上自动使用GPU。因此,这两个原因(可能)解释了为什么两台PC上的性能不同。