AmberTools 26 (update1)

ウェブページ

http://ambermd.org/

バージョン

AmberTools 26 (update 1)

ビルド環境

  • GCC 13.3.1 (gcc-toolset-13)
  • CUDA 12.9 update 1 (12.9.1)
  • OpenMPI 4.1.8 (CUDA-aware)
  • PLUMED 2.10.0
  • (Gaussian 16 C.02; QM/MM テストにのみ使用)

ビルドに必要なファイル

  • ambertools26.tar.bz2

ビルド手順

#!/bin/sh

VERSION=26

INSTALL_DIR=/apl/ambertools/26u1
BASEDIR=/home/users/${USER}/Software/AmberTools/26
TARBALL=${BASEDIR}/ambertools${VERSION}.tar.bz2
WORKDIR=/gwork/users/${USER}/at26

PLUMED_ROOT=/apl/plumed/2.10.0/gcc13/ompi

PARALLEL=16

#-----------------------------------------------------------------------
export LANG=C
export LC_ALL=C
ulimit -s unlimited

module -s purge
module -s load gcc-toolset/13
module -s load cuda/12.9u1
module -s load openmpi/4.1.8/gcc13-cuda12.9u1
module -s load gaussian/16c02
module -s load plumed/2.10.0-gcc13-ompi418

# install directory must be empty
if [ "$(ls -A $INSTALL_DIR)" ]; then
 echo "Target directory $INSTALL_DIR not empty"
 exit 1
fi

mkdir -p ${WORKDIR}
cd ${WORKDIR}
if [ -d ambertools${VERSION}_src ]; then
 mv -f ambertools${VERSION}_src at_erase
 rm -rf at_erase &
fi

tar xf ${TARBALL}
cd ambertools${VERSION}_src

sed -i -e "1s/env python/env python3/" update_amber
./update_amber --update
yes | ./update_amber --upgrade
./update_amber --update

# force allow cuda 12.9.1 (12.9u1)
sed -i -e "s/VERSION_LESS 12.9/VERSION_LESS 13.0/" cmake/CudaConfig.cmake

## force allow cuda 13.3 (SM70 not supported in CUDA 13.x)
#sed -i -e "s/VERSION_LESS 12.9/VERSION_LESS 13.4/" \
#       -e "s/APPEND CUDA_NVCC_FLAGS ${SM70FLAGS}/APPEND CUDA_NVCC_FLAGS/" \
#    cmake/CudaConfig.cmake
#sed -i -e "s/LESS_EQUAL 13.1.1/LESS_EQUAL 13.4/" AmberTools/src/quick/quick-cmake/QUICKCudaConfig.cmake

# ad hoc fix for symbolic links (amber.conda & amber.python) (by Gemini)
sed -i -e '/installtime_create_symlink(${PYTHON_EXECUTABLE}/,/endif()/ {
   /installtime_create_symlink(${PYTHON_EXECUTABLE}/ {
       i\
install(CODE "execute_process(COMMAND \\\${CMAKE_COMMAND} -E create_symlink \\"${PYTHON_EXECUTABLE}\\" \\"\\\$ENV{DESTDIR}\\\${CMAKE_INSTALL_PREFIX}/${BINDIR}/amber.python\\")" COMPONENT Python)\nif(EXISTS "${CONDA}")\ninstall(CODE "execute_process(COMMAND \\\${CMAKE_COMMAND} -E create_symlink \\"${CONDA}\\" \\"\\\$ENV{DESTDIR}\\\${CMAKE_INSTALL_PREFIX}/${BINDIR}/amber.conda\\")" COMPONENT Python)\nendif()
   }
   d
}' cmake/PythonInterpreterConfig.cmake

# CPU serial
echo "[CPU serial version]"
mkdir build_cpu_serial && cd build_cpu_serial
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=FALSE \
   -DCUDA=FALSE \
   -DOPENMP=FALSE \
   -DINSTALL_TESTS=TRUE \
   -DDOWNLOAD_MINICONDA=TRUE \
   -DPMMG_GUI_DEPS=ON \
   -DBUILD_REAXFF_PUREMD=TRUE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cpu_serial

# ad hoc fix
sed -i -e "s|${WORKDIR}/ambertools${VERSION}_src/build_cpu_serial/CMakeFiles/miniconda/install/bin/python|${INSTALL_DIR}/miniconda/bin/python|" ${INSTALL_DIR}/bin/pdb2pqr

eval "$(${INSTALL_DIR}/miniconda/bin/conda shell.bash hook)"

# CUDA serial
echo "[CUDA serial version]"
mkdir build_cuda_serial && cd build_cuda_serial
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=FALSE \
   -DCUDA=TRUE \
   -DOPENMP=FALSE \
   -DINSTALL_TESTS=FALSE \
   -DDOWNLOAD_MINICONDA=FALSE \
   -DUSE_CONDA_LIBS=TRUE \
   -DPYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_HOME} \
   -DBUILD_REAXFF_PUREMD=FALSE \
   -DDISABLE_PBSA_CUDA=TRUE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cuda_serial

