jupyter 中报告的 n_jobs=1 和 CPU 用法之间存在差异
Discrepancy between reported n_jobs=1 and CPU-usage in jupyter
我 运行 在 KneighborsClassifier 上设置 GridSearchCV 并将 n_jobs 超参数设置为 -1 ,因此我所有的 CPU 都用于网格搜索。所以直觉上我认为应该有 8 种不同的超参数组合 运行 并行。
在 运行 在 ubuntu 上使用 htop 期间,我可以看到我的所有 8 个 CPU 都被 python 使用了 99%,所以看起来正如预期的那样。
但是 jupyter 在 运行
期间输出
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
从代码输出中我可以看出,似乎所有内容都是串行执行的而不是并行执行的。
那么这里到底发生了什么?
编辑:代码
from sklearn.model_selection import GridSearchCV
param_grid_knn=[
{
'weights' : ['uniform','distance'],
'n_jobs' : [-1],
'n_neighbors' : [3,5,7],
'p' :[1,2]
}
]
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn,param_grid_knn,cv=5,scoring='accuracy',return_train_score=True,verbose=2,refit=True)
grid_search.fit(train_data,train_labels)
我找到了答案,n_jobs=1指的是GridSearchCV使用的n_jobs,默认情况下是1,因为我没有在它的函数调用中指定它。
我 运行 在 KneighborsClassifier 上设置 GridSearchCV 并将 n_jobs 超参数设置为 -1 ,因此我所有的 CPU 都用于网格搜索。所以直觉上我认为应该有 8 种不同的超参数组合 运行 并行。
在 运行 在 ubuntu 上使用 htop 期间,我可以看到我的所有 8 个 CPU 都被 python 使用了 99%,所以看起来正如预期的那样。 但是 jupyter 在 运行
期间输出[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
从代码输出中我可以看出,似乎所有内容都是串行执行的而不是并行执行的。
那么这里到底发生了什么?
编辑:代码
from sklearn.model_selection import GridSearchCV
param_grid_knn=[
{
'weights' : ['uniform','distance'],
'n_jobs' : [-1],
'n_neighbors' : [3,5,7],
'p' :[1,2]
}
]
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn,param_grid_knn,cv=5,scoring='accuracy',return_train_score=True,verbose=2,refit=True)
grid_search.fit(train_data,train_labels)
我找到了答案,n_jobs=1指的是GridSearchCV使用的n_jobs,默认情况下是1,因为我没有在它的函数调用中指定它。