分子動力学計算エンジン 本家様http://www.ks.uiuc.edu/Research/namd/
ダウンロードサイトに行くと、結構いろいろなバイナリーが配布されている。

Molecular Dynamics Flexible Fitting (MDFF) namd/MDFF

インストール

各ダウンロードパッケージの用途とその実行方法を下記にまとめてみた。

プログラム名*説明実行方法(例)備考
Linux-x86_64-multicoresingle node/stand-alonenamed2 +p<thread> apoa1.namd1プロセスで<thread>数で計算
Linux-x86_64-TCPTCP通信で複数ノード対応
(単一ノードでも稼動可)
charmrun ++local ++p <process> \
`which namd2` apoa1.namd
スタンドアロン
1台内で<process>数で計算
charmrun ++nodelist list \
++ppn <core> ++p <総core>\
`which namd2` apoa1.namd
1ノード当たり<core>を使用して
合計<総core>で計算
1coreが1プロセスになる
Linux-x86_64-ibverbs-smpInfiniBand通信
smpで計算可能
charmrun ++ppn <threads> ++p <core>
++nodelist list `which namd2` apoa1.namd

ここでは標準的な Linux-x86_64-multicore についてそのインストールを示す。
入手したファイルは NAMD_2.12_Linux-x86_64-multicore.tar.gz である。

[root@c ~]# cd /Appl/
[root@c Appl]# gzip -cd src/NAMD_2.12_Linux-x86_64-multicore.tar.gz | tar xf -
[root@c Appl]# ls -l NAMD_2.12_Linux-x86_64-multicore/
合計 25464
-rw-r--r-- 1 14522 1004     1531 12月 22  2016 README.txt
-rw-r--r-- 1 14522 1004     3015 12月 22  2016 announce.txt
-rwxr-xr-x 1 14522 1004      484 12月 22  2016 charmrun
-rwxr-xr-x 1 14522 1004    20838 12月 22  2016 flipbinpdb
-rwxr-xr-x 1 14522 1004    24939 12月 22  2016 flipdcd
drwxr-xr-x 8 14522 1004      101 12月 22  2016 lib
-rw-r--r-- 1 14522 1004    10276 12月 22  2016 license.txt
-rwxr-xr-x 1 14522 1004 23795483 12月 22  2016 namd2
-rw-r--r-- 1 14522 1004    41626 12月 22  2016 notes.txt
-rwxr-xr-x 1 14522 1004  1861611 12月 22  2016 psfgen
-rwxr-xr-x 1 14522 1004   289998 12月 22  2016 sortreplicas
[root@c Appl]#

NAMDの実行にはPATH環境変数の調整だけですみそうで、ユーザ各自のPATH環境変数を下記のようにする。

[illya@c ~]$ export PATH=/Appl/NAMD_2.12_Linux-x86_64-multicore:$PATH
[illya@c ~]$ which namd2
/Appl/NAMD_2.12_Linux-x86_64-multicore/namd2
[illya@c ~]$

実行コマンドは namd2 となります。

サンプルファイル

テストデータには、http://www.ks.uiuc.edu/Research/namd/utilities/のExample Simulationsにて提供されているApoA1がある。

[illya@c ~]$ mkdir namd && cd namd/
[illya@c namd]$ curl -O http://www.ks.uiuc.edu/Research/namd/utilities/apoa1.tar.gz
[illya@c namd]$ gzip  -cd apoa1.tar.gz | tar xf - && cd apoa1
[illya@c apoa1]$ ls -lh
合計 20M
-rw-r--r-- 1 illya fate  794  9月 23  2000 apoa1.namd
-r--r--r-- 1 illya fate 6.8M  9月 23  2000 apoa1.pdb
-r--r--r-- 1 illya fate  13M  9月 23  2000 apoa1.psf
-r--r--r-- 1 illya fate  460  9月 23  2000 par_all22_popc.xplor
-r--r--r-- 1 illya fate 153K  9月 23  2000 par_all22_prot_lipid.xplor
[illya@c apoa1]$

っで、この中身はvmdで閲覧可能で下記を実行すると

[illya@c apoa1]$ apoa1.pdb

vmdが立ち上がり、下図画面が表示される
2018y02m11d_212518596.png

apoa1.namdにはNAMDでの計算条件が記載されている

cellBasisVector1     108.8612 0.0 0.0       <<-- 周期境界条件
cellBasisVector2     0.0 108.8612 0.0       <<-- 周期境界条件
cellBasisVector3     0.0 0.0 77.758         <<-- 周期境界条件
cellOrigin           0.0 0.0 0.0            <<-- 箱の原点
 
coordinates          apoa1.pdb
temperature          300                    <<-- 300K(300-273.15=26.85C)の浴室
seed                 74269
 
switching            on
switchdist           10
cutoff               12           <<-- van der Waals/静電相互作用の及ぶ範囲
pairlistdist         13.5
margin               0
stepspercycle        20
 
PME                  on           <<-- 静電相互作用の計算にPMEを使う
PMEGridSizeX         108
PMEGridSizeY         108
PMEGridSizeZ         80
 
structure            apoa1.psf
parameters           par_all22_prot_lipid.xplor
parameters           par_all22_popc.xplor
exclude              scaled1-4
1-4scaling           1.0
 
timestep             1.0
fullElectFrequency   4
 
numsteps             500
outputtiming         20
 