# CUDA MPI
echo "[CUDA MPI version]"
mkdir build_cuda_mpi && cd build_cuda_mpi
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=TRUE \
   -DCUDA=TRUE \
   -DOPENMP=FALSE \
   -DINSTALL_TESTS=FALSE \
   -DDOWNLOAD_MINICONDA=FALSE \
   -DUSE_CONDA_LIBS=TRUE \
   -DPYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_HOME} \
   -DBUILD_REAXFF_PUREMD=FALSE \
   -DDISABLE_PBSA_CUDA=TRUE \
   -DPLUMED_ROOT=${PLUMED_ROOT} \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cuda_mpi

# CPU MPI+openmp (cpptraj only)
echo "[CPU MPI+OpenMP version (cpptraj only)]"
mkdir build_cpu_hybrid && cd build_cpu_hybrid
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=TRUE \
   -DCUDA=FALSE \
   -DOPENMP=TRUE \
   -DINSTALL_TESTS=FALSE \
   -DDOWNLOAD_MINICONDA=FALSE \
   -DUSE_CONDA_LIBS=TRUE \
   -DPYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DBUILD_REAXFF_PUREMD=FALSE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL}
cmake --install AmberTools/src/cpptraj
mv ${INSTALL_DIR}/bin/cpptraj.MPI ${INSTALL_DIR}/bin/cpptraj.OMP.MPI
cd ../ && rm -rf build_cpu_hybrid

# CPU openmp
echo "[CPU OpenMP version]"
mkdir build_cpu_openmp && cd build_cpu_openmp
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=FALSE \
   -DCUDA=FALSE \
   -DOPENMP=TRUE \
   -DINSTALL_TESTS=FALSE \
   -DDOWNLOAD_MINICONDA=FALSE \
   -DUSE_CONDA_LIBS=TRUE \
   -DPYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DBUILD_REAXFF_PUREMD=TRUE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cpu_openmp

# CPU MPI
echo "[CPU MPI version]"
mkdir build_cpu_mpi && cd build_cpu_mpi
cmake .. -Wno-dev \
   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
   -DCOMPILER=GNU \
   -DMPI=TRUE \
   -DCUDA=FALSE \
   -DOPENMP=FALSE \
   -DINSTALL_TESTS=FALSE \
   -DDOWNLOAD_MINICONDA=FALSE \
   -DUSE_CONDA_LIBS=TRUE \
   -DPYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DBUILD_REAXFF_PUREMD=FALSE \
   -DPLUMED_ROOT=${PLUMED_ROOT} \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cpu_mpi

