我尝试在具有 16 个可用 CPU 的机器上运行以下代码:
def tokenizer(text):
return text.split()
param_grid = [{'vect__stop_words': [None, stop],
'vect__binary': [True, False]}]
bow = CountVectorizer(ngram_range=(1,1), tokenizer=tokenizer)
multinb_bow = Pipeline([('vect', bow), ('clf', MultinomialNB())])
gs_multinb_bow = GridSearchCV(multinb_bow, param_grid, scoring='f1_macro',
cv=3, verbose=1, n_jobs=-1)
gs_multinb_bow.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
我设置n_jobs为-1,但scikit-learn切换到SequentialBackend,即使我添加了上下文管理器with parallel_backend('loky'):并且脚本仍然仅使用 1 个并发工作器运行。
Fitting 3 folds for each of 4 candidates, totalling 12 fits
[Parallel(n_jobs=-1)]: Using backend SequentialBackend with 1 concurrent workers.
Run Code Online (Sandbox Code Playgroud)
如果我为 指定不同的值,同样的结果仍然存在n_jobs。
为什么会这样?我最近在类似的任务上运行了似乎是相同的代码,并且网格搜索在多个 CPU 上并行工作,如n_jobs使用LokyBackend …
python parallel-processing machine-learning scikit-learn grid-search