Toolchain: Upgrade to DeePMD 3.0.1 and switch to PyTorch backend

This commit is contained in:
Ole Schütt 2025-01-25 11:52:52 +01:00 committed by Ole Schütt
parent 0e646805cf
commit e22027480b
7 changed files with 89 additions and 24 deletions

Binary file not shown.

BIN
data/DeePMD/water_dpa2.pth Normal file

Binary file not shown.

View file

@ -15,13 +15,16 @@
! **************************************************************************************************
MODULE deepmd_wrapper
USE ISO_C_BINDING, ONLY: C_CHAR,&
USE ISO_C_BINDING, ONLY: C_ASSOCIATED,&
C_CHAR,&
C_DOUBLE,&
C_F_POINTER,&
C_INT,&
C_NULL_CHAR,&
C_NULL_PTR,&
C_PTR
USE kinds, ONLY: dp
USE kinds, ONLY: default_string_length,&
dp
#include "./base/base_uses.f90"
IMPLICIT NONE
@ -41,12 +44,16 @@ CONTAINS
!> \return Pointer to the DP model.
! **************************************************************************************************
FUNCTION deepmd_model_load(filename) RESULT(model)
CHARACTER(len=*), INTENT(INOUT) :: filename
CHARACTER(len=*), INTENT(IN) :: filename
TYPE(deepmd_model_type) :: model
CHARACTER(LEN=*), PARAMETER :: routineN = 'deepmd_model_load'
INTEGER :: handle
CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(:), &
POINTER :: error_f_ptr
CHARACTER(LEN=default_string_length) :: error_str
INTEGER :: handle, i
TYPE(C_PTR) :: error_c_ptr
INTERFACE
FUNCTION NewDeepPot(filename) BIND(C, name="DP_NewDeepPot")
IMPORT :: C_PTR, C_CHAR
@ -54,15 +61,39 @@ CONTAINS
TYPE(C_PTR) :: NewDeepPot
END FUNCTION
END INTERFACE
INTERFACE
FUNCTION DeepPotCheckOK(model) BIND(C, name="DP_DeepPotCheckOK")
IMPORT :: C_PTR
TYPE(C_PTR), VALUE :: model
TYPE(C_PTR) :: DeepPotCheckOK
END FUNCTION DeepPotCheckOK
END INTERFACE
CALL timeset(routineN, handle)
#if defined(__DEEPMD)
CPASSERT(.NOT. C_ASSOCIATED(model%c_ptr))
model%c_ptr = NewDeepPot(filename=TRIM(filename)//C_NULL_CHAR)
CPASSERT(C_ASSOCIATED(model%c_ptr))
! Check for errors.
error_c_ptr = DeepPotCheckOK(model%c_ptr)
CPASSERT(C_ASSOCIATED(error_c_ptr))
CALL C_F_POINTER(error_c_ptr, error_f_ptr, shape=(/default_string_length/))
error_str = ""
DO i = 1, default_string_length
IF (error_f_ptr(i) == C_NULL_CHAR) EXIT
error_str(i:i) = error_f_ptr(i)
END DO
IF (LEN_TRIM(error_str) > 0) CPABORT(TRIM(error_str))
#else
CPABORT("CP2K was compiled without libdeepmd_c library.")
MARK_USED(filename)
MARK_USED(model)
MARK_USED(i)
MARK_USED(error_str)
MARK_USED(error_c_ptr)
MARK_USED(error_f_ptr)
#endif
CALL timestop(handle)
@ -117,6 +148,7 @@ CONTAINS
CALL timeset(routineN, handle)
#if defined(__DEEPMD)
CPASSERT(C_ASSOCIATED(model%c_ptr))
CALL DeepPotCompute(model=model%c_ptr, &
natom=natom, &
coord=coord, &
@ -151,7 +183,28 @@ CONTAINS
SUBROUTINE deepmd_model_release(model)
TYPE(deepmd_model_type) :: model
CHARACTER(LEN=*), PARAMETER :: routineN = 'deepmd_model_release'
INTEGER :: handle
INTERFACE
SUBROUTINE DeleteDeepPot(model) BIND(C, name="DP_DeleteDeepPot")
IMPORT :: C_PTR
TYPE(C_PTR), VALUE :: model
END SUBROUTINE DeleteDeepPot
END INTERFACE
CALL timeset(routineN, handle)
#if defined(__DEEPMD)
CPASSERT(C_ASSOCIATED(model%c_ptr))
CALL DeleteDeepPot(model%c_ptr)
model%c_ptr = C_NULL_PTR
#else
CPABORT("CP2K was compiled without libdeepmd_c library.")
MARK_USED(model)
#endif
CALL timestop(handle)
END SUBROUTINE deepmd_model_release
END MODULE deepmd_wrapper

View file

@ -1,2 +1,2 @@
# Test of DeePMD using libdeepmd_c https://docs.deepmodeling.com/projects/deepmd/en/master/install/install-from-c-library.html
DeePMD_W.inp 11 1.0E-6 -3.760691212989066
deepmd_water.inp 11 1.0E-6 -17.266752586704772

View file

@ -1,5 +1,5 @@
&GLOBAL
PROJECT W
PROJECT deepmd_water
RUN_TYPE ENERGY_FORCE
&PRINT DEBUG
&END PRINT
@ -11,9 +11,10 @@
&FORCEFIELD
&NONBONDED
&DEEPMD
ATOMS W
ATOMS_DEEPMD_TYPE 0
POT_FILE_NAME DeePMD/W.pb
ATOMS O H
ATOMS_DEEPMD_TYPE 0 1
! Copied from https://github.com/deepmodeling/deepmd-kit/blob/r3.0/examples/water/dpa2/frozen_model.pth
POT_FILE_NAME DeePMD/water_dpa2.pth
&END DEEPMD
&END NONBONDED
&END FORCEFIELD
@ -29,17 +30,12 @@
&END PRINT
&SUBSYS
&CELL
ABC 5.06227038 5.06227038 5.06227038
ABC 10.0 10.0 10.0
&END CELL
&COORD
W 1.2656 0.0000 2.5311
W 3.7967 0.0000 2.5311
W 0.0000 2.5311 1.2656
W 0.0000 2.5311 3.7967
W 2.5311 3.7967 0.0000
W 2.5311 1.2656 0.0000
W 0.0000 0.0000 0.0000
W 2.5311 2.5311 2.5311
O 8.973310 7.488240 7.183015
H 8.017530 7.477070 7.328865
H 9.347810 7.444760 8.067115
&END COORD
&TOPOLOGY
&END TOPOLOGY

View file

@ -836,6 +836,10 @@ if [ "${with_plumed}" = "__INSTALL__" ]; then
[ "${with_fftw}" = "__DONTUSE__" ] && with_fftw="__INSTALL__"
fi
if [ "${with_deepmd}" = "__INSTALL__" ]; then
[ "${with_libtorch}" = "__DONTUSE__" ] && with_libtorch="__INSTALL__"
fi
# ------------------------------------------------------------------------
# Preliminaries
# ------------------------------------------------------------------------

View file

@ -6,9 +6,9 @@
[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)"
deepmd_ver="2.2.7"
deepmd_pkg="libdeepmd_c-${deepmd_ver}.tar.gz"
deepmd_sha256="605bbb0c3bcc847ecbfe7326bac9ff4cac5690accc8083122e3735290bb923ae"
deepmd_ver="3.0.1"
deepmd_pkg="deepmd-kit-${deepmd_ver}.tar.gz"
deepmd_sha256="e842edbc2714bc948ce708c411e5fed751e67c88d5c493c2978f11c849027dca"
# shellcheck source=/dev/null
source "${SCRIPT_DIR}"/common_vars.sh
@ -28,7 +28,7 @@ cd "${BUILDDIR}"
case "$with_deepmd" in
__INSTALL__)
echo "==================== Installing DeePMD ===================="
pkg_install_dir="${INSTALLDIR}/libdeepmd_c-${deepmd_ver}"
pkg_install_dir="${INSTALLDIR}/deepmd-kit-${deepmd_ver}"
install_lock_file="${pkg_install_dir}/install_successful"
deepmd_root="${pkg_install_dir}"
if verify_checksums "${install_lock_file}"; then
@ -39,10 +39,22 @@ case "$with_deepmd" in
else
download_pkg_from_cp2k_org "${deepmd_sha256}" "${deepmd_pkg}"
fi
[ -d libdeepmd_c ] && rm -rf libdeepmd_c
[ -d deepmd-kit-${deepmd_ver} ] && rm -rf deepmd-kit-${deepmd_ver}
echo "Installing from scratch into ${pkg_install_dir}"
tar -xzf ${deepmd_pkg}
mv libdeepmd_c ${pkg_install_dir}
cd deepmd-kit-${deepmd_ver}/source
# Workaround for https://github.com/deepmodeling/deepmd-kit/issues/4569
sed -i /CXX_STANDARD/d CMakeLists.txt
mkdir build
cd build
cmake \
-DENABLE_PYTORCH=TRUE \
-DCMAKE_INSTALL_PREFIX="${pkg_install_dir}" \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD_REQUIRED=TRUE \
.. > cmake.log 2>&1 || tail -n ${LOG_LINES} cmake.log
make -j deepmd_c > make.log 2>&1 || tail -n ${LOG_LINES} make.log
make install > install.log 2>&1 || tail -n ${LOG_LINES} install.log
write_checksums "${install_lock_file}" "${SCRIPT_DIR}/stage6/$(basename ${SCRIPT_NAME})"
fi
DEEPMD_DFLAGS="-D__DEEPMD"