現在実行中のGridSearchの出力はpstree
です。私はプロセスが進行中であることを知りたいと思っています。なぜscikit-learnのGridSearchCVが非常に多くのスレッドを生成するのですか
├─bash─┬─perl───20*[bash───python─┬─5*[python───31*[{python}]]]
│ │ └─11*[{python}]]
│ └─tee
└─bash───pstree
私は関係のないものを削除しました。カッコはスレッドを意味します。
- 私はpythonジョブを開始するために
parallel -j 20
を使用したため、perlの外観があります。ご覧のとおり、20*
には20のプロセスがあります。 bash
各プロセスの前に、source activate venv
のAnaconda仮想環境がアクティブ化されているためです。- 各pythonプロセスの内部には、別の5つのpythonプロセス(
5*
)が生成されています。これは、n_jobs=5
〜GridSearchCV
と指定したためです。
私の理解はここで終わります。
質問は:誰もが、なぜグリッドサーチと一緒に別の11 Pythonのスレッド(11*[{python}]
)がある、と31件のPythonのスレッド(31*[{python}]
)は5グリッドサーチジョブの各内部で生成された説明することができますか?
更新は:興味があればあなたが簡単に再現するために、私は要旨にtest codeを包ん
:アップデート(2017年9月27日)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)
を呼び出すためのコードを追加しました。
Mac Proと複数のLinuxマシンで同じコードをテストし、@igrinisの結果を再現しましたが、Mac Proのみでした。 Linuxマシンでは、これまでとは違う数字が得られますが、一貫しています。したがって、生成されるスレッドの数は、GridSearchCVへの特定のデータフィードに依存する場合があります。
python─┬─5*[python───31*[{python}]]
└─3*[{python}]
Mac ProおよびLinuxマシンでhomebrew/linuxbrewによってインストールされるpstreeは異なることに注意してください。ここで私は私が使用される正確なバージョンを投稿:
マック:
pstree $Revision: 2.39 $ by Fred Hucht (C) 1993-2015
EMail: fred AT thp.uni-due.de
のLinux:Mac版は、私が考えていたこれは、スレッドを表示するオプションを持っていないようです
pstree (PSmisc) 22.20
Copyright (C) 1993-2009 Werner Almesberger and Craig Small
なぜ彼らは結果に見えないのでしょうか。私はMac Pro上のスレッドを簡単に検査する方法を見つけていません。あなたが方法を知っている場合、コメントしてください。
アップデート(2017年10月12日)実験の別のセットでは
、私は環境変数OMP_NUM_THREADS
を設定すると違いがあることを確認しました。
bash───python─┬─23*[python───63*[{python}]]
└─3*[{python}]
ここでのLinux parallel
なし使用:不明の利用が生み出さずに、上記のよう
はexport OMP_NUM_THREADS=1
する前に、(この場合は63)多くのスレッドがあります。 n_jobs=23
。
export OMP_NUM_THREADS=1
以降、スレッドは生成されませんでしたが、3つのPythonプロセスがまだ存在していますが、その使用はまだ認識されていません。
bash───python─┬─23*[python]
└─3*[{python}]
それは私のGridSearchCVの仕事の一部に誤りが発生するので、私が最初にOMP_NUM_THREADS
に出くわした、エラーメッセージがsklearn.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.
GridSearchCVの正確なパラメータ値を使用して関数呼び出しを表示できますか? –
@MohammedKashif、私の追加したコードをご覧ください – zyxue
ActivityMonitorはMac上のスレッド数を表示します。1プロセスには4つのスレッドがあり、他の1つは1だけです。 – igrinis