# ad hoc fix for python interpreter path
# FixCondaShebang does not work for some files on RCCS system...
# (not due to symbolic links)
ORIGPATH=${WORKDIR}/ambertools${VERSION}_src/build_cpu_serial/CMakeFiles/miniconda/install
ORIGPATH2=/lustre${ORIGPATH}
NEWPATH=${INSTALL_DIR}/miniconda
cd ${INSTALL_DIR}
for f in bin/* miniconda/bin/*; do
 grep -I gwork $f
 if [ $? == 0 ]; then
   sed -i -e "s|${ORIGPATH2}|${NEWPATH}|g" \
          -e "s|${ORIGPATH}|${NEWPATH}|g" $f
 fi
done

# append env variables setting
cd ${INSTALL_DIR}
cat <<EOF >> amber.sh

# rccs setting
CUDA_AMBER=/apl/cuda/12.9u1
export PATH=\$CUDA_AMBER/bin:\$PATH
export LD_LIBRARY_PATH=\$CUDA_AMBER/lib64:\$LD_LIBRARY_PATH

OMPI_AMBER=/apl/openmpi/4.1.8/gcc13-cuda12.9u1
export PATH=\$OMPI_AMBER/bin:\$PATH
export LD_LIBRARY_PATH=\$OMPI_AMBER/lib:\$LD_LIBRARY_PATH
export OMPI_MCA_btl=^openib

export LD_LIBRARY_PATH=/apl/oneapi/mkl/2026.0/lib:\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/apl/oneapi/compiler-rt/2026.0.0/lib:\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/apl/pbs/23.06.06/lib:\$LD_LIBRARY_PATH
EOF

cat <<EOF >> amber.csh

# rccs setting
set CUDA_AMBER=/apl/cuda/12.9u1
setenv PATH "\$CUDA_AMBER/bin:\$PATH"
setenv LD_LIBRARY_PATH "\$CUDA_AMBER/lib64:\$LD_LIBRARY_PATH"

set OMPI_AMBER=/apl/openmpi/4.1.8/gcc13-cuda12.9u1
setenv PATH "\$OMPI_AMBER/bin:\$PATH"
setenv LD_LIBRARY_PATH "\$OMPI_AMBER/lib:\$LD_LIBRARY_PATH"
setenv OMPI_MCA_btl ^openib

setenv LD_LIBRARY_PATH "/apl/oneapi/mkl/2026.0/lib:\$LD_LIBRARY_PATH"
setenv LD_LIBRARY_PATH "/apl/oneapi/compiler-rt/2026.0.0/lib:\$LD_LIBRARY_PATH"
setenv LD_LIBRARY_PATH "/apl/pbs/23.06.06/lib:\$LD_LIBRARY_PATH"
EOF

# run tests
cd ${INSTALL_DIR}
. ${INSTALL_DIR}/amber.sh
# now, $AMBERHOME should be $INSTALL_DIR

# parallel tests first
export DO_PARALLEL="mpirun -np 2"

make test.parallel && make clean.test

export DO_PARALLEL="mpirun -np 4"
cd test; make test.parallel.4proc; make clean; cd ../

unset DO_PARALLEL

# openmp tests
export OMP_NUM_THREADS=8
make test.openmp && make clean.test
unset OMP_NUM_THREADS

# serial tests
make test.serial && make clean.test

テスト(GPU)

以下のスクリプトを ccgpu にて実行

#!/bin/sh

VERSION=26

INSTALL_DIR=/apl/ambertools/26u1
BASEDIR=/home/users/${USER}/Software/AmberTools/26
TARBALL=${BASEDIR}/ambertools${VERSION}.tar.bz2
WORKDIR=/gwork/users/${USER}/at26

PARALLEL=16

#-----------------------------------------------------------------------
export LANG=C
export LC_ALL=C
ulimit -s unlimited

module -s purge
module -s load gcc-toolset/13
module -s load cuda/12.9u1
module -s load mkl/2026.0
module -s load openmpi/4.1.8/gcc13-cuda12.9u1
module -s load gaussian/16c02
module -s load plumed/2.10.0-gcc13-ompi418

# run tests
cd ${INSTALL_DIR}
. ${INSTALL_DIR}/amber.sh
# now, $AMBERHOME should be $INSTALL_DIR

# gpu tests
export DO_PARALLEL="mpirun -np 2"
make test.cuda.parallel; make clean.test # DPFP
#cd test; make test.cuda.parallel.SPFP; make clean; cd ../

unset DO_PARALLEL
make test.cuda.serial; make clean.test # DPFP
#cd test; make test.cuda.serial.SPFP; make clean; cd ../

テスト結果

/apl/ambertools/26u1/logs 以下にログを置いています。

CPU 並列テスト

  • mmpbsa_py
    • ls: No match
    • $AMBERHOME/lib/python3.*/site-packages/mpi4py は存在しないが、$AMBERHOME/miniconda/lib/python3.*/site-packages/mpi4py は存在する
  • (4並列テストはすべてパス)

シリアルテスト

  • antechamber/acdoctor => 実行エラー?
  • C3H7I.prepi.dif => 数値エラー?(180 degrees vs -180 degrees?)
  • spce-mgcl-1264.exnvv.dif => 軽微な数値エラー
  • emap2.out.dif => 数値エラー?
  • emap2.x.dif => 数値エラー
  • qm7b_7203.out.dif => 軽微な数値エラー

OpenMP テスト, GPU 関連テスト

すべてパス

メモ

  • pmemd とは別パッケージとして導入しています。
  • 試験的に cpptraj を MPI, OpenMP 有効でビルドしています。(cpptraj.OMP.MPI)
    • (openmp を有効にしていない cpptraj でも OpenMP のライブラリがリンクされていますが…)
  • plumed をコンパイル時に組み込むことはできていませんが、実行時に PLUMED_KERNEL 環境変数経由で呼び出すことはできているようです。
    • amber.*sh に挿入している MKL などは plumed が依存しているため、一応追加しています。
    • (2026/6/30) plumed は上記手順で認識できているようでした。(cmake は libplumedKernel.so を見つけられませんでしたが…)PLUMED_KERNEL 環境変数は意味がなさそうなため消去しました。
  • CUDA 13.3 を使うと rism 関連で型関連のエラーが出るため、12.9u1 (12.9.1) を使用。
  • pbsa.cuda はビルドに失敗したため今回は無効化。libtorch も同様に無効化。
  • torchani については情報が少ないため、今回は回避。
    • ソフトを追加する必要がある上、現時点では GPU 非対応?
  • gcc15 (gcc-toolset/15) を使うとシリアル版の gem.pmemd テストで追加のエラーが出たため gcc13 (gcc-toolset/13)を使用。
    • gcc13, gcc15 (gcc-toolset) 以外は試していません。
  • (2026/6/24) ambertools 26 update 1 として導入。
  • (2026/6/30) インストールディレクトリの miniconda/_conda がリンク切れだったため、同じディレクトリにある micromamba へのシンボリックリンクに手動で置き直しました。