本当は怖い情報科学

とあるHPC屋の趣味&実益ブログ

MPI環境の切り替えをするmpienvというツールを作った

背景

多くの場合、スパコンやクラスタ上には複数のMPIがインストールされています。ユーザーは、これらを適切に切り替えて使わなければなりません。普通のユーザーであれば、普段使うMPIは一種類で固定であるケースが多いので、.bashrc等の設定ファイルに設定を書いておけば問題ありません。

ライブラリなどの開発をする場合、複数のMPIでテストを行う必要があるので、MPIを切り替えて使うことになります。基本的にはPATHLD_LIBRARY_PATHを切り替えればOKなのですが、プログラムをコンパイルしたときのMPIと、実行するときのMPIは合致していなければいけません。これらが食い違うと、正しく並列プログラムを実行できません。

基本的には2つの環境変数を切り替えるだけですので、シェルスクリプトでも書けば一瞬ですし、環境によっては実際に既に用意されていることも多いです。プラットフォーム固有の切り替えコマンドがある場合もあります(例えばCray系システムのmoduleコマンドなど)。

解決すべき問題

このような、複数のMPIの利用にはいくつか問題があります。

  • システムにどのようなMPIが用意されているのか忘れる
  • あるプログラムをどのMPIでコンパイルしたのか忘れる
  • MPIの切り替えを手動でやろうとして忘れる
  • 自分でインストールしたMPIの存在を忘れる

のような問題です。

さらに、PythonからMPIを使うライブラリであるmpi4pyを用いると、さらなる問題が発生します。mpi4pyはインストール時に使ったMPIにリンクされるため、PATHLD_LIBRARY_PATHを切り替えるだけでは駄目だということです。切替時には、mpi4pyを一旦アンインストールし、MPIを切り替えたあとに再度mpi4pyをインストールする必要があるということです。

pyenvなどのツールを使ってPython実装ごと切り替えるという手もありますが、それはかなり面倒ですし、どちらにしろpyenvによる切り替えを忘れると謎のエラーで苦しむ事になります。

解決策

これらを解決するために、mpienvというツールを作りました。これは、Pythonにおけるpyenvだと思っていただければ、ほぼ正しいです。

github.com

詳細はREADMEを見ていただきたいと思いますが、基本的にできることは以下です。

  • システムにインストールされているMPIを一覧・管理する
  • MPIを切り替える
  • mpi4pyも同時に切り替える
  • 開発中の機能
    • MPIを自動でインストールする
    • バイナリを指定した時に、それに適したMPI実装を自動で選ぶ
    • pyenvのように、ディレクトリごとに使うMPIを切り替える

などのことができます。手前味噌ですが、複数MPIを切り替えてのテストやデバッグが劇的に楽になりました。まだまだ開発中ですが、適当なタイミングで利用方法の説明を書きたいと思います。

【広告】