クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

「macOS」は「初心者」なのでIntel版PythonにMPI(MPICH)導入手順を『極』記録したいと「思います」。(振りです)

初代Macは「触れた」ことがあるけどmacOSは触ったことがない

実物macは高値の華でとても私に「かえる」ものではない「井戸中 聖」です。

🍎macOS🔰初心者です。よろしくお願いします。

  f:id:AssistantOfKoo:20200805061630j:plain  f:id:AssistantOfKoo:20200805061817j:plain

残業代は振り「かえで」相殺される、ブラック企業勤務のわたくしは、転職「シロップ」。(「落ち」ませんでした。申し訳ございません。)

intel MPIはMAC版が公開されておらず、もちろんオープンソースではないので、かわりにまずはMPICHを入れます。PythonはIntel版を入れます。

 f:id:AssistantOfKoo:20200802120524j:plain VS. f:id:AssistantOfKoo:20200802120620p:plain

macのパッケージ管理はhomeBrewとMacPortsがあるとのことでしたが、リンゴビールがおいしそうなのでhomeBrewのほうが初心者にやさしそうなので、そちらを入れます。

 ほぼLinux版と同じ内容になるのですが、自分の備忘のため手順を貼っていきます。

vmwareの.vmxファイルに(OSインストール前に)以下を追記しておきます。

ex.  C_macOS_10.15_00.vmx

MemTrimRate = "0"
mainMem.useNamedFile= "FALSE"
sched.mem.pshare.enable = "FALSE"
prefvmx.useRecommendedLockedMemSize = "TRUE"
MemAllowAutoScaleDown = "FALSE"
keyboard.vusb.enable = "TRUE"
keyboard.vusb.idVendor = "0x0000"
keyboard.vusb.idProduct = "0x0000"
smc.version = "0"

VMWareのマシン設定で(OS起動前に)オプションの共有フォルダでD:\shareをフォルダ共有「常に有効」にしておきます。

f:id:AssistantOfKoo:20200802103812p:plainf:id:AssistantOfKoo:20200802104020p:plain

ハードウェアのディスプレイで、1920×1200程度の解像度指定をしておきます。

OSを起動し、VMWareToolsを有効にします。(自分のモニタにあわせます。大きくしすぎるとメモリを無駄に喰います)

以上で、画面のリサイズが可能となり、再起動でD:\share が /Volumes/VMware Shared Folders/share に自動的にマウントされます。

 

OSの本来の設定としてはここからです(手順確認OKです)

tarminal の環境設定でシェルをbashに変更 (新しいターミナル/シェルを起動して、bashであることを確認):Mac標準のzshは使ったことがないのでわかりません。プロファイルのPathの優先順位がbashとは違っているように見えたので、迷わずbashに変更してからインストールします。

chsh -s /bin/bash :ターミナルの設定だけでは不足なのでOSレベルで設定します。※catalinaより前のmacOSはbashが標準なので、これをやる必要はありません。

$ sudo spctl --master-disable  :これもよくわからないのですが、標準だとAppleStoreからのソフトしか動かないようになっているのですね。実験なので、なんでも動くように変更します。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

homeBrew をインストールします。(Xcodeとかもインストールされました)

$ mkdir ~/install

$ cd ~/install

~/install フォルダに m_pythoni3_p_2020.2.903.tar ファイルを複写 :Intel社のページからダウンロードした Mac版Intel Python3アーカイブを複写します。
$ tar xvf m_pythoni3_p_2020.2.903.tar
$ sudo mkdir -p /opt/intel/ipython3/p_2020.2.903
$ sudo mv ~/install/intelpython3/ /opt/intel/ipython3/p_2020.2.903
$ cd /opt/intel/ipython3/p_2020.2.903/intelpython3/
$ sudo ./setup_intel_python.sh   :正規の配置場所(にしたいところ)で、setupシェルを実行します。

~/.profile の編集(新規):.bashrcにしてもよかったのですが、他の設定が面倒そうなので、ここではいきなり.profileにpythonのPathを記載しました。

# === Intel HPC Tools ===
INTEL_INSTALL=/opt/intel
# Intel Python
PYTHON_DIR=$INTEL_INSTALL/ipython3/p_2020.2.903/intelpython3
export PATH="$PYTHON_DIR/bin:$PATH"

 ターミナル/シエルに入りなおして .profileを反映させます。

$ which python :インストールしたpythonにpathがとおっていることを確認します。

/opt/intel/ipython3/p_2020.2.903/intelpython3/bin/python

$ python -V   :バージョンとIntel版であることを確認します。

Python 3.7.7 :: Intel(R) Corporation

MPICHをインストールします。

$ brew install mpich  :パッケージ管理ソフトはとても便利です!  

インストールが完了したら、いちおうバージョンを確認しておきます。

$ mpiexec -version

$ pip install mpi4py :pythonのMPIモジュールをinstallしておきます。

 Linuxでテストしたシェルと同じシェルとpythonプログラムで操作確認します。

まずはシェルレベルの確認

$ mpiexec -n 3 -hosts localhost ./a.sh

 From the New World: rank 1 of 3 running on CatalinaStrong.local (NODE rank 1 of 3 )

From the New World: rank 2 of 3 running on CatalinaStrong.local (NODE rank 2 of 3 )
From the New World: rank 0 of 3 running on CatalinaStrong.local (NODE rank 0 of 3 ) :I am The Beast that Shouted Love at the Heart of the World

 次にpythonレベルの確認

