初代Macは「触れた」ことがあるけどmacOSは触ったことがない
実物macは高値の華でとても私に「かえる」ものではない「井戸中 聖」です。
🍎macOS🔰初心者です。よろしくお願いします。
残業代は振り「かえで」相殺される、ブラック企業勤務のわたくしは、転職「シロップ」。(「落ち」ませんでした。申し訳ございません。)
intel MPIはMAC版が公開されておらず、もちろんオープンソースではないので、かわりにまずはMPICHを入れます。PythonはIntel版を入れます。
VS.
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をフォルダ共有「常に有効」にしておきます。
ハードウェアのディスプレイで、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...
(怪しいパケットはすべて阻止します)
やっぱ、ムーリー。 これって、妖怪のしわざだよね。(CV.戸松遥)
では、皆様、ごきげんよう。
(追記)ISSUE CODE:[ Maple_syrup_cookie_02] により解決されました。