mpi4pyを知っていますか?
PythonでMPIによる並列処理を行う場合、mpi4py一択です。
mpi4pyは歴史も長く、スパコンでも普通に利用されています。
この記事では、そんなmpi4pyについて説明しています。
本記事の内容
- mpi4pyとは?
- mpi4pyのシステム要件
- mpi4pyのインストール
- mpi4pyの動作確認
それでは、上記に沿って解説していきます。
mpi4pyとは?
mpi4pyは、Message Passing Interface (MPI) 規格の Python バインディングです。
MPI-1/2/3 仕様に基づいて実装されています。
PythonでMPIによる並列処理(計算)を行うために、mpi4pyは必須です。
そのため、mpi4pyは知る人ぞ知るというライブラリと言えます。
スパコン(スーパーコンピュータ)の世界では、ごくごく普通に利用するらしいです。
「富岳」にmpi4pyがインストールされています。
そこまで大規模(大袈裟)でなくても、mpi4pyは役に立ちます。
1台のマシン上で複数プロセスを走らせる場合にも、mpi4pyが利用できます。
以上、mpi4pyの関する説明でした。
次は、mpi4pyのシステム要件を確認します。
mpi4pyのシステム要件
現時点(2021年8月)でのmpi4pyの最新バージョンは、3.0.3となります。
この最新バージョンは、2019年11月4日にリリースされています。
https://bitbucket.org/mpi4py/mpi4py/src/master/CHANGES.rst
ただ、上記を見ると、2021年のどこかで3.1.0を公開する予定のようです。
また、その際に確認してみようと思います。
mpi4pyのシステム要件として、以下がポイントとなります。
- OS
- Python
- MPI
それぞれを下記で説明します。
OS
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
OSに関しては、Pythonが動けばどこでもOKのようです。
Python
サポート対象となるバージョンは、以下。
- Python 2.7
- Python 3.3以降(表記は3.8まで)
このように記載されていますが、Python 3.9でも問題はありません。
実際、私は以下のバージョンで検証しています。
>Python -V Python 3.9.6
なお、Pythonの公式開発サイクルは以下。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月 |
3.7 | 2018年6月27日 | 2023年6月 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
この公式開発サイクルと比較すると、mpi4pyは頑張り過ぎと言えます。
Python 2系は、さすがに切り捨ててもいいはずです。
MPI
MPIと書いていますが、以下のことです。
MPI自体は規格のことであり、ライブラリ・ソフトウェアではありません。
- Microsoft MPI(MS-MPI)
- Open MPI
- MPICH
上記のどれかが、インストール済みでなければなりません。
それは、OSによって異なってくるでしょう。
それぞれについては、以下の記事で説明しています。
まとめ
Windowsであれば、Microsoft MPIをインストールしておきましょう。
Linux・macOSなら、Open MPIかMPICHのどちからをインストールしておきます。
Pythonのバージョンに関しては、最新のバージョンを使いましょう。
Pythonのアップグレードについては、次の記事でまとめています。
以上、mpi4pyのシステム要件を説明しました。
次は、mpi4pyをインストールしていきます。
mpi4pyのインストール
まずは、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.2.2 setuptools 57.4.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、mpi4pyのインストールです。
mpi4pyのインストールは、以下のコマンドとなります。
pip install mpi4py
インストールは、少し時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ---------- ------- mpi4py 3.0.3 pip 21.2.2 setuptools 57.4.0
mpi4pyには、依存パッケージはないようです。
その点では、どんな環境にも容易に導入できると言えます。
Pythonのバージョンも、幅広くサポートしていますからね。
以上、mpi4pyのインストールの説明でした。
最後に、mpi4pyの動作確認を行います。
mpi4pyの動作確認
mpi4pyの動作確認用のコードは、以下。
test.pyというファイル名で保存します。
test.py
from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() name = MPI.Get_processor_name() print(f"{name} : {rank} : {size}")
上記を単純に実行します。
そうすると、以下のような表示となります。
マシン名 : 0 : 1
マシン名には、プログラムを実行したマシンの名前が入ります。
これでmpi4pyの動作確認自体はできました。
折角なので、複数プロセスの検証も行いましょう。
やり方は、以下のコマンドを実行するだけです。
mpiexec -np 4 python test.py
システム要件(MPI)を満たしていれば、「mpiexec」コマンドが動くはずです。
上記コマンドであれば、OSに関わらず実行可能となります。
正確には、Microsoft MPIでもOpen MPIでも何でもOKということです。
そして、上記コマンドを実行すると、以下の結果が表示されます。
$ mpiexec -np 4 python test.py ubuntu-focal : 1 : 4 ubuntu-focal : 2 : 4 ubuntu-focal : 0 : 4 ubuntu-focal : 3 : 4
上記を簡単に説明します。
4つのプロセスを並列で動かしたことになります。
同一マシン上での並列処理です。
「mpiexec」コマンドを使えば、複数マシンによる並列処理も可能になります。
複数マシンによる並列処理は、また別の記事で解説します。
下準備がいろいろと面倒です。
今回は、あくまでmpi4pyに関しての内容がメインとなりますので。
以上、mpi4pyの動作確認の説明でした。