YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

mpi4py:pythonで並列処理

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.%

f:id:YutaKa:20191129125612p:plain
私の場合は自動でPATHも通っていました(もしかして、msiでインストールして、exeでPATH通してるのかな?順番が大事??)。通ってなかったらPATHを通しましょう。

mpi4pyの入手

mpi4pyは、defaultチャンネルや conda-forgeにはなく、anacondaチャンネルにあります。

次のコマンドでmpi4pyを使うためのmpi_envという仮想環境を作ってみます。
conda create --name mpi_env mpi4py -c anaconda 

f:id:YutaKa:20191129130053p:plain

これでMPIの準備とmpi4pyの準備が完了です!

テストランしてみよう

今作った仮想環境でテストラン用のスクリプトを作ります。私の場合は、condaで作った環境をpycharmで使用しています。

yutaka01.hatenablog.com

お試し用に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))
並列処理できれば、各プロセッサがHello Worldを出力するはずです!!

python.exeで実施

普通にターミナル(pycharm画面の下の方にあります)でランすると...
python mpi_test.py

f:id:YutaKa:20191130120849p:plain

一個しか出てこない!!失敗!

mpiexecで実施

並列処理にはmpiexec.exeで、python.exeを実行する必要があります!
例えば2つのプロセッサを使うときは次のようにしてプロンプトに入力します。
mpiexec -n 2 python mpi_test.py

f:id:YutaKa:20191130120950p:plain

無事に2つのプロセッサからHello Worldが返ってきました
おつかれさまです(⌒∇⌒)

まとめ

Pythonで並列処理するには、mpi4pyを使用するのが便利です!
そのためにはMPIという規格が必要ですが、windows であればMSMPIという無料のMPIが使用できます!
自分が使いたい外部モジュールがmpi4pyを使用している場合にも、MPIは必要になるので、記憶にとどめておいてください!
この記事を読まれた方は、数値計算・科学積算系のことをされている方が多いのではないでしょうか?
数値計算関係のpythonの書籍では、次のものがおススメです。 
科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

  • 作者:中久喜 健司
  • 発売日: 2016/09/22
  • メディア: 単行本(ソフトカバー)