iPythonでmultiprocessing.Poolのmapを使うと
kernelを停止した時にPythonがゾンビ化するためできるだけ使いたくない.
そこで,iPythonのデフォルトの機能で並列化する.
ここではiPyhtonによる並列化の最低限の使い方を示します.
詳細は [Parallel Computing with IPython]を参照してください.
追記
ipython notebook がjupyterに移行したことにより初期設定では
クラスタの起動画面でipyparallelをpipインストールするように要求されるようになりました.(ずいぶん前から移行してましたが今頃になって追記します 2016/1/19)
インストールコマンド
pip install ipyparallel
さらに,jupyter_notebook_config.pyに以下の1行を書き加えないと有効になりません...
c.NotebookApp.server_extensions.append('ipyparallel.nbextension')
jupyter_notebook_config.pyはホームディレクトリの.jupyter内にありますが....以下の1行を実行しないとデフォルトでは生成されていないようです...
jupyter notebook --generate-config
クラスタの起動
iPython notebook起動時の画面からClustersを選択する.
下記のようにnotebook起動時に指定したprofileに対応するエンジン数を設定・開始する.
コードの実行
import numpy as np
from IPython import parallel
clients = parallel.Client()
# 同期実行(並列計算中に制御は返ってこない)
clients.block = True
view = clients.load_balanced_view()
dview = clients[:]
#クラスタ(エンジン?)の数を確認
print clients.ids
def func(n):
return np.arange(n)
# クラスタ(エンジン?)にnumpyをimportさせる
dview.execute('import numpy as np')
# funcを並列実行
view.map(func, np.arange(3))
参考文献
-
Parallel Computing with IPython
[Parallel Computing with IPython]: http://www.astro.washington.edu/users/vanderplas/Astr599/notebooks/21_IPythonParallel