对于我更强大的计算机来说,xgboost表现得非常缓慢,尤其是xgboost。
较弱的计算机规格:
强大的计算机规格:
下面的代码在功能强大的计算机上花费了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 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优化的
发布于 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:
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.0PC2:
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其他要点:根据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。因此,这两个解释(可能)为什么性能是不同的,在你的两台电脑。
https://stackoverflow.com/questions/71279948
复制相似问题