$ mpiexec -n 3 -hosts localhost python MPI_TEST01.py

From the New World: rank 0 of 3 running on CatalinaStrong.local (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 3 running on CatalinaStrong.local (SELF rank 0 of 1)
From the New World: rank 2 of 3 running on CatalinaStrong.local (SELF rank 0 of 1)

 うまく動作しました。

次にssh関連の設定をして、別ノードでの並列実行の環境を整えます。

 

システム環境設定 / 共有 でリモートログインを許可する
ssh [TargetOS] で一度アクセスする。(yes) → known_hostsに登録される

$ mkdir ~/.ssh :すでにあれば不要
$ cd .ssh
$ ssh-keygen -t rsa

CatalinaChair:.ssh mariel$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mariel/.ssh/id_rsa):  :改行
Enter passphrase (empty for no passphrase):   :改行
Enter same passphrase again:   :改行
Your identification has been saved in /Users/mariel/.ssh/id_rsa.
Your public key has been saved in /Users/mariel/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:R8ZoalIGHfJuzwEMROd8U+/Jo3oRg88WAUWjMv7e6mw mariel@CatalinaChair.local
The key's randomart image is:
+---[RSA 3072]----+
(略)
+----[SHA256]-----+

作成されたid_rsa.pub (公開鍵)の内容をサーバ側の~/.ssh/authorized_keysに登録
(相互アクセスを実験するので、相互に登録)

$ chmod 600 authorized_keys

/etc/ssh/sshd_config :編集

 PermitRootLogin no :変更

#PasswordAuthentication yes
PasswordAuthentication no :追加
#PermitEmptyPasswords no
PermitEmptyPasswords no :追加

$ sudo launchctl stop com.openssh.sshd

$ sudo launchctl start com.openssh.sshd    :こちらは不要の模様

(またはmacのシステム環境設定/共有の、リモートログインのチェックをON→OFF→ONでもOK)

各々実行し、双方向で公開鍵で認証できる(パスワードなしでログインできる)ことを確認

mpiexecの確認

CatalinaBearish:source mariel$ mpiexec -hosts CatalinaBearish,CatalinaChair ./a.sh

Host key verification failed.
[proxy:0:1@CatalinaChair.local] HYDU_sock_connect (utils/sock/sock.c:145): unable to connect from "CatalinaChair.local" to "CatalinaBearish.local" (Invalid argument)
[proxy:0:1@CatalinaChair.local] main (pm/pmiserv/pmip.c:183): unable to connect to server CatalinaBearish.local at port 49259 (check for firewalls!)

エラー発生、確認中。。。コマンドが悪いのか、環境が悪いのかわかりません。

 (またfireWall系かなぁ、でもmacOSはデフォルトでOFFと聞いているし)

体裁編集は疲れたのでまた明日。。。(つづく)

(追記)ISSUE CODE:[ Maple_syrup_cookie_02]macOSではこのコマンドではなく

$ mpiexec -n 5 -hosts 自IPアドレス指定,他ノードホスト名 ./a.sh

$ mpiexec -n 5 -hosts 自IPアドレス指定,他ノードホスト名 python .MPI_TEST01.py

にて確認ください。

だめなので試行錯誤してみる

(つづき)おはようございます。明日が今日になりました。

記事を分けるのは「嫌」なので、続きを書いていきます。

まず、基本確認です。ターミナルの設定でシェルを/bin/bashをデフォルトにしましたが、それだけでは不足のようです。

$ ssh CatalinaHappy env

...

SHELL=/bin/zsh

...

 となります。

chsh -s /bin/bash   

:とすればコマンドベースでもシェルが bash に切り替わります。(まずはログイン先CatalinaHappyで実行、最終的には全部実行しますが。)

$ ssh CatalinaHappy env 

...

SHELL=/bin/bash

...

 でOKとなります。元の手順に追加します。

ファイアーウォールを確認すると

$ /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

Firewall is disabled. (State = 0)

となるので、ファイアウォールは動作しておらず、問題ないと思います。tcp/ipのポートレベルでつながらないメッセージので、ネットワーク関連なのだとは思います。

$ pfctl -s all    :パケットフィルタリングを確認すると

...

INFO:
Status: Disabled                       Debug: Urgent

 ...

 そうですか、動いてませんか。。。

$ sudo pfctl -d     :念のため明示的にdisableにします。(もともとdisableなのでおまじないしてみるだけ)

No ALTQ support in kernel
ALTQ related functions disabled
pfctl: pf not enabled

 これでも状況はかわりません。。。

う~ん。初心者にはキツい。これ以上わかりそうにないので、噂の「事件対応チケット」(インシデントチケット)を発行します。高校3年です。ホワイトフラッグです。

いや、悔しいので、もう少しだけ粘ろうかなぁ。。。

googleで[macOS mpich]検索すると、、、このページがヒットしてしまいます。なんて邪魔!ごめんなさい。

切り分けのためipv6を止めてipv4だけにする。

$ sudo networksetup -setv6off Ethernet      :インシデントには関係ないけど、シンプルにするためにIPV6は(必要になるまで)OFFしておきます。(手順に採用)

etc.etc..etc...

f:id:AssistantOfKoo:20200802130621j:plain(怪しいパケットはすべて阻止します)

やっぱ、ムーリー。 これって、妖怪のしわざだよね。(CV.戸松遥)

では、皆様、ごきげんよう。

(追記)ISSUE CODE:[ Maple_syrup_cookie_02] により解決されました。