PMEMD 26 (update 2)

Webpage

http://ambermd.org/

Version

PMEMD 26 (update 2)

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

Files Required

  • pmemd26.tar.bz2

Build Procedure

#!/bin/sh

VERSION=26

INSTALL_DIR=/apl/pmemd/26u2
BASEDIR=/home/users/${USER}/Software/pmemd/26
TARBALL=${BASEDIR}/pmemd${VERSION}.tar.bz2
WORKDIR=/gwork/users/${USER}/pmemd26

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 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 pmemd${VERSION}_src ]; then
 mv -f pmemd${VERSION}_src pmemd_erase
 rm -rf pmemd_erase &
fi

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

sed -i -e "1s/env python/env python3/" update_pmemd
./update_pmemd --update

# force allow cuda 12.9.1 (12.9u1)
sed -i -e "s/VERSION_LESS 12.9/VERSION_LESS 13.0/" cmake/CudaConfig.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 \
   -DPMEMD_ONLY=TRUE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cpu_serial

# ad hoc fix
sed -i -e "s|${WORKDIR}/pmemd${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 \
   -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_HOME} \
   -DUSE_CONDA_LIBS=TRUE \
   -DYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DPMEMD_ONLY=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 \
   -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_HOME} \
   -DPLUMED_ROOT=${PLUMED_ROOT} \
   -DUSE_CONDA_LIBS=TRUE \
   -DYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DPMEMD_ONLY=TRUE \
   -DCHECK_UPDATES=FALSE
make -j${PARALLEL} install
cd ../ && rm -rf build_cuda_mpi

# 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 \
   -DPLUMED_ROOT=${PLUMED_ROOT} \
   -DUSE_CONDA_LIBS=TRUE \
   -DYTHON_EXECUTABLE=${INSTALL_DIR}/miniconda/bin/python \
   -DPMEMD_ONLY=TRUE \
   -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}/pmemd${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, $PMEMDHOME 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.4procs; make clean; cd ../
export DO_PARALLEL="mpirun -np 8"
cd test; make test.parallel.8procs; make clean; cd ../
export DO_PARALLEL="mpirun -np 16"
cd test; make test.parallel.16procs; make clean; cd ../
unset DO_PARALLEL

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

Tests (GPU)

#!/bin/sh

VERSION=26

INSTALL_DIR=/apl/pmemd/26u2
BASEDIR=/home/users/${USER}/Software/pmemd/26
TARBALL=${BASEDIR}/pmemd${VERSION}.tar.bz2
WORKDIR=/gwork/users/${USER}/pmemd26

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 plumed/2.10.0-gcc13-ompi418

# run tests
cd ${INSTALL_DIR}
. ${INSTALL_DIR}/amber.sh
# now, $PMEMDHOME 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 Result

Log files can be found in /apl/pmemd/26u2/logs.

Following tests result in error or possible failure.

  • /test/cuda/rxsgld/trpcage (parallel test) => error
    • Error in group input::atommask.f::pop_evalstack
  • test/cuda/gti/reservoirs/atom_mapping rem.log => possible FAILURE
    • Probably due to a change in output format (reference from AMBER 24)
  • test/cuda/gb_ala3 irest1_ntt2_igb1_ntc2.out => possible FAILURE
    • Data after the first vrand step (step=5) is different. (reference from AMBER 14)
  • test/cuda/4096wat mdout.vrand => possible FAILURE
    • same issue as above (reference from AMBER 16)
  • test/cuda/4096wat_oct test/cuda/4096wat_oct => possible FAILURE
    • same issue as above (reference from AMBER 16)
  • test/cuda/RAMD mdout.ramd => possible FAILURE
    • Probably due to a change in RAMD output format. (reference from AMBER 20)

Notes

  • The same configuration as AmberTools26 is employed.
    • Although ambertools and pmemd may be able to coexist, they are built as separate packages.
  • (Jun 30, 2026) installed as pmemd 26u2.
  • (Jun 30, 2026) 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.