Pythonで機械学習プロジェクトを行っているので、プログラムで使用している並列予測関数を実行する必要があります。
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
def multi_predict(X, predict, *args, **kwargs):
pool = Pool(cpu_count())
results = pool.map(predict, X)
pool.close()
pool.join()
return results
問題は、すべてのCPUが20〜40%(合計で100%)でしかロードされないことです。酸洗機能のマルチプロセッシングモジュールに問題があるため、multiprocessing.dummyを使用します。
multiprocessing.dummy
を使用する場合、プロセスではなくスレッドを使用しています。
multiprocessing.dummy
はmultiprocessing
のAPIを複製しますが、threading
モジュールのラッパーにすぎません。
つまり、 グローバルインタープリターロック(GIL) によって制限されており、一度に実際にCPUにバインドされた操作を実行できるスレッドは1つだけです。これにより、CPUを十分に活用できなくなります。使用可能なすべてのコアで完全な並列処理が必要な場合は、multiprocessing.Pool
でヒットしているピクルスの問題に対処する必要があります。
並列化する必要がある作業がIOバインドされている場合、またはGILを解放するC拡張機能を利用する場合、multiprocessing.dummy
は依然として有用であることに注意してください。ただし、純粋なPythonコードの場合は、multiprocessing
が必要です。