Λlisue's blog

つれづれなるままに更新されないブログ

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および/sbinPATHに登録されていないので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を並列で用いたちので大まかに以下の手順でインストールすることになります。

  1. Amber Tools 1.5およびバグ修正パッチをダウンロードする
  2. Amber 11およびAmber Tools 1.5にバグフィクスを適用する
  3. Amber Tools 1.5をインストールする
  4. Amber 11をインストールする
  5. 並列計算用Amber 11をインストールする
  6. GPU用Amber 11をインストールする
  7. 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の使用率を目視で確認し、計算に使用されていないGPUCUDA_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