我正在使用以下2个平台的Intel®Xeon®L5640(6核12兄弟姐妹)运行一组parallel计算
Ubuntu 18.04,Python 3.7.3,numpy 1.16.4,sklearn 0.21.2。
Windows 7 Ultimate,Python 3.7.3,numpy 1.16.4,sklearn 0.21.2。
没有其他作业/任务占用CPU核心。
我替补标记了该程序并获得了一些统计信息。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_openml
import time
X, y = fetch_openml('mnist_784', version=1, return_X_y=True)
(trainData, testData, trainLabels, testLabels) = train_test_split(X,
y, test_size=0.1)
start = time.time()
model = KNeighborsClassifier(n_jobs=4)
model.fit(trainData, trainLabels)
predictions = model.predict(testData)
print('n_jobs=4 took {}s'.format(time.time() - start))
在Ubuntu和Windows上花费了大约470秒,这是合理的。
然后我运行了
start = time.time()
model = KNeighborsClassifier(n_jobs=6)
model.fit(trainData, trainLabels)
predictions = model.predict(testData)
print('n_jobs=6 took {}s'.format(time.time() - start))
在Ubuntu上花费了大约493s,在Windows上花费了350s,其中Windows上的部分是合理的,而Ubuntu上的部分不是。
n_jobs = 6比Windows上的n_jobs = 4花费的时间更少,这是合理的,因为代码使用了更多的cpu内核。
在Ubuntu上,n_jobs = 6比n_jobs = 4花费更多的时间,这是不合理的。
这表明与默认后端并行的joblib在Ubuntu和Windows之间执行不同的逻辑。
,然后我搜索doc。但是文档中涉及的“ windows”是关于“多处理”后端的,由于我的是“ 0.13.2”,因此不适用于此处。
那么,为什么Ubuntu的性能比Windows慢?