PMEMD 26 (update 2)
ウェブページ
バージョン
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}/pmemd26PLUMED_ROOT=/apl/plumed/2.10.0/gcc13/ompi
PARALLEL=16
#-----------------------------------------------------------------------
export LANG=C
export LC_ALL=C
ulimit -s unlimitedmodule -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
fimkdir -p ${WORKDIR}
cd ${WORKDIR}
if [ -d pmemd${VERSION}_src ]; then
mv -f pmemd${VERSION}_src pmemd_erase
rm -rf pmemd_erase &
fitar xf ${TARBALL}
cd pmemd${VERSION}_srcsed -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_PATHOMPI_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=^openibexport 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 ^openibsetenv 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}/pmemd26PLUMED_ROOT=/apl/plumed/2.10.0/gcc13/ompi
PARALLEL=16
#-----------------------------------------------------------------------
export LANG=C
export LC_ALL=C
ulimit -s unlimitedmodule -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 へのシンボリックリンクに手動で置き直しました。