Вот вывод pstree
моего текущего работающего GridSearch, мне любопытно посмотреть, какие процессы происходят, и есть кое-что, что я пока не могу объяснить.
├─bash─┬─perl───20*[bash───python─┬─5*[python───31*[{python}]]]
│ │ └─11*[{python}]]
│ └─tee
└─bash───pstree
Я удалил все, что не имеет отношения к делу. Фигурные скобки означают темы.
- Появление perl связано с тем, что я использовал
parallel -j 20
для запуска своих заданий на python. Как видите,20*
действительно показывает, что процессов 20. - Процесс
bash
перед каждым из процессов python связан с активацией виртуальной среды Anaconda с помощьюsource activate venv
. - Внутри каждого процесса Python порождаются еще 5 процессов Python (
5*
). Это потому, что я указал отn_jobs=5
доGridSearchCV
.
На этом мое понимание заканчивается.
Вопрос: кто-нибудь может объяснить, почему существуют еще 11 потоков python (11*[{python}]
) вместе с поиском по сетке, и 31 поток python (31*[{python}]
) порождаются внутри каждого из 5 заданий поиска по сетке?
Обновление: добавлен код для вызова GridSearchCV
Cs = 10 ** np.arange(-2, 2, 0.1)
skf = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
clf = LogisticRegression()
gs = GridSearchCV(
clf,
param_grid={'C': Cs, 'penalty': ['l1'],
'tol': [1e-10], 'solver': ['liblinear']},
cv=skf,
scoring='neg_log_loss',
n_jobs=5,
verbose=1,
refit=True)
gs.fit(Xs, ys)
Обновление (27 сентября 2017 г.):
Я собрал тестовый код, чтобы вы могли легко воспроизвести его, если интересно.
Я протестировал тот же код на Mac Pro и нескольких машинах с Linux и воспроизвел результат @igrinis, но только на Mac Pro. На машинах с Linux я получаю другие числа, чем раньше, но стабильно. Таким образом, количество созданных потоков может зависеть от конкретного потока данных в GridSearchCV.
python─┬─5*[python───31*[{python}]]
└─3*[{python}]
Обратите внимание, что pstree, установленный homebrew/linuxbrew на компьютерах Mac Pro и Linux, отличается. Здесь я размещаю точные версии, которые я использовал:
Мак:
pstree $Revision: 2.39 $ by Fred Hucht (C) 1993-2015
EMail: fred AT thp.uni-due.de
Линукс:
pstree (PSmisc) 22.20
Copyright (C) 1993-2009 Werner Almesberger and Craig Small
Версия для Mac, похоже, не имеет возможности отображать потоки, и я подумал, что это может быть причиной того, что они не видны в результате. Я еще не нашел способа легко проверить потоки на Mac Pro. Если вы знаете способ, пожалуйста, прокомментируйте.
Обновление (2017-10-12)
В другом наборе экспериментов я подтвердил, что установка переменной среды OMP_NUM_THREADS
имеет значение.
До export OMP_NUM_THREADS=1
было много (в данном случае 63) потоков без неясного использования, созданных, как описано выше:
bash───python─┬─23*[python───63*[{python}]]
└─3*[{python}]
Линукс parallel
здесь не используется. n_jobs=23
.
После export OMP_NUM_THREADS=1
потоки не порождались, но 3 процесса Python все еще существуют, об использовании которых я до сих пор не знаю.
bash───python─┬─23*[python]
└─3*[{python}]
Сначала я столкнулся с OMP_NUM_THREADS
, потому что это вызывает ошибку в некоторых моих заданиях GridSearchCV, сообщения об ошибках примерно такие
OMP: Error #34: System unable to allocate necessary resources for OMP thread:
OMP: System error #11: Resource temporarily unavailable
OMP: Hint: Try decreasing the value of OMP_NUM_THREADS.
export OMP_NUM_THREADS=1
, это может играть роль - person zyxue   schedule 12.10.2017