クーの自由研究

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

Linux機での intel MPI接続のための ssh環境設定

ssh環境設定は結構手間がかかります

アッシェンテ!将棋を勉強したい、🐸かえるのクーの助手の🦉「井戸中 聖」です。

f:id:AssistantOfKoo:20200718112322p:plain

「マジかぁ~。」*1 テト*2に藤井新棋聖🏆をやっつけて欲しいです。でも今の充実ぶりなら、返り討ちにあいそうです。なんせ、「神様に1つお願いするとしたら?」の質問に「ぜひ手合わせしてほしいです」と回答する方なのですから。

あ、それと前のページの設定を触っていたら、設定の手違いなのか、⭐スターがクリアされてしまいました。いただいた方ごめんなさい。なお前頁は久々の「記事丸ごとジョーク」です。笑ってもらえたら幸いです。さらに、インテルへのほのかな怒り👆も、くみ取ってもらえると僥倖です。(クーへ:おこっちゃやーよ)

本題に行く前に

MPIの3つ巴の相互接続を実験しようとしていましたが、Windows同士の確認もしたくなったので、仮想環境にWindows10をもう1台準備します。

f:id:AssistantOfKoo:20200717203721p:plainWindows10 Pro:
cpu=4,men=8G,disk=60G | COMPUTERNAME=SUEZO | ipv4=192.168.16.132
VMに新規インストールし、pycharmとanacondaを導入

これもプライベートアドレスに対してファイアーウォール全OFFです。

設定は前の設定通りです。

 Windows同士の接続

メインテーマからはずれますが一応やっておきます

Windows間ではsshの設定をまったくしていません。ユーザは同じユーザを設定しています。ディレクトリ構成も同じです。

suezoに至ってはopenSSHすら入れていません。でもつながります。

suezoについてはあとでopenSSHを入れます。

Windowsではssh通信をしているのではなく、hydraサービスを使用しています。

では実行結果です。


Lakhesis機(Windows44号機)で実行

