PMEMD 26 (update 2)

ウェブページ

http://ambermd.org/

バージョン

PMEMD 26 (update 2)

ビルド環境

  • 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

ビルドに必要なファイル

  • pmemd26.tar.bz2

ビルド手順

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

テスト(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 ../

テスト結果

ログは /apl/pmemd/26u2/logs 以下にあります。

軽微な数値誤差以外でエラー/possible FAILUREとなったテストは以下のものです。

  • /test/cuda/rxsgld/trpcage (parallel test) => エラー
    • Error in group input::atommask.f::pop_evalstack
  • test/cuda/gti/reservoirs/atom_mapping rem.log => possible FAILURE
    • 出力フォーマットの変更が原因と思われる(reference は AMBER 24 のもの)
  • test/cuda/gb_ala3 irest1_ntt2_igb1_ntc2.out => possible FAILURE
    • vrand 発生(step=5)後の挙動が違っている。(reference は AMBER 14 のもの)
  • test/cuda/4096wat mdout.vrand => possible FAILURE
    • 同上 (reference は AMBER 16 のもの)
  • test/cuda/4096wat_oct test/cuda/4096wat_oct => possible FAILURE
    • 同上 (reference は AMBER 16 のもの)
  • test/cuda/RAMD mdout.ramd => possible FAILURE
    • RAMD の出力フォーマット変更が原因と思われる(reference は AMBER 20 のもの)

メモ

  • AmberTools26 と同じ設定でビルドしています。
    • ambertools と pmemd は共存可能だと思われますが、別々のパッケージとしてビルドしています。
  • (2026/6/30) pmemd 26u2 として導入
  • (2026/6/30) インストールディレクトリの miniconda/_conda がリンク切れだったため、同じディレクトリにある micromamba へのシンボリックリンクに手動で置き直しました。