Jupyter Notebook における並列計算2016年7月31日 | |
はじめにJupyter Notebook における並列計算について。 環境
Jupyter Notebook における並列計算Jupyter Notebook で並列計算を行うには、ipyparallel が必要。つぎのようにインストールする。 $ pip install ipyparallel サーバーの起動。 $ ipcluster start Jupyter Notebook で以下を実行。 import os import ipyparallel as ipp rc = ipp.Client(profile='default') ar = rc[:].apply_async(os.getpid) pid_map = ar.get_dict() print(pid_map) 以下のような出力が得られたら OK (以下は 4 並列の場合)。
{0: 1832, 1: 5516, 2: 3664, 3: 3800}
ipcluster を止めたい場合は、Ctrl+C する。それで止まらない場合は、以下のようにする。 $ ipcluster stop 並列数を指定することもできる。 $ ipcluster start -n 2 この場合、上記スクリプトを実行すると、以下のような結果が得られる。
{0: 6056, 1: 6696}
いちいちコマンドでサーバーを起動するのはめんどうである。Jupyter Notebook のほうから起動することもできる。設定のため、以下のように実行する。 $ jupyter serverextension enable --py ipyparallel $ jupyter nbextension install --py ipyparallel $ jupyter nbextension enable --py ipyparallel こうすることで、Jupyter Notebook で "IPython Cluster" というタブが使えるようになり、そこでサーバーを起動/停止することができる。"# of engines" で並列数を指定する。 MPI の使用Python で MPI を使用するには、mpi4py を使う。インストールは次の通り。 $ pip install mpi4py テスト。 $ mpiexec -n 4 python -m mpi4py helloworld Hello, World! I am process 0 of 4 on localhost. Hello, World! I am process 1 of 4 on localhost. Hello, World! I am process 2 of 4 on localhost. Hello, World! I am process 3 of 4 on localhost. Jupyter Notebook で使うには、ipcluster を MPI 用に起動する。 $ ipcluster start --engines=MPI まず、以下を実行。 import ipyparallel as ipp rc = ipp.Client(profile='default') 続いて、次のように実行。
%%px
from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
sys.stdout.write(
"Hello, World! I am process %d of %d on %s.\n"
% (rank, size, name))
上の helloworld と同じ結果が得られれば OK。ここで、%%px は並列計算を行うためのマジックコマンドである。 Jupyter Notebook から ipcluster を起動したい場合は、MPI 用にプロファイルを作る。 $ ipython profile create --parallel --profile=mpi ~/.ipython/profile_mpi/ipcluster_config.py で以下のように設定。 c.IPClusterEngines.engine_launcher_class = 'MPI' 試しに起動。 $ ipcluster start --profile=mpi Jupyter Notebook で、前準備を以下のように変える。 import ipyparallel as ipp rc = ipp.Client(profile='mpi') 続いて MPI のコードを実行、問題なければ OK。"IPython Cluster" タブで mpi 用サーバーをできるはずである。 Windows の場合Windows の場合は上の手順ではうまく行かない。以下のようにすればうまく行くようである。 ipcluster を使うとエラーで止まるので、ipcontroller と ipengine を用いる。まず、ipcontroller を起動する。 $ ipcontroller 別窓で、ipengine を実行する。 $ mpiexec -n 4 ipengine --mpi='mpi4py' これで Jupyter Notebook で並列コードを実行できる。ipcluster も上と同じことをしているはずなのだが、ipcluster だとなぜかうまくいかない。 | |
| PENGUINITIS | |