Python с использованием нескольких ядер без меня спрашивая - PullRequest
0 голосов
/ 28 декабря 2018

Я запускаю двойной вложенный цикл над i,j, и я использую функцию PCA sklearn во внутреннем цикле.Хотя я не использую какие-либо пакеты параллельной обработки, диспетчер задач говорит мне, что все мои процессоры работают между 80% -100%.Я приятно удивлен этим, и у меня есть 2 вопроса:

1) Что здесь происходит?Как Python решил использовать несколько процессоров?Как это разорвать петлю?Распечатывая значения i,j, они все еще завершаются в порядке.

2) Будет ли код еще более ускорен благодаря явному распараллеливанию его с пакетом, или разница будет незначительной?

1 Ответ

0 голосов
/ 28 декабря 2018

"Несколько инструментов scikit-learn ... внутренне полагаются на многопроцессорный модуль Python для распараллеливания выполнения на несколько процессов Python, передавая n_jobs> 1 в качестве аргумента."

Поэтому одно объяснение, что где-то в вашем коде n_jobs является допустимым аргументом для процесса sklearn.Я немного сбит с толку, потому что этот аргумент содержится только в специализированных инструментах PCA.

https://scikit -learn.org / stable / modules / generate / sklearn.decomposition.PCA.html (№ n_jobs)

https://scikit -learn.org / stable / modules / generate / sklearn.decomposition.KernelPCA.html (Has n_jobs)

https://scikit -learn.org / stable / modules / Генерированный / sklearn.decomposition.MiniBatchSparsePCA.html (Имеет n_jobs)

Виновником также может быть, но вам нужно немного покопаться в реализации, чтобы начать изучение того, где sklearn использует numpy параллельные инструменты.

Sklearn имеет целевую страницу специально для оптимизации существующих инструментов sklearn (инаписание собственных инструментов.) Они предлагают различные предложения и конкретно упоминают joblib. Проверить

...