Ubuntu上でORCAを使って量子化学計算を始める
(ノード間並列計算編)

祭りだ!祭りだ!計算祭りだ!やってまいりました、Ubuntuで量子化学計算を始める!第2段!今回はポテンシャル曲面の鞍点(2次)上からお送りします!

Ubuntuで量子化学計算を始めるでは、単一コンピューター内でのUbuntu上で量子化学計算プログラムORCA を走らせるために必要な設定を解説しました。例えば、各種の他の量子化学計算のプログラムと比較してORCAのどんなところがよいかは、s2kさんのサイトpc-chem.info内の記事スケーリング(系のサイズと計算時間の関係)の比較がとっても参考になります!このように、ORCAは、孤立系の分子を計算対象として、もともと密度汎関数法(DFT)計算におけるスケーリングの問題をRI法によって精度を犠牲にすることなく大幅に改善できることを大きな特徴としていましたが、最近の実装(ORCA 5.0.4)では、第一原理(ab initio)計算やMD計算における方法もかなり充実したものになっています。なお、周期的境界条件(PBC)を課した計算は守備範囲外としているのでご注意を。第2段となる本稿では、そこからさらに発展させて、ORCAを使ったノード間並列計算を走らせるために必要な設定を解説します。

セカンダリコンピューターの設定

基本的な手順は、Ubuntuで量子化学計算を始めるを参考に行ってください。OpenMPIの入れる場所等の詳しい説明はWhere should I install Open MPI?が参考になります。ただし、全てのノードのOpenMPIは必ず同じ方法と場所(バージョン、コンパイラ、配置ディレクトリ等)に入れてください

入れ終わったら、~/.bashrcに

export LD_LIBRARY_PATH=~/orca_5_0_4_linux_x86-64_shared_openmpi411

を追加するのを忘れずに (ORCA 5.0.4の場合)。追加する位置は~/.bashrcの先頭です。でないと、orcaがnon-interactiveにssh経由でログインした時に、LD_LIBRARY_PATHがexportされなくなってしまうので(.bashrcの先頭行にはその記述があります)。

LANの構築

今回は計2台のコンピュータをEthernet、スイッチングHub経由で接続することにしました。そこで大事なのが転送速度。Gigabit Ethernet対応のものを選びましょう。ケーブルもネ。

# とはいってもNumFreqキーワードを使った振動数計算では、
# 各コアそれぞれが各変位についてSCF計算を行うためにほとんどノード間での通信は発生せず、
# Gigabit Ethernetにする意味はない(ォィ)。まぁ、構造最適化や1点SCF計算においてはコア間の協調動作が必要で、
# ノード間の通信が頻繁に発生するので、そのためにってことです。しかしそれには1 Gbpsでも不足のような気がしますが…。さて?

今回、スイッチングHubとしてD-Link DGS-2205を購入。5ポートあるので、最大5台のコンピュータを接続することができます。

# ってあんたやる気ですかい!

並列計算のための設定

OpenSSH serverをいれる

ORCAのマニュアルにも書いてあるようにOpenMPIのノード間の通信ではRSHもしくはSSHが使われます。この通信はノード間で双方向に行なわれるので、sshコマンドでパスワード無しでログインできるように設定しておかないといけません。これには、OpenSSHを使って,パスワードなしのログイン@KAMEMOが参考になります。で、大事なことは相手だけでなく自分自身にもSSHログインできるようにしておくことです。

この中で、ssh-keygenコマンドによってRSA鍵の組が生成されるのですが、同時に/etc/ssh/ssh_configのIdentityFileも書き換えられます。もしあなたが、他のサーバーにもSSH接続する必要があるのであれば、このIdentityFileも必ず確認しておいてください。というのも、単に

$ ssh 192.168.0.11

とした時に、IdentityFileで指定されている公開鍵が使用されるからです。

# あと、もしかしたら/etc/ssh/sshd_configでは、AcceptEnvを*にする必要があるカモ。

これに関連してhostsファイルも設定してあげる必要があります。こんな感じで:

