【mpich】Fatal error in MPI_Init_thread:で困った話(Mac編)
エラー
MPI実装をmpichで行おうとしたら、以下のようなエラーが発生しました。
Fatal error in MPI_Init_thread: Invalid group, error stack:
MPIR_Init_thread(586)..............:
MPID_Init(224).....................: channel initialization failed
MPIDI_CH3_Init(105)................:
MPID_nem_init(324).................:
MPID_nem_tcp_init(175).............:
MPID_nem_tcp_get_business_card(401):
MPID_nem_tcp_init(373).............: gethostbyname failed, hostname (errno 0)
(unknown)(): Invalid group
昨日、大学の図書館では全く問題なかったのですが、私用しているポケットWifiを使用したらこのようなエラーが出てしまいました。コードはなにも変えていなかったのでびっくりです、、
この記事ではこのエラーを解決するために行った作業を記載しました。
調べる
ということでFatal error in MPI_Init_thread:
をネットで調べると、stackoverflowにて
という記事を発見しました。どうやらgethostbyname failed, hostname
部分に問題があるとのことでした。
記事によるとsshによる接続を行うと解決したそうです。ssh(Secure Shell)とは自分のPCから他のPC(主にサーバー)へ接続して、操作することを指します。sshはターミナルにコマンドを入力することによって操作することができます(コマンドは後述)。今回は他のPCではなく、自分のPCを対象としてsshの接続を行います。
また、sshの接続をするに当たって、hostファイルの書き換えを行う場面があります。hostファイルはIPアドレスとコンピュータを関連付けるためのファイルでこのファイルに必要な操作をして、自分のコンピュータへのアクセスを有効にします。IPアドレスはコンピュータに付けられた固有の番号のようなものです。(自分のPCのIPアドレスを調べるためにはMac - IPアドレスを確認する方法で調べることができます)
1.PCのホスト名を変更
まずコンピュータのホスト名を変更する操作をします。
システム環境設定>共有
を開きます。
このコンピュータ名(黄色枠線)を変更します。
usernameをsunachackに書き換えてreturnキーを押し、
と変更することができました。コンピュータ名とその下にあるsunachack.localの部分が変更されていることがわかります。これでコンピュータの操作は終わりです。
念のためにターミナルも確認します。(今の時点でターミナルを起動している場合は開き直してください)
ターミナルを起動して次のように打ちます。
scutil --get ComputerName
scutil --get LocalHsotName
scutil --get HostName
@の後にsunachack
(黄色下線)と名前が変更されていればOKです。もし変更されていなければ再起動が必要かもしれないです。(僕は再起動して名前がちゃんと変わりました)
また、ComputerName
とLocalHostName
からもsunachack
に変更されていることがわかります。(HostName
はnot set
のままで問題ありません)
2.hostファイルへの書き込み
次はhostファイルに書き込みを行います。ターミナルにcat /etc/hosts
と打つと
のように表示されるはずです。
ここでは例えば、127.0.0.1と言うIPアドレスとlocalhostと言うホスト名が関連付けられています。
ではこのファイルに書き込みを行います。
sudo nano /etc/hosts
と打ち、PCを開く際のパスワードを入力して
127.0.0.1 sunachack.local
000.000.000.000 sunachack
を挿入します。ここで、000.000.000.000
はIPアドレスを指します。(IPアドレスはMac - IPアドレスを確認する方法で調べることができます)
挿入したら^XでExitします。その際に保存するかを聞かれるのでYesと答えましょう。
再びcat /etc/hosts
と打つと127.0.0.1 sunachack.local
、000.000.000.000 sunachack
が挿入されていることが確認できます。
最後にssh XXX@sunachack
と打ち、パスワードを入力して次のような表示があれば、うまくいった証拠です!
補足
途中でping
コマンドを打つことでもssh
コマンドがうまく機能しているかがわかります。
ping
はネットワークの正常性を確認するためのコマンドです。
ssh XXX@sunachack
コマンドが正しく機能していれば、ping -c 10 sunachack
というコマンドがエラーなく実行されます。
逆にping -c 10 sunachack
がエラーとなってしまう場合はどこかのコマンドがうまく実行されていない可能性があります。
追記
後日別のWifi環境で問題ないかをping
コマンドを使ってみると、問題が発生していることに気がつきました。
packet
が全く受け入れられていない!
調べてわかったことは別のWifi環境でやると、IPアドレスが変ってしまい、sshによる接続を行うことができなくなっていました!
これに対処するために、再びhostファイルに書き込みを行いました。
しかし、以下の方法は別のWifi環境のIPアドレスをさらに書き込むことで、それぞれのIPアドレスに対応しようというものなので非常に非効率だと思います。また、僕の場合は使うWifiのIPアドレス自体は固定されていたので、もし同じWifi環境を使っているけどIPアドレスが変ってしまう場合はこの方法は使えないと思います。
他のやり方がある場合は教えていただきたいです。
行った対処方法
新たなWifi環境のIPアドレスを調べて、sudo nano /etc/hosts
コマンドにてそれを書き込みます。また、現在使っていないWifiのIPアドレスを#で無効化します。
これでping
コマンドを再び実行すると、
とうまくいきました。
もっと別のいい方法を見つけて再チャレンジしたいです!
ありがとうございました。
Author And Source
この問題について(【mpich】Fatal error in MPI_Init_thread:で困った話(Mac編)), 我々は、より多くの情報をここで見つけました https://qiita.com/sunachack/items/f73317c8af601ad6d025著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .