MLPClassifier в sklearn.neural_network, похоже, использует много доступных ядер ЦП, т. е. процесс python начинает использовать 50% вычислительной мощности при подгонке модели. Как предотвратить это? Является ли это возможным? Из документации кажется, что нет параметра n_jobs для управления этим поведением. Я использую sklearn версии 0.20 из ноябрьского дистрибутива Winpython. Это хорошо на моем ноутбуке, но не очень хорошо на сервере, который используют другие.
Контролировать количество ядер ЦП, которые использует sklearn MLPClassifier?
comment
В других классификаторах есть параметр n_jobs, с помощью которого определяется количество потоков
- person Kenneth Obando   schedule 10.02.2019
comment
Да, я знаю. Кажется, для этого его нет. Или я пропустил?
- person Konsta   schedule 10.02.2019
comment
Google: numpy + BLAS + параметры. Sklearn не принимает непосредственного участия
- person sascha   schedule 11.02.2019
comment
Ах, это BLAS на заднем плане делает это? Хм. Посмотрим.
- person Konsta   schedule 12.02.2019
Ответы (2)
Не уверен, что вы пытались настроить количество потоков динамически, а не глобально (через переменную среды), но я предлагаю попробовать установить количество потоков с помощью mkl
:
import mkl
mkl.set_num_threads(3)
Из личного опыта я заметил, что после добавления двух строк кода, приведенных выше, вверху моего скрипта, использование моего ЦП будет ограничено примерно 26~28% (при использовании рабочего стола с 12 ЦП), даже если я тренировал MLPClassifier
, который не нет возможности установить n_jobs
.
person
noBee
schedule
28.01.2020
Не могли бы вы обернуть свой MLPClassifier в GridSearchCV? Использование GridSearchCV позволит вам установить n_jobs
, и при желании вы можете использовать ShuffleSplit, если хотите запустить GridSearchCV без перекрестной проверки.
Например:
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import GridSearchCV, ShuffleSplit
X,y = make_classification(n_samples=100000)
mlp = MLPClassifier()
grid = GridSearchCV(mlp, {}, n_jobs=1, cv=ShuffleSplit(n_splits=1),
verbose=2)
grid.fit(X,y)
person
Jarad
schedule
11.02.2019
Да, я тоже думал о таком обходном пути. Вы пробовали, работает?
- person Konsta; 12.02.2019
Хм, я попробовал фрагмент. Он утверждает, что использует одного одновременно работающего исполнителя, но на самом деле использует все ядра одновременно.
- person Konsta; 15.02.2019
Интересное понимание. Я думал, что это сработает. В качестве следующего шага я, вероятно, изучу параллель с joblib и посмотрю, возможно ли это сделать с помощью MLPClassifier. Извините, мой ответ не помог.
- person Jarad; 16.02.2019