CentOS 5.9にAmber 11をインストールしてMolecular DynamicsをGPU4個に並列計算させる
手順メモ。前提としてOSはCentOS 5.9 (64-bit)でIntel Compiler 11.1がすでにインストール済みだと仮定しておきます。なお、バージョンの確認方法は
$ icc --version
です。この記事では研究用サーバを構築することが目的なので基本的に全ユーザーが扱えるようにセットアップを行なっていきます。
CUDAのインストール
GPUを扱うためにNvidiaのCUDAをインストールします。まずXサーバが動いていると「X起動中にインストールはできないよ」と怒られるので下記コマンドでXを止めます。なおsudo
コマンドが使えない場合はsu
でrootになってから行なってください。
$ sudo init 3
次に下記コマンドで開発者用ドライバのダウンロード及びインストールを行います。出てくる指示には基本的にYESで答えていけばOK。
$ curl -O http://developer.download.nvidia.com/compute/cuda/4_0/drivers/devdriver_4.0_linux_64_270.41.19.run
$ chmod +x devdriver_4.0_linux_64_270.41.19.run
$ sudo ./devdriver_4.0_linux_64_270.41.19.run
次にCUDA Toolkitのダウンロードおよびインストールを行います。今回はCentOS 5.9だったのでCUDA Toolkit for RedHat Enterprise Linux 5.5 (64-bit)をインストールしていますが本家には様々なOS用のファイルがあるので適時変更してください。
$ curl -O http://www.nvidia.com/object/thankyou.html?url=/compute/cuda/4_0/toolkit/cudatoolkit_4.0.17_linux_64_rhel5.5.run
$ chmod +x cudatoolkit_4.0.17_linux_64_rhel5.5.run
$ sudo ./cudatoolkit_4.0.17_linux_64_rhel5.5.run
インストールが終わると環境変数うんちゃらと言われるので、まず下記コマンドにてCUDAのライブラリを登録します。なおldconfig
なんて知らないよと言われた場合は/usr/sbin
および/sbin
がPATH
に登録されていないのでPATH="${PATH}:/usr/sbin:/sbin"
としてからldconfig
を実行してください。
$ echo "/usr/local/cuda/lib64" | sudo tee /etc/ld.so.conf.d/cuda.conf
$ echo "/usr/local/cuda/lib" | sudo tee -a /etc/ld.so.conf.d/cuda.conf
$ sudo ldconfig
次にPATH
の設定を行います。個人設定にする場合は~/.profile
や~/.bashrc
に追加、どのユーザーでも使えるようにするには/etc/profile.d/cuda.sh
を下記内容で作成してください。
export CUDA_HOME="/usr/local/cuda"
export PATH="${CUDA_HOME}/bin:${PATH}"
その後下記コマンドで設定を読み込んでください。
$ source /etc/profile.d/cuda.sh
適切にインストールできていれば下記コマンドでCUDAのバージョンが表示されます。
$ nvcc -V
最後にGPU Computing SDKをインストールします。これはrootで行う必要はないです。下記コマンドでダウンロード及びインストールを行なってください。
$ curl -O http://developer.download.nvidia.com/compute/cuda/4_0/sdk/gpucomputingsdk_4.0.17_linux.run
$ chmod +x gpucomputingsdk_4.0.17_linux.run
$ ./gpucomputingsdk_4.0.17_linux.run
すべてデフォルトのままでインストールを行うとホームディレクトリにNVIDIA_GPU_Computing_SDK
というディレクトリが出来上がり、そこにインストールされます。このままでも良いのですがdeviceQuery
という便利なサンプルプログラムがあるので、まずはそれをコンパイルします。インストールしたディレクトリでmake
を実行するとコンパイルが始まります。
$ cd ~/NVIDIA_GPU_Computing_SDK
$ make
これでコンパイルが終わりdeviceQuery
が使える状態なのですが、実行する前にPATH
を通す必要があります。ただ、このdeviceQuery
は割と便利なコマンドなので全員が使えるようにSDK全体を/opt
下に移し、そこにPATH
を通します。
$ sudo mv ~/NVIDIA_GPU_Computing_SDK /opt/
移動後に/etc/profile.d/cuda.sh
(もしくは~/.profile
等)に下記内容を追加してください。
# NVIDIA GPU Computing SDK
export PATH="/opt/NVIDIA_GPU_Computing_SDK/C/bin/linux/release:${PATH}"
最後に下記コマンドで環境変数を再読み込みするとdeviceQuery
が使えるようになります。
$ source /etc/profile.d/cuda.sh
$ deviceQuery
mpichのインストール
MPICHはMPI(Message Passing Interface)という複数PCでの分散処理等を行う規格により分散処理をさせるためのソフトですが、今回は一台のサーバーに設置されている複数のGPUに並列処理をさせるために用います(本末転倒?w)
まずMPICHのホームページよりソースをダウンロードしてきます。僕の場合はmpich-3.0.4.tar.gz
でした。これをホームディレクトリなどに保存します。
次に下記コマンドにて展開〜コンパイル条件設定までを行います。なおAmberでIntel Compilerを用いる予定なので、コンパイラにIntel Compilerを明示的に指定しています(CC=icc CXX=icpc F77=ifort FC=ifort
)。
$ tar xvzf mpich-3.0.4.tar.gz
$ cd mpich-3.0.4
$ ./configure --prefix=/opt/mpich-3.0.4 CC=icc CXX=icpc F77=ifort FC=ifort
成功すると"Configuration completed."と表示されます。エラーが出る場合は必要なライブラリが無い場合が多いと思うのでライブラリ名などでググってください。
次に下記コマンドでコンパイル〜インストールまでを行います。それなりに時間がかかるのでコーヒーを煎れましょう。
$ make && sudo make install
すべてが終わったら個人使用の場合は.bashrc
もしくは.profile
に追加、全ユーザーが使えるようにする場合は/etc/profile.d/mpich.sh
を以下の内容で作成してください。
export MPI_HOME="/opt/mpich-3.0.4"
export PATH="${MPI_HOME}/bin:${PATH}"
export MANPATH="${MPI_HOME}/share/man:${MANPATH}"
最後にライブラリを下記コマンドにて登録してください。
$ echo "/opt/mpich-3.0.4/lib" | sudo tee /etc/ld.so.conf.d/mpich.conf
$ sudo ldconfig
以下コマンド一行目にてシェルに環境変数を読ませるとmpirun
などのコマンドが使えるようになります。
$ source /etc/profile.d/mpich.sh (もしくは source ~/.bashrc か source ~/.profile)
$ mpirun --version
Amber 11のインストール
MD計算といえばAmberというくらい有名(らしい)ですね。研究室にはAmber 11があったのでこれをインストールします。
実際のインストール方法はマニュアル通りなのですが、GPUを並列で用いたちので大まかに以下の手順でインストールすることになります。
- Amber Tools 1.5およびバグ修正パッチをダウンロードする
- Amber 11およびAmber Tools 1.5にバグフィクスを適用する
- Amber Tools 1.5をインストールする
- Amber 11をインストールする
- 並列計算用Amber 11をインストールする
- GPU用Amber 11をインストールする
- GPU並列計算用Amber 11をインストールする
なお、時間かかりまくりんぐなのでまだしっかりとテストできてないですが https://gist.github.com/lambdalisue/5459081 に下記工程を自動て行うスクリプトを上げておきました。自己責任でお使いください。
ダウンロード
いつまでダウンロード可能かはわかりませんが本家よりAmber Tools 1.5がダウンロード可能です。ダウンロードが完了したらAmber 11のアーカイブファイル(おそらくAmber11.tar.bz2
)と同じディレクトリに保存します。
次にAmber 11およびAmber Tools 1.5のバグ修正をダウンロードします。これは本家のAmber Bug Fixesのページからダウンロード可能で2014年4月現在ではAmber 11がbugfix.23までAmber Tools 1.5がbugfix.28までを含んでおり、それぞれbugfix.all.tar.bz2
およびbugfix.all
というファイルで配布されています。
これら二つのファイル及びAmber 11用バグ修正を適用するためのapply_bugfix.x
というファイルをダウンロードし、これもAmber 11のアーカイブファイルと同じディレクトリに保存します。
すべてがダウンロードできた後はファイル構成は以下のようになっているはずです。
- $HOME/Amber11-Install
+- Amber11.tar.bz2
+- AmberTools-1.5.tar.bz2
+- apply_bugfix.x
+- bugfix.all
+- bugfix.all.tar.bz2
バグ修正適用
次にバグ修正を適用します。ただ、修正を加える前に書きコマンドにてAMBERHOME
という環境変数を用意しておきます。ここの値が実際にAmberがインストールされる場所になります。
$ export AMBERHOME="$HOME/amber11"
インストール時にroot権限が必要なのが面倒なので取り敢えずホームディレクトリ下にインストールしますが、すべて完了後に/opt
等に移します。
次にAmber 11およびAmber Tools 1.5を展開します。Amber 11およびAmber Tools 1.5は展開時にamber11
というディレクトリを作成し、そこに展開するためホームディレクトリに展開すると先ほど指定したAMBERHOME
に展開されることになります。
$ tar xjf Amber11.tar.bz2 -C "$HOME"
$ tar xjf AmberTools-1.5.tar.bz2 -C "$HOME"
次にAmber Tools 1.5のバグ修正を適用します。下記コマンドにて適用してください。一つ目のコマンドでダウンロードしたパッチをAMBERHOME
に移動させています。
$ mv bugfix.all "$AMBERHOME"
$ cd $AMBERHOME
$ patch -p0 -N < bugfix.all
次にAmber 11のバグ修正を適用します。これは先程ダウンロードしたapply_bugfix.x
を用いて行います。なお、このコマンドはAMBERHOME
にパッチを適用するのでAMBERHOME
が適切に設定されていることを再度確認してください。
$ chmod +x apply_bugfix.x
$ ./apply_bugfix.x ./bugfix.all.tar.bz2
最後にCUDA使うならパッチ13以上当てなきゃダメよ的なメッセージが表示されれば終了です。
Ambe Tools 1.5のインストール
まずAmber 11をインストールする前にAmber Tools 1.5をインストールします。この順番を間違えると色々面倒だった気がします。面倒だった気がするだけかもしれませんが、面倒なのでAmber Tools 1.5からインストールします。 実際のインストールは下記コマンドです。少し時間がかかるので先ほど煎れたコーヒーを飲みましょう。ただ、たぶん冷たくなっているので電子レンジで再加熱してください。再加熱する時間は十分にあると思います。
$ cd $AMBERHOME/AmberTools/src
$ ./configure intel && make install
Amber 11のインストール
通常版のインストール
まずはじめに通常版Amber 11をインストールします。このインストールではsander
などの通常のプログラムがインストールされます。
さっそく下記コマンドを打ち込んでください。
$ cd $AMBERHOME/AmberTools/src
$ ./configure intel
$ cd $AMBERHOME/src
$ make clean && make serial
./configure intel
およびmake clean && make install
コマンドは結構時間がかかるので成功時実行の&&
により繫げて下記のように行っても良いです(というか僕ならそうする)
$ cd $AMBERHOME/AmberTools/src && ./configure intel && cd $AMBERHOME/src && make clean && make serial
インストールが終わったら下記コマンドにてテストを走らせることができます。基本的にほとんどPASSED
と表示されると思いますが、環境によってはいくつかpossible FAILURE
が出るかもしれません。
出ているものがクリティカルかどうかはググってください。
$ cd $AMBERHOME/test && make test
なお、このテストも結構な時間がかかります。そろそろ先ほどのコーヒーで尿意を感じ始めていると思うのでテストが終わるまでの時間に処理をしておきましょう。
インストールが完了すると最も単純な計算用のsander
および速度最適化の派生系であるpmemd
がインストールされます。
並列処理用Amber 11のインストール
正直これは不要かもしれませんがCPUによる並列処理を行うためのAmberをインストールします。下記コマンドでどうぞ。これも&&
で繋げて一行で書くと待つだけなので簡単です。
$ cd $AMBERHOME/AmberTools/src
$ ./configure -mpi intel
$ cd $AMBERHOME/src
$ make clean && make parallel
並列処理用Amber 11のテストは以下のコマンドで行えます。
$ cd $AMBERHOME/test && make test.parallel
インストールが完了すると並列処理用のコマンドpmemd.MPI
が使えるようになります。
GPUを用いるAmber 11のインストール
CPUの代わりにGPUを用いて計算するAmber 11のインストールを行います。下記コマンドでどうぞ。これも&&
で繋げて一行で書くと待つだけなので簡単です。
$ cd $AMBERHOME/AmberTools/src
$ ./configure -cuda intel
$ cd $AMBERHOME/src
$ make clean && make cuda
GPU処理用Amber 11のテストは以下のコマンドで行えます。
$ cd $AMBERHOME/test && ./test_amber_cuda.sh
インストールが完了するとGPU処理用のコマンドpmemd.cuda
が使えるようになります。
GPUを用いて並列計算を行うAmber 11のインストール
最後にGPUを用いて並列計算を行うリッチでパワフルなAmber 11をインストールします。下記コマンドでどうぞ。これも&&
で繋げて一行で書くと待つだけなので簡単です。
$ cd $AMBERHOME/AmberTools/src
$ ./configure -cuda -mpi intel
$ cd $AMBERHOME/src
$ make clean && make cuda_parallel
GPU処理用Amber 11のテストは以下のコマンドで行えます。
$ cd $AMBERHOME/test && ./test_amber_cuda_parallel.sh
インストールが完了するとGPU処理用のコマンドpmemd.cuda.MPI
が使えるようになります。
環境変数の設定および/opt/への移動
インストールが完了したAmberを/opt
下に移動させます。
$ sudo mkdir -p /opt
$ sudo mv ~/amber11 /opt/
次に環境変数を設定します。個人の場合は.profile
や.bashrc
に追加、全ユーザーの場合は/etc/profile.d/amber.sh
を以下の内容で作成してください。
export AMBERHOME="/opt/amber11"
export PATH="${AMBERHOME}/bin:${AMBERHOME}/exe:${PATH}"
最後に追加 or 作成したファイルをシェルで読み込んでください(次回起動時は自動的に読み込まれるのでこの手順は不要)
$ source /etc/profile.d/amber.sh (もしくは source ~/.profile か source ~/.bashrc)
これでAmber 11のインストールは終了です。
使用例
すべてのインストールが完了すると下記コマンドにてGPUを4つ同時に使用してMDの計算が行えます。
なおCUDA_VISIBLE_DEVICES
に指定するGPU番号は事前にdeviceQuery
コマンド(CUDA GPU Computing SDKに存在)等を使用して調べたものです。
$ CUDA_VISIBLE_DEVICES=0,1,3,4 mpirun -np 4 pmemd.cuda.MPI -i md1.in -c obj.inpcrd -p obj.prmtop -o md1.out -r md1.restrt -x md1.mdcrd
コマンド実行前にCUDA_VISIBLE_DEVICES
を指定しているのは、これを行わないと別インスタンスによるバッティングが起こるからです。自動的に使用していないGPUを割り当てる方法もあるようですが、僕が試してみたところうまく行かなかったため下記コマンドにてGPUの使用率を目視で確認し、計算に使用されていないGPUをCUDA_VISIBLE_DEVICES
で必要個数指定して計算を走らせています。
$ nvidia-smi -q -d "UTILIZATION"
この記事が未来の自分の助けになりますように
追記
Debian Wheezy に AmberTools 1.5 をインストールする際に下記が必要になった
sudo aptitude install curl csh gfortran flex libbz2-dev
またXが正しく認識されなかったためAmberTools/src/configure
のあとconfig.h
を修正した
XHOME=/usr XLIBS= -L/lib64 -L/lib -L/usr/lib/x86_64-linux-gnu MAKE_XLEAP=install_xleap