outputname           /usr/tmp/apoa1-out

詳しい各種パラメータの意味はマニュアルをご参照下さい。
*PMEがあればcutoffはどうなるの?

っで計算を流してみる

[illya@c apoa1]$ namd2 apoa1.namd | tee apoa1.log

N3700(1.60GHz)なマシンで 30m29.207s

並列計算(その1)

multicore版は、1 coreでしか計算しません。複数のcoreを使わせるには+pで使用するcore数を指定します。

[illya@c apoa1]$ export PATH=/Appl/NAMD_2.12_Linux-x86_64-multicore:$PATH
 
[illya@c apoa1]$ namd2 +p4 apoa1.namd | tee apoa1.log    <-- 4coreを使って計算
 
[illya@c apoa1]$ namd2 +p16 apoa1.namd | tee apoa1.log    <-- 16coreを使って計算

一応、複数のCPUソケットを有するマシンでもこれで実行可能.
この場合、topコマンドからは下記のように見える(+p32で計算)。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9962 xxxxxx    20   0 2521m 456m 5556 R 3089.6  0.7   3:47.54 namd2
 9960 xxxxxx    20   0 27900 1832 1044 R  7.1  0.0   0:00.18 top

N3700(1.60GHz)なマシンで4コア指定したら 8m11.546s になった

並列計算(その2)

TCP
1台ではなく、複数台を使って計算する場合。nodelistを用意する必要があります。Torqueで言うところの PBS_NODEFILE なもの
ファイル名は何でもよくて、識別子「group」で稼働させたいhostを指定します。

[illya@c apoa1]$ vi list
group main     # group名がmain
host n1        #   [main]に所属するホスト
host n2
group all      # group名がall
host n1        #   [all]に所属するホスト
host n2
host n3
[illya@c apoa1]$

「group」名が「main」以外なら「++nodegroup」を設けて指定する必要がある。例 「++nodegroup all」
で実際に計算をさせてみる

[illya@c apoa1]$ export PATH=/Appl/NAMD_2.12_Linux-x86_64-TCP:$PATH
[illya@c apoa1]$ echo "export PATH=/Appl/NAMD_2.12_Linux-x86_64-TCP:\$PATH" >> ~/.bashrc   <-- 他ノードでもPATHを有効
 
[illya@c apoa1]$ charmrun ++nodelist list ++ppn 4 ++p 8 namd2 apoa1.namd

ここでは1ノード当たり4coreを使い、合計8coreで計算させてます。このときの一台のtopは

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10826 xxxxxx    20   0  104m  68m 2920 R 84.0  0.1   0:03.88 namd2
10823 xxxxxx    20   0  225m  85m 5504 R 83.3  0.1   0:21.63 namd2
10824 xxxxxx    20   0  101m  64m 2920 R 80.3  0.1   0:03.77 namd2
10825 xxxxxx    20   0  101m  64m 2920 R 79.3  0.1   0:03.76 namd2
 3495 root      20   0  195m 6040 1596 S  0.3  0.0  61:06.13 snmpd

となる。

*注意1
計算を実行したいマシンから実行する必要はない。実行後、listに記載されたマシンで計算する
listに記載されたマシンへパスワードなしでssh接続できることが必須
2016y08m11d_000117256.png

CUDAで計算

nvidiaのカードが搭載されたマシンで計算したい場合、使用するのはmulticore-CUDA版。

[illya@c apoa1]$ export PATH=/Appl/NAMD_2.12_Linux-x86_64-multicore-CUDA:$PATH
 
[illya@c apoa1]$ namd2 +p4 +setcpuaffinity +devices 0 apoa1.namd

「+devices」でnvidiaカードを指定する。複数枚なら「+devices 0,1,2,3」とか
この場合のtopは

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 2948 xxxxxx    20   0 85.246g 370912 122744 R 386.8  0.1   1:43.54 namd2
 2911 xxxxxx    20   0  168840   3168   1592 R   0.7  0.0   0:00.74 top

となる。

複数台のCUDAマシンで計算

計算機間の通信にはinfinibandが必要みたい。ibverbs-smp-CUDA
TCPの延長で作れるかソースで試したが無理でした...

qsubとあわせて

ジョブ管理システムTORQUEを経由してジョブを走らせてみた
TORQUEは、リソースの管理と確保が第一で、その確保されたリソースにコマンド行を投げる。
確保されたホストは環境変数PBS_NODEFILEに書かれているので、これを利用して nodelist 向けのファイルを作成する。
留意 PBS_NODEFILE ファイルに書かれたホスト名は、確保されたcoreの数だけ書かれているので重複があります。
そのため「sout -u」で重複をなくして、sedコマンドで nodelist 向けに加工します。

[illya@pbs apoa1]$ vi namd.qsub
#!/bin/bash
#PBS -q bio
#PBS -l nodes=2:ppn=2
#PBS -j oe
cd $PBS_O_WORKDIR
echo "group bio" > list
cat $PBS_NODEFILE | sort -u | sed 's/^/host /g' >> list
#
export PATH=/Appl/Linux/NAMD_2.11_Linux-x86_64-TCP:$PATH
#
charmrun ++nodelist list ++nodegroup bio ++ppn $PBS_NUM_PPN ++p $PBS_NP  `which namd2` apoa1.namd
 
[illya@pbs apoa1]$

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2018-02-13 (火) 10:36:02 (222d)