MPI通信のための環境を整備してみます
部屋にクーラーが欲しい、かえるのクーの助手の「井戸中 聖」です。
MPIの実験のために環境を整備する手順をまとめておきます。
(あいかわらず本文とは一切関係ありません)
今回の導入対象はintel版のpython* + MPI環境です。
現マシンの環境はいろいろ触ってしまったので、手順をまとめるためにVMWare上で以下の3つのOSを新規に準備しました。スペックはいずれもVM環境上の値です。
Windows10 Pro:
cpu=4,men=8G,disk=60G | COMPUTERNAME=LAKHESIS | ipv4=192.168.16.129
VMに新規インストールし、pycharmとanacondaを導入
なお、プライベートアドレスからのアクセスのFireWallは全オフにしました。実運用ではピンポイントでポートを開けることになると思います。
Ubuntu 20.04 LTS:
cpu=4,mem=8G,disk=40G | hostname=Klotho | inet 192.168.16.130
VMに新規インストールし、anaconda とanaconda版pycharmを導入
CentOS 8.2.2004:
cpu=4,mem=8G,disk=40G | hostname=Atropos | inet 192.168.16.131
VMに新規インストールし、anaconda と通常版pycharmを導入
上記を振り出しにMPI関連のインストールをしてみます
この環境にかぎり(mpi4py, numpy scipyなどは) pipやcondaは行いません!
intel版Python*ディストリビューションは相互関連性を保たれています。むやみにpipすると、mkl Libraryの不整合になりエラーが発生するよくあるトラップにはまります。
リモートでpython*を起動するので、condaで切り替えるのではなく所定のIDのデフォルトパスとしてintel版python*を動作させます。
なお、■「Intel版python*とはなんなのか」はこちら■です。
■「Intel MPI Library for Windwos」のマニュアルはこちら■
■「Intel MPI Library for Linux」のマニュアルはこちら■
「intelのディストリビューに含まれない」ライブラリはcondaやpipで通常通り取得します。
(追記)上記マニュアルは(日本語になっているものを探したのでしかたないのですが)旧バージョンのものです。(Betaをのぞいた)最新版(?)のマニュアルは以下です。
該当Update版(2019Update7)がどうしても見つかりません。有償契約者特権がないとだめなのかなぁ。
Intel MPI Library for Linux* OS Developer Reference 2019U6
Intel MPI Library for Windows* OS Developer Reference 2019U5
(追記ここまで)
ダウンロード
インテルディストリビューションのPython*とMPIライブラリをダウンロードします。無償版ですが、ダウンロードには氏名やメールアドレスなどの情報入力/アカウント登録が必要です。アカウントを持っている方はそのアカウントでログインして可能だと思います。
ダウンロードできたらそれぞれのOSでインストールします。Python*はWindows版、Linux版、macOS版が、MPIはWindows版とLinux版があります。
Python*はフリー版ではありますが、製品のシリアル番号が発行されました。(認証はないので、使うことはないと思いますが)
わたくしは、過去いろいろダウンロードしたので再ダウンロード可能一覧には結構な数のfree製品がならんでいます。Product Subscription Information の表題にはちょっとドキッとさせられます。
Python*はVersion 2020(Update 1) MPI LibraryはVersion 2019(Update7)版をゲットできました。
解凍・インストールする
Windowsにて
intel Python* for Windows をインストール:
WindowsのintelPython*はzipファイルなので、解凍して、置いておきたいフォルダに移動します。
(以下は配置例:実際にはお好みでどうぞ)
解凍場所\w_pythoni3_p_2020.1.893\intelpython3\setup_intel_python.bat
を実行します。
C:\opt\Inetl\iPython3\p_2020.1.893 フォルダを作成してそこにintelpython3フォルダごと移動します。
(反省の弁:あとでやりにくかったので上記にフォルダを調整しました。)
intel MPI Library for Windowsをインストール:
MPIライブライのほうはインストーラなので、指示にしたがってすすめるだけです。途中アーキテクチャの確認があるのですが、IA-32のチェックは外して、他はデフォルトですすめました。
・インストールが完了すると、親切にGet Startedの資料が表示され、Prerequisites設定を促されます。
管理者権限でコマンドプロンプト(またはPowerShell)を開き、以下を実行しました。
> C:\Program Files (x86)\IntelSWTools\mpi\2019.7.216\intel64\bin\mpivars.bat
> hydra_service -install
> hydra_service -start
> mpiexec -register
サービスが起動済でも気にしません。
mpiexecのレジストでアカウント情報を聞かれるので入力します。実際に実験で動作させるアカウントの情報を入力します
それ以降はコンパイル確認、動作確認の記載ですので、今回やらないです。
「Building and Running MPI Programs」でサンプルプログラムのコンパイル確認の記載もありますが、SDKもコンパイラも入れていないのでパスです。インテルコンパイラは有償なので無理ですが、MS VSの CコンパイラでもサンプルコンパイルOKなのか、いつかやってみたいと思います。(Microsoft Visual Studioつかっているなら NuGetで intel MPI Packageいれてね。と書いてあるのでできる予感はします)
システム環境変数を登録
デフォルトでintelのpython*を優先します。
利用者の環境変数設定でPATHの先頭から
%_IPYTHON3%\intelpython3\Library\bin\libfabric
%_IPYTHON3%\intelpython3
%_IPYTHON3%\intelpython3\Library\bin
の3つを登録します。この順番は大切です。不都合がある方はMPI実験用のユーザを作成し、ユーザ環境のほうのPATHに設定ください。(この場合、mpiexec -registerで登録する情報もそれにあわせる必要があります)
利用者の環境変数に
変数名:PYTHONPATH に 変数値:
%_IPYTHON3%\intelpython3\Lib\site-packages
変数名:_IPYTHON3 に 変数値:
C:\opt\Intel\iPython3\p_2020.1.893
を新規に登録します。(もしかしたらPYTHONPATH設定は不要かも)
コマンドプロンプトを起動して
python MPI_TEST01.py
がうまくいくか
mpiexec -n 2 python MPI_TEST01.py
がうまくいくかを確認します。※MPI_TEST01.pyは前回のプログラムです。
Linuxにて
.tar.gz もしくは.tgz形式でダウンロードされるのでMPIを実行するユーザのホームディレクトリに解凍してみます。フォルダ名はバージョンなどによりかわります。
例として ~/installディレクトリを作成してそこにで解凍してみます。
Intel MPI Library をインストール
$ cd ~/install/l_mpi_2019.7.217
$ sudo ./install.sh
ライセンス条項を読み進め確認をもとめられたら(OKなら) accept を入力します。
画面をよく読みながら改行して順次すすめます。
/opt/intelにいろいろできます。
※CentOSでは sudo ではなく、 su でrootになってからやったほうがよいようです。
intel Python* for Linux をインストール
$ cd ~/install/intelpython3
$ sudo ./setup_intel_python.sh
$ cd ~
$ sudo mkdir -p /opt/intel/ipython3/p_2020.1.893 (別バージョンも入れるかもなので、バージョンのフォルダを作成しておきます。)
$ sudo mv [展開したディレクトリ]/install/intelpython3 /opt/intel/ipython3/p_2020.1.893
※展開の操作によって展開されるディレクトリ構成がすこし違うかもしれません。(tarするかGUIでやるかetc)
最終的に/opt/intelの下に所定のディレクトリができていればよいです。
※CentOSでは sudo ではなく、 su でrootになってからやったほうがよいようです。
ログイン者のパス設定
パスを通すために.bashrcの末尾に設定を加えます。(マニュアルもろくに読まずに設定した一例です。環境にあわせた情報を設定しましょう)
(2020/07/16:この項修正しました:誤動作を招く余分なpathを削除)
# === Intel HPC Tools ===
INTEL_INSTALL=/opt/intel
# Intel Python
PYTHON_DIR=$INTEL_INSTALL/ipython3/p_2020.1.893/intelpython3
export PATH="$PYTHON_DIR/bin:$PATH"
# Intel MPI Lib
MPI_DIR=$INTEL_INSTALL/compilers_and_libraries_2020.1.217/linux/mpi/intel64
source $MPI_DIR/bin/mpivars.sh
ターミナルウィンドを立ち上げなおします。
起動するパス確認
(下記の一例です。バージョンのフォルダを入れました)
$ which python
/opt/intel/ipython3/p_2020.1.893/intelpython3/bin/python
$ python -V
Python 3.7.7 :: Intel(R) Corporation
※念のためインテル版がちゃんと起動することを確認
$ which mpiexec
/opt/intel/compilers_and_libraries_2020.1.217/linux/mpi/intel64/bin/mpiexec
自分が設定したところが選択表示されればOKです。
簡単な動作確認
自ノードマルチプロセス起動の確認
$ cd ~/PycharmProjects/MPI01
$ mpiexec -n 2 python MPI_TEST01.py
From the New World: rank 0 of 2 running on Klotho (SELF rank 0 of 1) :I am The Beast that Shouted Love at the Heart of the World
From the New World: rank 1 of 2 running on Klotho (SELF rank 0 of 1)
これは(たぶん)うまく動くと思います。
他ノードを含むマルチプロセス起動の確認
$ mpiexec -n 3 python MPI_TEST01.py : -n 2 -host Atropos python MPI_TEST01.py
( Hydra !!! )
通常のPCでデフォルトでは hydraの召喚に失敗して、エラーとなるか、帰ってきません。※ssh設定が必要です。
(長くなったので、本日はここまで。最近がんばって書いているためか、アクセス数が少しばかり増えて僥倖*1です。本題は次回持越しです。)
中間まとめ
・今回の手順では、conda やpip しません。ダウンロードして tar xvf します。
・やむなくcondaしたいときは conda -c intel 「ライブラリ名」します。
(その場合、例のintelMKLのバージョンが合わない系エラーに悩む確率が高いです。)
・インテルチューニングしていない系のライブラリは気にせずconda や pipします。
・MPI実験するログインユーザでIntel MPIとintel Python*にパスが通るようにします。
Linuxの別ノード実行はsshのこまかな設定が必要です。続きは以下で
がんばれ木村王位!
中高年の★を全力で応援しています。(解説がおもしろいです)
中高年の凄さを今一度、全国の若者へおもいしらせちゃってくださいwww
*1:ぎょうこう:は昔からコミックやアニメ、ラノベで多用される言葉なので若者が使うのを驚くのがおかしいです。