Fix static linking cuDNN without static CUDA (#28378)

Summary:
Fixes https://github.com/pytorch/pytorch/pull/27887#issuecomment-544649765

The logs show that `USE_STATIC_CUDNN` is used but not `CAFFE2_STATIC_LINK_CUDA`.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/28378

Differential Revision: D18061841

Pulled By: ezyang

fbshipit-source-id: 3b9b49953094e02f808ff12107ba4226688d9986
This commit is contained in:
Peter Bell 2019-10-22 10:06:31 -07:00 committed by Facebook Github Bot
parent 682da8eb43
commit 03d24dba6c
3 changed files with 20 additions and 24 deletions

View File

@ -898,29 +898,18 @@ if(USE_CUDA)
# A helper variable recording the list of Caffe2 dependent libraries
# torch::cudart is dealt with separately, due to CUDA_ADD_LIBRARY
# design reason (it adds CUDA_LIBRARIES itself).
set(Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS caffe2::cufft caffe2::curand)
set(Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS
caffe2::cufft caffe2::curand caffe2::cublas)
if(CAFFE2_USE_NVRTC)
list(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS caffe2::cuda caffe2::nvrtc)
else()
caffe2_update_option(USE_NVRTC OFF)
endif()
if(CAFFE2_USE_CUDNN)
IF(CUDNN_STATIC)
LIST(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS
caffe2::cudnn "${CUDA_TOOLKIT_ROOT_DIR}/lib64/libculibos.a" "dl")
ELSE()
list(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS caffe2::cudnn)
ENDIF()
else()
caffe2_update_option(USE_CUDNN OFF)
endif()
if(CAFFE2_STATIC_LINK_CUDA)
# When statically linking, this must be the order of the libraries
LIST(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libculibos.a" caffe2::cublas)
else()
LIST(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS caffe2::cublas)
endif()
if(CAFFE2_USE_TENSORRT)
list(APPEND Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS caffe2::tensorrt)
else()

View File

@ -192,9 +192,10 @@ set_property(
# library.
add_library(torch::cudart INTERFACE IMPORTED)
if(CAFFE2_STATIC_LINK_CUDA)
set_property(
TARGET torch::cudart PROPERTY INTERFACE_LINK_LIBRARIES
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libcudart_static.a" rt dl)
target_link_libraries(torch::cudart INTERFACE "${CUDA_cudart_static_LIBRARY}")
if (NOT WIN32)
target_link_libraries(torch::cudart INTERFACE rt dl)
endif()
else()
set_property(
TARGET torch::cudart PROPERTY INTERFACE_LINK_LIBRARIES
@ -214,14 +215,20 @@ if(CAFFE2_USE_CUDNN)
set_property(
TARGET caffe2::cudnn PROPERTY INTERFACE_INCLUDE_DIRECTORIES
${CUDNN_INCLUDE_PATH})
if(CUDNN_STATIC AND NOT WIN32)
target_link_libraries(caffe2::cudnn INTERFACE
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libculibos.a" dl)
endif()
endif()
# curand
add_library(caffe2::curand UNKNOWN IMPORTED)
if(CAFFE2_STATIC_LINK_CUDA)
if(CAFFE2_STATIC_LINK_CUDA AND NOT WIN32)
set_property(
TARGET caffe2::curand PROPERTY IMPORTED_LOCATION
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libcurand_static.a")
target_link_libraries(caffe2::curand INTERFACE
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libculibos.a" dl)
else()
set_property(
TARGET caffe2::curand PROPERTY IMPORTED_LOCATION
@ -234,10 +241,10 @@ set_property(
# cufft. CUDA_CUFFT_LIBRARIES is actually a list, so we will make an
# interface library similar to cudart.
add_library(caffe2::cufft INTERFACE IMPORTED)
if(CAFFE2_STATIC_LINK_CUDA)
set_property(
TARGET caffe2::cufft PROPERTY INTERFACE_LINK_LIBRARIES
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libcufft_static.a")
if(CAFFE2_STATIC_LINK_CUDA AND NOT WIN32)
target_link_libraries(caffe2::cufft INTERFACE
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libcufft_static.a"
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libculibos.a" dl)
else()
set_property(
TARGET caffe2::cufft PROPERTY INTERFACE_LINK_LIBRARIES
@ -261,7 +268,7 @@ endif()
# cublas. CUDA_CUBLAS_LIBRARIES is actually a list, so we will make an
# interface library similar to cudart.
add_library(caffe2::cublas INTERFACE IMPORTED)
if(CAFFE2_STATIC_LINK_CUDA)
if(CAFFE2_STATIC_LINK_CUDA AND NOT WIN32)
set_property(
TARGET caffe2::cublas PROPERTY INTERFACE_LINK_LIBRARIES
"${CUDA_TOOLKIT_ROOT_DIR}/lib64/libcublas_static.a")

View File

@ -123,7 +123,6 @@ set(TORCH_PYTHON_INCLUDE_DIRECTORIES
${CMAKE_BINARY_DIR}/third_party
${CMAKE_BINARY_DIR}/third_party/onnx
${TORCH_ROOT}/third_party/build/nccl/include
${TORCH_ROOT}/third_party/gloo
${TORCH_ROOT}/third_party/onnx
${TORCH_ROOT}/third_party/pybind11/include
@ -249,6 +248,7 @@ if (USE_NCCL)
list(APPEND TORCH_PYTHON_SRCS
${TORCH_SRC_DIR}/csrc/cuda/python_nccl.cpp)
list(APPEND TORCH_PYTHON_COMPILE_DEFINITIONS USE_NCCL)
list(APPEND TORCH_PYTHON_LINK_LIBRARIES __caffe2_nccl)
endif()
# In the most recent CMake versions, a new 'TRANSFORM' subcommand of 'list' allows much of the boilerplate of defining the lists