Facebook Prophetを利用したkaggleのnotebookで、Poolを利用していたので、Poolのメモ
一つのモデルで、データ毎にモデルを作成したいときに、便利
参考サイト:
- starmapでPythonでの並列処理の結果をリストで受け取る
- multiprocessing --- プロセスベースの並列処理
- Forecasting multiple time-series using Prophet
- Python Multiprocessing Example
例1)Poolによる、データ並列入力、並列処理
- Poolインスタンスを作成(プロセス数を引数で指定)
Poolインスタンスのmap()メソッドの第一引数に対象関数を、第二引数に対象データのリストを渡す
例2)Poolによるモデル並列作成
- Poolインスタンスのstarmap(関数, データリスト)メソッドで並列化すると、各プロセスの戻り値をリストで受け取ることが出来る。
- コードは、kaggle M-5 Forecasting で、prophetを使っていたnotebookより
- 面倒なので、コード分割して貼り付け。
- 以下では、店舗ごと、デパートメントごとにモデルを作成しているが、そのモデルの作成と予測作業を並列化している。
run_prophet()は、デパートメントid(dept_id)と、店舗id(store_id)を受取り、デパートメント毎・ストアごとにモデルを作成して予測し、予測値を返す関数。
idsは、対象デパートメント(dept_id)と、店舗id(store_id)のタプルのリスト。
Poolに、cpuのコア数を渡し、starmap()メソッドで(dept_id, store_id)ごとの予測値をリストで受け取る。また、各戻り値のリストをさらにリストに入れている
0コメント