AmberTools 26 (update1)

Webpage

http://ambermd.org/

Version

AmberTools 26 (update 1)

Build Environment

  • 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; used only for QM/MM test)

Files Required

  • ambertools26.tar.bz2

Build Procedure

#!/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

Tests (GPU)

Tested on 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 ../

Test Results

Test log is available in /apl/ambertools/26u1/logs.

CPU parallel test

  • mmpbsa_py
    • ls: No match
    • $AMBERHOME/lib/python3.*/site-packages/mpi4py does not exist, while $AMBERHOME/miniconda/lib/python3.*/site-packages/mpi4py exists.
  • (-np 4 tests have passed successfully)

CPU serial Test

  • antechamber/acdoctor => runtime error?
  • C3H7I.prepi.dif => numerical error? (180 degrees vs -180 degrees?)
  • spce-mgcl-1264.exnvv.dif => minor numerical error
  • emap2.out.dif => numerical error?
  • emap2.x.dif => numerical error
  • qm7b_7203.out.dif => minor numerical error

OpenMP and GPU Tests

All the tests have passed.

Notes

  • AmberTools was installed as a separate package from pmemd.
  • Hybrid parallel (MPI+OpenMP) cpptraj was installed experimentally. (cpptraj.OMP.MPI)
    • (OpenMP libraries are linked even in cpptraj, where OpenMP is not enabled...)
  • PLUMED couldn't be bundled. However, it can be called via PLUMED_KERNEL environment variable.
    • (MKL path was added in amber.*sh, since plumed depends on it. This may not be necessary.)
    • (2026-Jun-30 update) PLUMED is recognized without other settings. (CMake couldn't find libplumedKernel.so, though.)
      • Also, PLUMED_KERNEL env variable has no effect. It was removed.
  • CUDA 13.3 failed with type error on rism related codes. We thus employ 12.9u1 (12.9.1).
  • To avoid compilation error, pbsa.cuda was disabled for this time. Libtorch was also disabled.
  • Torchani was skipped this time, since there is little information available.
    • Additional software is required and that is not compatible with GPU?
  • Gcc15 (gcc-toolset/15) serial version failed on gem.pmemd tests. We thus employ gcc13 (gcc-toolset/13).
    • Only gcc13 & gcc15 (gcc-toolset) were tried.
  • (2026-Jun-24) installed as ambertools 26 update 1.
  • (2026-Jun-30) Since the symbolic link "miniconda/_conda" in the installation directory was a broken link, it was manually replaced with a symbolic link to "micromamba" in the same directory.