C:\Users\Mariel\PycharmProjects\MPI01>mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host SUEZO python MPI_TEST01.py
From the New World: rank 0 of 5 running on Lakhesis (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 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on suezo (SELF rank 0 of 1)

C:\Users\Mariel\PycharmProjects\MPI01>


suezo機で実行(Windows0号機)

C:\Users\mariel\PycharmProjects\MPI01>mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host Lakhesis python MPI_TEST01.py
From the New World: rank 0 of 5 running on suezo (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 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on suezo (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on Lakhesis (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on Lakhesis (SELF rank 0 of 1)

C:\Users\mariel\PycharmProjects\MPI01>


 どちらもあっけないくらいにうまく動作しました。

ここからが本題です

🐧Lunix同士の接続

前回はsshの設定を書けなかったので、今回はそこからです。

f:id:AssistantOfKoo:20200718111535j:plain

(MPIをtcpで行う場合)Linuxの場合はsshで、ログインパスワードなしでダイレクトにリモートのコマンドを実行できる必要があります。アクセスされる側(サーバ)に自分(クライアント)の公開鍵を設定してもらい、許可を得る必要があります。

ubuntuとCentOSで若干の差異がありますので、それぞれ手順を書きます。ほぼ自分用の(またやる時のための)🖊メモです。

接続される側をサーバとして記載します。

なお、初期インストールされた標準の状態であるとしてやってみます。(汎用手順ではなく、やってみた例です)

f:id:AssistantOfKoo:20200718090537p:plainubuntu編


管理系のソフトがあまりはいっていないのでインストールします。

sudo apt install net-tools

/etc/hosts  :ファイルに自分と対象のipアドレスを編集設定します。(ip4でやってみます)

※本格的に多数やるにはhostsファイルに書かずにnameサーバ(仮想でも可)だけに設定しましょう。

sudo ufw default ALLOW    :FileWall全オフ(MPIはインターネット接続してない安全なローカル領域での動作が前提:相手側もやっておく)

$ ssh Atropos    :とりあえずつないでみる(例 自ubuntu -> CentOS:CentOSが相手なら比較的すんなり接続できるがエラー出ても気にしない:初回はFingerPrintの保存が必要):接続確認してexitする

$ sudo apt install openssh-server   :他マシンからのssh接続のための設定 ubuntuは標準ならsshサーバはインストールされていないのでインストール(OSインストール時に指定してインストール済なら不要)

ssh -V        :いちおうバージョン確認します。

OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020

$ sudo systemctl start ssh    :デーモンを起動します。

※このあたりまで他のマシンもやっておくといいと思います。

[他マシン]$ ssh Klotho    :たとえばCentOS -> 自ubuntu :初回はFingerPrintの保存が必要:fingerprintの保存確認がある。パスワードありで接続確認してexitする

:他マシンで公開鍵生成(一般ユーザで実行のこと)

mariel@Atropos ~]$ cd .ssh
[mariel@Atropos .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mariel/.ssh/id_rsa):     :そのまま改行
Enter passphrase (empty for no passphrase):      :そのまま改行
Enter same passphrase again:      :そのまま改行
Your identification has been saved in /home/mariel/.ssh/id_rsa.
Your public key has been saved in /home/mariel/.ssh/id_rsa.pub.

...以下略

作成されたid_rsa.pub (公開鍵)の内容をサーバ側(自ubuntuの~/.ssh/authorized_keysに複写(なければファイル作成あればそれに追記):今回はVMWareで動作させているので、エディタでコピペした

ubuntuの自ユーザで実行

$ cd ~/.ssh

$ chmod 600 authorized_keys    :重要:権限の設定を間違うと接続しない

root権限で以下のファイルを編集

/etc/ssh/sshd_config    :編集

#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
AuthorizedKeysFile .ssh/authorized_keys    :追加

#PermitRootLogin prohibit-password
PermitRootLogin no    :追加

#PasswordAuthentication yes
PasswordAuthentication no    :追加

#PermitEmptyPasswords no
PermitEmptyPasswords no    :追加

 

sudo /etc/init.d/ssh restart    :sshデーモンを再起動

[他マシン] $ ssh ubuntuホスト名    :sshでパスワードなし接続確認し exitで抜ける

[他マシン] $ ssh ubuntuホスト名 ls    :ubuntuのディレクトリ一覧が出ればOK(パスワードなど聞いてきたらNG)

うう長い。。。


f:id:AssistantOfKoo:20200713230631p:plainCent OS編

デフォルトでsshサーバがはいっていると思います。CentOSの操作はsu でrootに切り替えてやったほうがよいかも?

systemctl disable nftables    :FileWall全オフ(MPIはインターネット接続してない安全なローカル領域での動作が前提:相手側もやっておく)

systemctl stop firewalld   :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)

systemctl disable firewalld :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)

systemctl disable iptables  :FileWall全オフ(ISSUE CODE:[ Maple_syrup_cookie_01 ]により念のため項追加:通常動作していないのでエラーメッセージ iptables.service does not exist. がでますが問題ありません)

systemctl list-unit-files --type service  :ファイアウォールのサービスが動作していないことを確認します。 (ISSUE CODE:[ Maple_syrup_cookie_01 ]によりこの項追加)

[他マシン]$ ssh Atropos    :他マシンより、パスワード認証でssh接続できることを確認しexit

:他マシンで公開鍵生成

mariel@Klotho:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/mariel/.ssh/id_rsa):     :そのまま改行
Enter passphrase (empty for no passphrase):      :そのまま改行
Enter same passphrase again:      :そのまま改行
Your identification has been saved in /home/mariel/.ssh/id_rsa
Your public key has been saved in /home/mariel/.ssh/id_rsa.pub

CentOS側ではMIPテスト用ユーザ(例では mariel)で実施

作成されたid_rsa.pub (公開鍵)の内容をサーバ側(自CentOSの~/.ssh/authorized_keysに追加(なければファイル作成あればそれに追記):今回はVMWareで動作させているので、OS間でエディタのコピペをした

$ cd ~/.ssh

$ chmod 600  authorized_keys    :重要:権限の設定を間違うと接続しない

$ su    :ここからrootになって編集

/etc/ssh/sshd_config    :編集

#PermitRootLogin yes
PermitRootLogin no    :変更

#PasswordAuthentication yes
PasswordAuthentication no    :追加

#PermitEmptyPasswords no
PermitEmptyPasswords no    :追加

# systemctl restart sshd.service  :sshデーモンを再起動

[他マシン] $ ssh CentOSホスト名    :sshでパスワードなし接続確認 exitで抜ける

[他マシン] $ ssh CentOSホスト名  ls    :ubuntuのディレクトリ一覧が出ればOK(パスワードなどきいてきたらNG)


Windows編

 前回の記事のとおり、Windows間ではsshを使用せず、Linux-Windows間では(intelの最新版2019Updte7では)実装がないのでMPIが効かないのですが、いちおう「おまけ」でWindowsのssh(公開鍵認証)設定を載せておきます。(設定を追い込むと「はまる」ので基本標準で動作させます)

Window標準では sshサーバの機能はインストールされていないのでインストールします。(openSSHクライアントはWindows最新版ビルドではインストール済のようです)

田で右ボタンメニュー/アプリと機能/オプション機能/機能の追加/OpenSSHサーバ/インストール

ファイアウォールは(インターネット接続なし:実験用なので)全開けする(運用の場合はssdポートを特定通信先に開ける。)

C:\Windows\System32\drivers\etc\host を編集して(自ドレスと)相手アドレスを登録する。

 管理者権限でWindows Power Shell を起動し、以下を実行

sshd install

Start-Service sshd

Set-Service sshd -StartupType Automatic

 

📩接続する側としての設定

接続ユーザで

> cd .ssh

> ssh-keygen -t rsa

C:\Users\mariel\.ssh>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\mariel/.ssh/id_rsa):    :そのまま改行
Enter passphrase (empty for no passphrase):    :そのまま改行
Enter same passphrase again:    :そのまま改行
Your identification has been saved in C:\Users\mariel/.ssh/id_rsa.
Your public key has been saved in C:\Users\mariel/.ssh/id_rsa.pub.

...

 

作成される 公開鍵 id_rsa.pub の内容をサーバ側の該当利用者の .ssh/authorized_key に追加

サーバ側のssdデーモンをリスタート(OSの種類により違う)

> ssh Atropos      :リモート接続できるか確認後 exit

> ssh Atropos ls      :リモート側のコマンドを実行確認

 

📬接続される側としての設定

これがさらに面倒:わたくしはクライアント機ではWindowsユーザは必ずAdmistratorsグループ権限で使用するので、その前提の手順です。

Administratorsグループのみ、公開鍵の保存場所が違うのでそこに通信元の公開鍵を登録

%ProgramData%\ssh\administrators_authorized_keys     :管理者権限でエディタを起動し、相手の公開鍵を登録する(ファイルがない場合は新規作成する)

またこのファイルについて継承の無効化を行ったあと、Authinticated Usersへの許可を削除する。ファイルの所有者であるSYSTEMのアクセス権を 「読み取りと実行」に変更する。※Linuxと同様にアクセス権をが600相当にすべきだが、「読み取り」と「書き込み」の組み合わせはWindowsだと「特殊」扱いになるので、「読み取りと実行」とした。SYSTEM権限でこのファイルを編集することはないので。。。Administratorsのほうはフルコントロールで構わない。わかりにくすぎ。。。

 

%ProgramData%\ssh\sshd_config      :同じく管理者権限のエディタで編集

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PasswordAuthentication no      :追加
#PermitEmptyPasswords no
PermitEmptyPasswords no      :追加

 

 管理者権限でWindows Power Shell を起動し、以下を実行 サービス画面GUIから行ってもOK

PS> ReStart-Service sshd

相手クライアントから接続を確認

$ ssh suezo

$ ssh suezo dir

めだたくAtropos と suezo の ssd交流ができました。(MPI交流ではないよ)

 

Linuxに話をもどしてMPIの分散処理を実行してみましょう

f:id:AssistantOfKoo:20200712094808p:plain

(上記例とはホスト名を変えています)

NODE A:ubuntu (Klotho) -> NODE A:ubuntu (localhost) & NODE B:CentOS(Atropos)

(base) mariel@Klotho:~/PycharmProjects/MPI01$ mpiexec -n 3 -host localhost python MPI_TEST01.py : -n 2 -host Atropos python MPI_TEST01.py
From the New World: rank 0 of 5 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 5 running on Klotho (SELF rank 0 of 1)
From the New World: rank 2 of 5 running on Klotho (SELF rank 0 of 1)
From the New World: rank 3 of 5 running on Atropos (SELF rank 0 of 1)
From the New World: rank 4 of 5 running on Atropos (SELF rank 0 of 1)

 うまくいきました。8888

NODE A:CentOS(Atropos) -> NODE A:CentOS(localhost) & NODE B:ubuntu(Klotho)

[mariel@Atropos ~]$ mpiexec -n 3 python MPI_TEST01.py : -n 2 -host Klotho python MPI_TEST01.py
[mpiexec@Atropos] check_exit_codes (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:117): unable to run bstrap_proxy on Klotho (pid 11927, exit code 768)
[mpiexec@Atropos] poll_for_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:159): check exit codes error
[mpiexec@Atropos] HYD_dmx_poll_wait_for_proxy_event (../../../../../src/pm/i_hydra/libhydra/demux/hydra_demux_poll.c:212): poll for event error
[mpiexec@Atropos] HYD_bstrap_setup (../../../../../src/pm/i_hydra/libhydra/bstrap/src/intel/i_hydra_bstrap.c:770): error waiting for event
[mpiexec@Atropos] main (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:1956): error setting up the boostrap proxies

 

あら、Atroposさん Klothoから嫌われた?結構ボリューム書いて疲れたので、調査はまた今度ということで。

(CentOSからintelMPIできない issue として発行:受理:本イシューコード(ISSUE CODE:)を「柿の種」*3[Maple_syrup_cookie_01]とする:Statusを調査中に変更->Solved&Closed

MPIの情報を求めておいでになった貴方。お役に立つ情報ありました?どうもすいません(P^o^)

ではまた。

今日の格言

「自らを省みることこそ、成長への王道なり。」魂は100までだが、3カ月あれば人は化けられる。

あ~Windowsの「より道情報」、別ページにするべきだった~

よみにく~。自分用の記録とはいえ。これはちょっとないなぁ。

(予告なく、エラーfixのため記事内容を改変します。コマンド・応答のフォントも一部調整中です。ページの標準フォントを選択したクーにほのかな👆を感じます。)

*1:渡辺二冠🏆🏆 ( 3 - 1 = 2 )の心の叫びは、今年の個人的流行語大賞候補となりました。

*2:ネットで検索してねw「アッシェンテ   テト」で🔍検索

*3:「柿の種」では検索一意にならず、また、海外からの検索に支障があるため却下となった。