Я пытаюсь запустить следующий код на машине с 16 доступными процессорами:
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)
Я устанавливаю 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.
Тот же результат сохраняется, если указать другое значение для n_jobs
.
Почему это происходит? Недавно я выполнил похожий код для аналогичной задачи, и поиск по сетке работал параллельно на нескольких процессорах, как указано n_jobs
с использованием LokyBackend
.