pythonで並列処理をするにはmpi4pyというモジュールが便利のようです。
しかし、私の場合は初期設定でつまづいてしまいました。
とは言っても、実はモジュール以外にも必要なものがあるので、それをインストールすればいいだけの話でした!
今回はWindowsでmpi4pyを利用する方法をまとめます。
mpi4pyについて、詳細を知りたい方は、公式ドキュメントもご覧ください。
MPI for Python — MPI for Python 3.0.3 documentation
MPIとは?
mpi4pyそのものが並列処理するのではなく、mpi4pyはpythonでMPIを使うためのモジュールです。
このMPIとは並列処理するための規格だそうです。
Message Passing Interface(メッセージ パッシング インターフェース、MPI)とは、並列コンピューティング利用するための標準化された規格である。実装自体を指すこともある。https://ja.wikipedia.org/wiki/Message_Passing_Interface
MPIは規格なので、どこかで入手しなければいけないようです...無料でないのかな...と思ったら?
Windows 環境では、MSMPIが使える!
WindowsではMicrosoft MPIというものを無料で利用できます!!
MSMPIと略されることが多いみたいです。
MSMPIのインストール
MicrosoftのHPからダウンロードして、インストールします。
次の二つをインストールする必要があります。
- msmpisdk.msi
- msmpisetup.exe
mpiexecへのパスを通す
並列計算の場合はpython.exeではなく、mpiexec.exe を使用します。そのため、このmpiexec.exeへのPATHを通しておく必要があります。
デフォルトでインストールした場合は、C:\Program Files\Microsoft MPI\Binに保存されます。
コマンドプロンプトでPATHを確認しましょう!次のコマンドで確認できます。
echo %path:;=&echo.%
私の場合は自動でPATHも通っていました(もしかして、msiでインストールして、exeでPATH通してるのかな?順番が大事??)。通ってなかったらPATHを通しましょう。
mpi4pyの入手
mpi4pyは、defaultチャンネルや conda-forgeにはなく、anacondaチャンネルにあります。
次のコマンドでmpi4pyを使うためのmpi_envという仮想環境を作ってみます。
conda create --name mpi_env mpi4py -c anaconda
これでMPIの準備とmpi4pyの準備が完了です!
テストランしてみよう
今作った仮想環境でテストラン用のスクリプトを作ります。私の場合は、condaで作った環境をpycharmで使用しています。
お試し用にmpi_test.pyというスクリプトを作成してみます。
from mpi4py import MPI
comm = MPI.COMM_WORLD # 並列処理開始です!
size = comm.Get_size() # 並列処理に使用できるプロセッサ数
rank = comm.Get_rank() # 各プロセッサのIDのようなもの
print("Hello world {0} / {1}".format(rank, size))
python.exeで実施
一個しか出てこない!!失敗!
mpiexecで実施
まとめ