From bd60b44b7178139ca79ef2a97bb7da74fb9f5448 Mon Sep 17 00:00:00 2001 From: Raimondas Galvelis Date: Wed, 5 Aug 2020 17:50:39 +0200 Subject: [PATCH 1/3] Require C++14 to build with PyTorch 1.6 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a475a30..b27faf78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ FIND_PACKAGE(Torch REQUIRED) #LINK_DIRECTORIES("${TENSORFLOW_DIR}/lib") # Specify the C++ version we are building for. -SET (CMAKE_CXX_STANDARD 11) +SET (CMAKE_CXX_STANDARD 14) # Set flags for linking on mac IF(APPLE) From dadb543233cacdae94a507db6023fbae6bacd70c Mon Sep 17 00:00:00 2001 From: Raimondas Galvelis Date: Wed, 5 Aug 2020 17:59:02 +0200 Subject: [PATCH 2/3] Fix a race condition by explicity coping Torch forces --- platforms/cuda/src/CudaTorchKernels.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/cuda/src/CudaTorchKernels.cpp b/platforms/cuda/src/CudaTorchKernels.cpp index ea43cb38..89145abd 100644 --- a/platforms/cuda/src/CudaTorchKernels.cpp +++ b/platforms/cuda/src/CudaTorchKernels.cpp @@ -83,7 +83,7 @@ double CudaCalcTorchForceKernel::execute(ContextImpl& context, bool includeForce torch::Tensor energyTensor = module.forward(inputs).toTensor(); if (includeForces) { energyTensor.backward(); - torch::Tensor forceTensor = posTensor.grad(); + torch::Tensor forceTensor = posTensor.grad().clone(); cu.setAsCurrent(); void* data; if (cu.getUseDoublePrecision()) { From 5673ecd70aba99e11a2af0dedcbfc0225ac99b80 Mon Sep 17 00:00:00 2001 From: Raimondas Galvelis Date: Thu, 6 Aug 2020 11:57:26 +0200 Subject: [PATCH 3/3] Add a note about the tensor cloning --- platforms/cuda/src/CudaTorchKernels.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/platforms/cuda/src/CudaTorchKernels.cpp b/platforms/cuda/src/CudaTorchKernels.cpp index 89145abd..c0a891b5 100644 --- a/platforms/cuda/src/CudaTorchKernels.cpp +++ b/platforms/cuda/src/CudaTorchKernels.cpp @@ -83,6 +83,7 @@ double CudaCalcTorchForceKernel::execute(ContextImpl& context, bool includeForce torch::Tensor energyTensor = module.forward(inputs).toTensor(); if (includeForces) { energyTensor.backward(); + // Note: "forceTensor" needs to be cloned due to a shared context (https://github.com/openmm/openmm-torch/issues/13) torch::Tensor forceTensor = posTensor.grad().clone(); cu.setAsCurrent(); void* data;