Python で sklearn の GridSearchCV を使用して、SVM 分類子のパラメーターを見つけようとしています。トレーニング データの形状は (15750,65536) (15750 サンプル、特徴次元: 65536) です。
デフォルト設定ですべて正常に動作します!ただし、並列処理オプションを使用したい場合は、n_jobs を定義することで次の問題に直面します。グリッドサーチ/トレーニングを開始することはありません! (h)top では、プロセスのステータスは S です (したがって、基本的に停止しています!)。メモリを占有し続けますが、実行を開始することはありません (CPU 使用率はゼロのままです!)。
2,3-5 など、n_jobs にさまざまな値を試しました (マシンには 8 つのコアがあります)。しかし、運が悪い!ドキュメントによると、大きなデータでは、コピーされるデータの数が制限され、メモリの問題が回避されるように、GridSearchCV で pre_dispatch オプションを使用できます。それで、n_job=2、pre_dispatch=1 でも試してみましたが、まだ何も動作しません!
また、1000 サンプルなど、はるかに少ないサンプル数で同じコードを試してみたところ、すべて問題なく動作しました。ただし、問題は、1 つのプロセスでデータがマシン メモリの 15% しか占有しないことを考えると、pre_dispatch=2 で少なくとも 2 つのコアで実行できないのはなぜですか?? その場合、マシンのメモリの約 30% を使用する必要があります。しかし、なぜプロセスが停止したのでしょうか? そして、メモリエラーさえありませんか?そして、それを回避する方法があれば?
これは、ジョブを実行するためのコードです (主に sklearn のドキュメントから取得)。
sklearn バージョン: 0.12.1 および python バージョン: 2.7.3
tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4],
'C': [1, 10, 100, 1000]},
{'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]
clf = GridSearchCV(SVC(C=1), tuned_parameters, n_jobs=2, verbose=3, pre_dispatch=1)
clf.fit(tr, tt, cv=3)