mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-21 06:25:15 -04:00
Toolchain: Upgrade to DeePMD 3.0.1 and switch to PyTorch backend
This commit is contained in:
parent
0e646805cf
commit
e22027480b
7 changed files with 89 additions and 24 deletions
BIN
data/DeePMD/W.pb
BIN
data/DeePMD/W.pb
Binary file not shown.
BIN
data/DeePMD/water_dpa2.pth
Normal file
BIN
data/DeePMD/water_dpa2.pth
Normal file
Binary file not shown.
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
# ------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue