Amber20
ウェブページ
バージョン
Amber20 + AmberTools20-up3
ビルド環境
- Intel Parallel Studio 2017 Update8 (MPI only)
- GCC 7.3.1 (devtoolset-7)
- CUDA 10.1.243
ビルドに必要なファイル
- Amber20.tar.bz2
- AmberTools20.tar.bz2
- (AmberTools20 update.1-3; スクリプト内で取得)
ビルド手順
#!/bin/sh
VERSION=20
TOOLSVERSION=20
INSTALL_DIR="/local/apl/lx/amber20-up0"
TARBALL_DIR="/home/users/${USER}/Software/AMBER/20"
PARALLEL=12
#----------------------------------------------------------------------
module purge
module load intel_parallelstudio/2017update8
module load scl/devtoolset-7
module load cuda/10.1
export AMBERHOME=${INSTALL_DIR}
export CUDA_HOME="/local/apl/lx/cuda-10.1"
export LANG=C
export LC_ALL=C
# install directory has to be prepared before running this script
if [ ! -d $AMBERHOME ]; then
echo "Create $AMBERHOME before running this script."
exit 1
fi
# the install directory must be empty
if [ "$(ls -A $AMBERHOME)" ]; then
echo "Target directory $AMBERHOME not empty"
exit 2
fi
ulimit -s unlimited
# prep files
cd $AMBERHOME
bunzip2 -c ${TARBALL_DIR}/Amber${VERSION}.tar.bz2 | tar xf -
bunzip2 -c ${TARBALL_DIR}/AmberTools${TOOLSVERSION}.tar.bz2 | tar xf -
mv amber${VERSION}_src/* .
rmdir amber${VERSION}_src
# install python first. otherwise, update_amber failed to connect ambermd.org
./AmberTools/src/configure_python
AMBER_PYTHON=$AMBERHOME/bin/amber.python
# apply patches and update AmberTools
echo y | $AMBER_PYTHON ./update_amber --upgrade
$AMBER_PYTHON ./update_amber --update
echo "[GPU serial edition (two versions)]"
LANG=C ./configure --no-updates -cuda gnu
make -j${PARALLEL} install && make clean
echo "[GPU parallel edition (two versions)]"
LANG=C ./configure --no-updates -mpi -cuda gnu
make -j${PARALLEL} install && make clean
# GPU tests will be done elsewhere
# ccgpup cannot access external network, ccfep doesn't have GPGPUs
echo "[CPU serial edition]"
LANG=C ./configure --no-updates gnu
make -j${PARALLEL} install
. ${AMBERHOME}/amber.sh
make test.serial
make clean
echo "[CPU openmp edition]"
LANG=C ./configure --no-updates -openmp gnu
make -j${PARALLEL} install
make test.openmp
make clean
echo "[CPU parallel edition]"
LANG=C ./configure --no-updates -mpi gnu
make -j${PARALLEL} install
export DO_PARALLEL="mpirun -np 2"
make test.parallel
export DO_PARALLEL="mpirun -np 4"
cd test && make test.parallel.4proc
cd $AMBERHOME
make clean && chmod 700 src
パフォーマンスに関するメモ
GPU
- P100(jobtype=gpup) では AMBER20-up0(gcc7 + CUDA-10.1) よりも AMBER18-bf16 (gcc4.8 + CUDA-9.1) の方がわずかに速いようです。(2-3 % 程度)
- AMBER20-up0 を CUDA-9.1 でビルドすると CUDA-10.1 のバージョンよりも明確に遅くなります
- GPU 版については gcc のバージョンの違いで大きく速度が変わるケースはこれまでのところはありません。
- 公式メーリングリストの情報でも同様の事象が確認されています
- 対照的に、V100 (jobtype=gpuv) では現時点でも AMBER20-up0 の方が少し速そうです。(5 % 程度)
- センターでは確認できていませんが、Turing 世代の GPU では以前のバージョンに比べて 15% 程度の速度低下が報告されています。(公式メーリングリストの情報)
明示的に V100 を使う場合、Amber20 の新機能を使いたい場合だけは、Amber20-up0 を選択するべきかもしれません。
しかし、そうでないのなら、現状(2020/6 時点, Amber20-up0)では Amber18-bf16 を選択すべきかもしれません。
(なお、Amber20 については今後のパッチリリースによってパフォーマンスが大きく向上する可能性があります。)
CPU
- DHFR 系でテスト
- CPU 版の pmemd.MPI については intel の方が明確に速い。intel17 と intel19 の間に明確な差は見出せなかった。
- gcc 系ではバージョン 6-8 では大きな違いは見られず。一方で 4.8 は 6-8 より明らかに少し遅い。(5 は未検証)
メモ
- MPI+OpenMP バージョンの CPU 版 pmemd についてはスキップ
- update_amber の際に system 標準の python を使うとエラーとなる(何かのパッケージが足りない or 古い?)ため、amber の miniconda のものを拝借
- システム標準の python3 ならば動作
- anaconda2-2019Jul の python でも動作する
- gcc8 を使うと CUDA 版の GB 計算のテストが失敗する。1 ステップ目の EGB の時点でおかしい。
- gcc6, gcc7 では発生せず。2 ステップ目以降のダイナミクスに影響がありそうな気配。
- GPU 版の GAMD 計算のテストでエラーが発生するケースがある。(シリアル、並列の両方)
- ログに GAMD = ************** のような行が出力されたり、値が不審に 0.0 だったりする
- これまでに把握できた限りでは、gcc のバージョンには依存しない模様
- 確実に発生するわけでは無い。起こらない場合もありそう。また、ダイナミクスには影響無いようで、他のエネルギー等は正常に見える
- cpu 側と gpu 側の出力用バッファの同期が甘い?もしくは reduction の処理に問題がある?良くわからない。
- インテルコンパイラー(17u8, 19u5 で検証)では test/dhfr の bussi のテスト(ntt=11; Bussi thermostat)で数値エラーが出る。2 ステップでの運動エネルギーの値が明確にずれる。
- 熱浴の挙動が純粋におかしい可能性があるため、intel コンパイラは回避することにした。
- gcc7+mkl17 と intel17(+mkl)+gcc7 では追加で nab のテストで失敗する。数値エラー。(intel17 の mkl の影響? gcc + intel19 の mkl では未検証)
- intel19(+mkl)+gcc8 では nab のテストは成功するが、他で一部 Program error 等が見られたため、今回は回避した。
- gcc7 で mkl 使わない場合は問題無し。ひとまず mkl は外す。