$ sudo vi /etc/hosts
192.168.0.11 xxx1 
192.168.0.12 xxx2

ってな感じで。そしたら、デーモンを再起動します。

$ sudo /etc/init.d/networking restart

そして最後に、ORCAのためにRSH_COMMANDを環境変数にexportしておきます:

RSH_COMMAND=/usr/bin/ssh; export RSH_COMMAND

実際に走らせる

どうでしょうか?ここまで到達できたでしょうか?ORCAをノード間並列で走らせるためには、まず、OpenMPIでいうところのmachinefileを設定する必要があります。しかーし、はまりやすいのは、machinefileの設定。必ずinput-file.nodesにするように。例えばinput-file

!PAL4

として、2CPU@各ノード、計4CPUで走らせたい場合、

192.168.0.11 slots=2
192.168.0.12 slots=2

ってな感じで指定します。親になるノードは一番上にリストしないといけないみたいです。これですべての準備が整いました!いよいよORCAノード間並列計算の実行です。

# キタ━━━━━━(゚∀゚)━━━━━━!!!!

適当な入力ファイルを作成し(ここではtest.orca)、(プライマリコンピュータの)ターミナル上で以下のように実行させます:

$ /home/your-name/orca_x86_64_exe_r2131/orca test.orca > test.orca.out

これによってセカンダリコンピュータでも自動的に計算がinvokeされます。test.orca.outには以下のメッセージが出てくるハズです。どうです、すごいっすねぇ(詠)。

          ************************************************************
          *        Program running with 4 parallel MPI-processes     *
          *            working without local directories             *
          ************************************************************

# 実際に走らせる際には、orcaをバックグラウンドジョブで走らせないように。この場合不定期に中断されてしまう…。

ftpサーバーやsshサーバーを立てて、いかにも計算機サーバーの様にするには、atコマンドを使うとヨロシ。

$ cd /home/your-name/orca_5_0_4_linux_x86-64_shared_openmpi411/
$ echo "/home/your-name/orca_5_0_4_linux_x86-64_shared_openmpi411/orca input-file.orca > input-file.orca.out 2>stderr.out" | at now

ってな感じですね。これでssh経由で接続してログアウトしても計算が維持されます。たくさん計算させたいものがある時には、at nowの代わりにbatchを使います。これだと、最初の計算が終わってCPUがアイドル(load averageが1.5以下)になった時に、次の計算をキューに投入された順に自動的に始めてくれます。既定値のload averageでは、振動計算の時に次のjobが走ってしまうことがあるので(特にマルチコアの場合に起こりやすい)、atd -l 0.7とかにしておくとよいかですね。

# しかしat nowっていかしますな。Linux最高!ってかね。

走ってる計算を止めるには、

$ ps fx

して、orca_*_mpiのプロセス番号を調べ、kill いずれかのプロセス番号します。振動数計算をしている時には、まず親を殺してから、子プロセスを停止させるようにすること(さもなくば、雨後の竹の子のように子プロセスが走る^^;)。

では、ここいらで: I'm also leaving here again. GOOD LUCK!!!

小技

NFS

もし共通のディレクトリ上で走らせたいとお考えなら、以下のサイトが参考になるかと:

具体的には、/etc/exportsで

/home/your-name/orca_5_0_4_linux_x86-64_shared_openmpi411/scratch 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)

のような感じで設定してあげます。

リモートデスクトップ

Ubuntuでは簡単にリモートデスクトップを設定することができます。手順としては:

  1. private IPを振ってあげて、ゲートウェイにも0.0.0.0を入れる。で、このときldconfigがいるかも?もしくは再起動がいる?
  2. リモートデスクトップをONにする

リモート側は、WindowsならUltraVNCがよいかと。

落とし穴

計算環境構築とは関係ありませんが、Grimmeの経験的vdW補正を使う時、彼が言う所のDFT-D3を使いたければvdW10と指定しましょう。デフォルトでは、DFT-D2で計算することになります。(ORCA 2.8.0の場合)