Skip to content

Commit

Permalink
[libtorch] update to 2.1.2 (microsoft#36246)
Browse files Browse the repository at this point in the history
* [libtorch] update to 2.1.2

* adjust features and deps

* remove dep

* fix onnx case

* use system fxdiv

* update xnnpack

* fxdiv fix in libtorch

* add newline

* xnnpack does not install configs

* more patching

* fix patch

* more fixes

* use full lib for sleef.

* fix glog symbol on osx

* try fixing msvc ice

* ok renaming did nothing

* v db

* remove comments

* v db

* cuda is only for x64

* v db

* fix usage since cuda is still external to vcpkg

* v db

---------

Co-authored-by: Jim wang (BEYONDSOFT CONSULTING INC) <[email protected]>
  • Loading branch information
Neumann-A and jimwang118 authored Jan 30, 2024
1 parent 7233110 commit 20584b9
Show file tree
Hide file tree
Showing 32 changed files with 1,376 additions and 1,173 deletions.
47 changes: 47 additions & 0 deletions ports/libtorch/clang-cl.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
diff --git a/c10/util/Exception.h b/c10/util/Exception.h
index 2dd1001..b3f3d60 100644
--- a/c10/util/Exception.h
+++ b/c10/util/Exception.h
@@ -233,12 +233,16 @@ struct C10_API WarnAlways {
// IndexError when they cross to Python.
class C10_API IndexError : public Error {
using Error::Error;
+public:
+ inline IndexError(SourceLocation source_location, std::string msg) : Error(source_location,msg) {};
};

// Used in ATen for invalid values. These turn into
// ValueError when they cross to Python.
class C10_API ValueError : public Error {
using Error::Error;
+public:
+ inline ValueError(SourceLocation source_location, std::string msg) : Error(source_location,msg) {};
};

// Used in ATen for invalid types. These turn into
diff --git a/caffe2/CMakeLists.txt b/caffe2/CMakeLists.txt
index cf349c2..f7a595e 100644
--- a/caffe2/CMakeLists.txt
+++ b/caffe2/CMakeLists.txt
@@ -830,7 +830,7 @@ if(BUILD_CAFFE2 AND NOT MSVC)
target_compile_options(torch_cpu PRIVATE "-Wno-sign-compare")
endif()

-if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND NOT USE_VULKAN AND NOT USE_IOS AND NOT USE_PYTORCH_METAL AND NOT USE_COREML_DELEGATE)
+if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND NOT USE_VULKAN AND NOT USE_IOS AND NOT USE_PYTORCH_METAL AND NOT USE_COREML_DELEGATE AND NOT MSVC)
target_compile_options_if_supported(torch_cpu "-Wmissing-prototypes")
target_compile_options_if_supported(torch_cpu "-Werror=missing-prototypes")
get_target_property(TORCH_CPU_SOURCES torch_cpu SOURCES)
diff --git a/functorch/csrc/dim/arena.h b/functorch/csrc/dim/arena.h
index 3251321..cb09b7c 100644
--- a/functorch/csrc/dim/arena.h
+++ b/functorch/csrc/dim/arena.h
@@ -8,7 +8,7 @@
#include <ATen/ATen.h>
#include "minpybind.h"

-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__clang__)
#include <intrin.h>
// https://stackoverflow.com/questions/355967/how-to-use-msvc-intrinsics-to-get-the-equivalent-of-this-gcc-code
inline unsigned int __builtin_clz(unsigned int x) {
235 changes: 235 additions & 0 deletions ports/libtorch/cmake-fixes.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3a48eaf4e2..7b8bc7cb6e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1049,8 +1049,7 @@ if(USE_MIMALLOC)
set(MI_BUILD_OBJECT OFF)
set(MI_BUILD_TESTS OFF)
add_definitions(-DUSE_MIMALLOC)
- add_subdirectory(third_party/mimalloc)
- include_directories(third_party/mimalloc/include)
+ find_package(mimalloc REQUIRED)
endif()

# ---[ Main build
diff --git a/aten/src/ATen/native/quantized/cpu/qnnpack/CMakeLists.txt b/aten/src/ATen/native/quantized/cpu/qnnpack/CMakeLists.txt
index fd6b7ff551..d185233529 100644
--- a/aten/src/ATen/native/quantized/cpu/qnnpack/CMakeLists.txt
+++ b/aten/src/ATen/native/quantized/cpu/qnnpack/CMakeLists.txt
@@ -368,7 +368,7 @@ elseif(NOT TARGET pthreadpool AND USE_SYSTEM_PTHREADPOOL)
if(NOT PTHREADPOOL_LIBRARY)
message(FATAL_ERROR "Cannot find pthreadpool")
endif()
- message("-- Found pthreadpool: ${PTHREADPOOL_LIBRARY}")
+ message("-- Found pthreadpool cpu qnnpack: ${PTHREADPOOL_LIBRARY}")
set_target_properties(pthreadpool PROPERTIES
IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}")
add_library(pthreadpool_interface INTERFACE)
diff --git a/c10/CMakeLists.txt b/c10/CMakeLists.txt
index feebad7cbb..ad407e18cb 100644
--- a/c10/CMakeLists.txt
+++ b/c10/CMakeLists.txt
@@ -109,8 +109,7 @@ else()
endif()

if(USE_MIMALLOC)
- target_link_libraries(c10 PRIVATE "mimalloc-static")
- add_dependencies(c10 mimalloc-static)
+ target_link_libraries(c10 PRIVATE "mimalloc")
endif()

if(ANDROID)
diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
index c3abce52e4..cd27c728ff 100644
--- a/cmake/Dependencies.cmake
+++ b/cmake/Dependencies.cmake
@@ -285,7 +285,7 @@ endif()
set(AT_FFTW_ENABLED 0)
set(USE_FFTW OFF)
if(USE_FFTW OR NOT MKL_FOUND)
- find_library(LIBFFTW3 fftw3)
+ find_library(LIBFFTW3 NAMES fftw3 REQUIRED)
if(LIBFFTW3)
find_path(FFTW3_INCLUDE_DIR NAMES fftw3.h ONLY_CMAKE_FIND_ROOT_PATH)
if(FFTW3_INCLUDE_DIR)
@@ -415,8 +415,8 @@ if(INTERN_BUILD_MOBILE OR NOT DISABLE_NNPACK_AND_FAMILY)

if(NOT TARGET pthreadpool)
if(USE_SYSTEM_PTHREADPOOL)
- add_library(pthreadpool SHARED IMPORTED)
- find_library(PTHREADPOOL_LIBRARY pthreadpool)
+ add_library(pthreadpool UNKNOWN IMPORTED)
+ find_library(PTHREADPOOL_LIBRARY pthreadpool PATH_SUFFIXES lib)
set_property(TARGET pthreadpool PROPERTY IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}")
if(NOT PTHREADPOOL_LIBRARY)
message(FATAL_ERROR "Cannot find pthreadpool")
@@ -450,13 +450,15 @@ endif()

# ---[ Caffe2 uses cpuinfo library in the thread pool
if(NOT TARGET cpuinfo AND USE_SYSTEM_CPUINFO)
- add_library(cpuinfo SHARED IMPORTED)
- find_library(CPUINFO_LIBRARY cpuinfo)
+ add_library(cpuinfo UNKNOWN IMPORTED)
+ find_library(CPUINFO_LIBRARY NAMES cpuinfo REQUIRED)
+ find_library(CLOG_LIBRARY NAMES clog REQUIRED)
if(NOT CPUINFO_LIBRARY)
message(FATAL_ERROR "Cannot find cpuinfo")
endif()
message("Found cpuinfo: ${CPUINFO_LIBRARY}")
set_target_properties(cpuinfo PROPERTIES IMPORTED_LOCATION "${CPUINFO_LIBRARY}")
+ target_link_libraries(cpuinfo INTERFACE "${CLOG_LIBRARY}")
elseif(NOT TARGET cpuinfo)
if(NOT DEFINED CPUINFO_SOURCE_DIR)
set(CPUINFO_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../third_party/cpuinfo" CACHE STRING "cpuinfo source directory")
@@ -659,8 +661,8 @@ if(USE_XNNPACK AND NOT USE_SYSTEM_XNNPACK)
include_directories(SYSTEM ${XNNPACK_INCLUDE_DIR})
list(APPEND Caffe2_DEPENDENCY_LIBS XNNPACK)
elseif(NOT TARGET XNNPACK AND USE_SYSTEM_XNNPACK)
- add_library(XNNPACK SHARED IMPORTED)
- find_library(XNNPACK_LIBRARY XNNPACK)
+ add_library(XNNPACK UNKNOWN IMPORTED)
+ find_library(XNNPACK_LIBRARY NAMES XNNPACK REQUIRED)
set_property(TARGET XNNPACK PROPERTY IMPORTED_LOCATION "${XNNPACK_LIBRARY}")
if(NOT XNNPACK_LIBRARY)
message(FATAL_ERROR "Cannot find XNNPACK")
@@ -858,7 +860,7 @@ endif()

# ---[ LMDB
if(USE_LMDB)
- find_package(LMDB)
+ find_package(LMDB REQUIRED)
if(LMDB_FOUND)
include_directories(SYSTEM ${LMDB_INCLUDE_DIR})
list(APPEND Caffe2_DEPENDENCY_LIBS ${LMDB_LIBRARIES})
@@ -1002,8 +1004,9 @@ if(NOT TARGET fp16 AND NOT USE_SYSTEM_FP16)
"${FP16_SOURCE_DIR}"
"${CONFU_DEPENDENCIES_BINARY_DIR}/FP16")
elseif(NOT TARGET fp16 AND USE_SYSTEM_FP16)
- add_library(fp16 STATIC "/usr/include/fp16.h")
- set_target_properties(fp16 PROPERTIES LINKER_LANGUAGE C)
+ find_path(FP16_INCLUDE_DIR NAMES fp16.h PATH_SUFFIXES include)
+ add_library(fp16 INTERFACE)
+ target_include_directories(fp16 INTERFACE "${FP16_INCLUDE_DIR}")
endif()
list(APPEND Caffe2_DEPENDENCY_LIBS fp16)

@@ -1244,8 +1247,8 @@ endif(USE_LLVM)

# ---[ cuDNN
if(USE_CUDNN)
- set(CUDNN_FRONTEND_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/cudnn_frontend/include)
- target_include_directories(torch::cudnn INTERFACE ${CUDNN_FRONTEND_INCLUDE_DIR})
+ find_package(CUDNN REQUIRED)
+ target_include_directories(torch::cudnn INTERFACE "${CUDNN_INCLUDE_DIR}")
endif()

# ---[ HIP
@@ -1555,7 +1558,10 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
set_target_properties(onnx_proto PROPERTIES CXX_STANDARD 17)
endif()
endif()
- add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/foxi EXCLUDE_FROM_ALL)
+
+ # setup foxi
+ find_library(FOXI_LOADER_LIBPATH NAMES foxi_loader REQUIRED)
+ list(APPEND Caffe2_DEPENDENCY_LIBS "${FOXI_LOADER_LIBPATH}")

add_definitions(-DONNX_NAMESPACE=${ONNX_NAMESPACE})
if(NOT USE_SYSTEM_ONNX)
@@ -1573,14 +1579,14 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
target_compile_options(onnx PRIVATE -Wno-deprecated-declarations)
endif()
else()
- add_library(onnx SHARED IMPORTED)
- find_library(ONNX_LIBRARY onnx)
+ add_library(onnx UNKNOWN IMPORTED)
+ find_library(ONNX_LIBRARY NAMES onnx REQUIRED)
if(NOT ONNX_LIBRARY)
message(FATAL_ERROR "Cannot find onnx")
endif()
set_property(TARGET onnx PROPERTY IMPORTED_LOCATION ${ONNX_LIBRARY})
- add_library(onnx_proto SHARED IMPORTED)
- find_library(ONNX_PROTO_LIBRARY onnx_proto)
+ add_library(onnx_proto UNKNOWN IMPORTED)
+ find_library(ONNX_PROTO_LIBRARY NAMES onnx_proto REQUIRED)
if(NOT ONNX_PROTO_LIBRARY)
message(FATAL_ERROR "Cannot find onnx")
endif()
@@ -1589,7 +1595,7 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx)
endif()
include_directories(${FOXI_INCLUDE_DIRS})
- list(APPEND Caffe2_DEPENDENCY_LIBS foxi_loader)
+ list(APPEND Caffe2_DEPENDENCY_LIBS "${FOXI_LOADER_LIBPATH}")
# Recover the build shared libs option.
set(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS})
endif()
@@ -1834,8 +1840,8 @@ endif()
#
set(TEMP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libs" FORCE)
-add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/fmt)
-
+#add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/fmt)
+find_package(fmt REQUIRED)
# Disable compiler feature checks for `fmt`.
#
# CMake compiles a little program to check compiler features. Some of our build
@@ -1843,7 +1849,6 @@ add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/fmt)
# CMAKE_CXX_FLAGS in ways that break feature checks. Since we already know
# `fmt` is compatible with a superset of the compilers that PyTorch is, it
# shouldn't be too bad to just disable the checks.
-set_target_properties(fmt-header-only PROPERTIES INTERFACE_COMPILE_FEATURES "")

list(APPEND Caffe2_DEPENDENCY_LIBS fmt::fmt-header-only)
set(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libs" FORCE)
diff --git a/cmake/Modules/FindLMDB.cmake b/cmake/Modules/FindLMDB.cmake
index 2f0adb1b6d..8a817fd6f1 100644
--- a/cmake/Modules/FindLMDB.cmake
+++ b/cmake/Modules/FindLMDB.cmake
@@ -12,12 +12,8 @@
# Copyright 2013 Conrad Steenberg <[email protected]>
# Aug 31, 2013

-if(MSVC)
- find_package(LMDB NO_MODULE)
-else()
- find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS "$ENV{LMDB_DIR}/include")
- find_library(LMDB_LIBRARIES NAMES lmdb PATHS "$ENV{LMDB_DIR}/lib" )
-endif()
+find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS "$ENV{LMDB_DIR}/include")
+find_library(LMDB_LIBRARIES NAMES lmdb PATHS "$ENV{LMDB_DIR}/lib" )

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LMDB DEFAULT_MSG LMDB_INCLUDE_DIR LMDB_LIBRARIES)
diff --git a/cmake/public/cuda.cmake b/cmake/public/cuda.cmake
index 32f3ba375b..411293794f 100644
--- a/cmake/public/cuda.cmake
+++ b/cmake/public/cuda.cmake
@@ -67,8 +67,8 @@ if(NOT CMAKE_CUDA_COMPILER_VERSION STREQUAL CUDAToolkit_VERSION OR
"V${CUDAToolkit_VERSION} in '${CUDAToolkit_INCLUDE_DIR}'")
endif()

-if(NOT TARGET CUDA::nvToolsExt)
- message(FATAL_ERROR "Failed to find nvToolsExt")
+if(NOT TARGET CUDA::nvToolsExt AND TARGET CUDA::nvtx3)
+ add_library(CUDA::nvToolsExt ALIAS CUDA::nvtx3)
endif()

message(STATUS "Caffe2: CUDA detected: " ${CUDA_VERSION})
diff --git a/cmake/public/utils.cmake b/cmake/public/utils.cmake
index 4d48c0f0f3..ebdd39a7fd 100644
--- a/cmake/public/utils.cmake
+++ b/cmake/public/utils.cmake
@@ -185,9 +185,9 @@ endfunction()
macro(caffe2_update_option variable value)
if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO)
get_property(__help_string CACHE ${variable} PROPERTY HELPSTRING)
- set(${variable} ${value} CACHE BOOL ${__help_string} FORCE)
+ set("${variable}" "${value}" CACHE BOOL "${__help_string}" FORCE)
else()
- set(${variable} ${value})
+ set("${variable}" "${value}")
endif()
endmacro()

61 changes: 61 additions & 0 deletions ports/libtorch/cuda-adjustments.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
diff --git a/cmake/Modules_CUDA_fix/upstream/FindCUDA/run_nvcc.cmake b/cmake/Modules_CUDA_fix/upstream/FindCUDA/run_nvcc.cmake
index 9293df3..11bc4bf 100644
--- a/cmake/Modules_CUDA_fix/upstream/FindCUDA/run_nvcc.cmake
+++ b/cmake/Modules_CUDA_fix/upstream/FindCUDA/run_nvcc.cmake
@@ -126,11 +126,11 @@ list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}})
# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority
list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 )
list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 )
-if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
+if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER AND 0)
if (CUDA_HOST_COMPILER STREQUAL "@_CUDA_MSVC_HOST_COMPILER@" AND DEFINED CCBIN)
- set(CCBIN -ccbin "${CCBIN}")
+ #set(CCBIN -ccbin "${CCBIN}")
else()
- set(CCBIN -ccbin "${CUDA_HOST_COMPILER}")
+ #set(CCBIN -ccbin "${CUDA_HOST_COMPILER}")
endif()
endif()

diff --git a/cmake/Modules_CUDA_fix/upstream/FindCUDA/select_compute_arch.cmake b/cmake/Modules_CUDA_fix/upstream/FindCUDA/select_compute_arch.cmake
index d917738..8f832fe 100644
--- a/cmake/Modules_CUDA_fix/upstream/FindCUDA/select_compute_arch.cmake
+++ b/cmake/Modules_CUDA_fix/upstream/FindCUDA/select_compute_arch.cmake
@@ -30,7 +30,7 @@ endif()
set(CUDA_KNOWN_GPU_ARCHITECTURES "Kepler" "Maxwell")

# This list will be used for CUDA_ARCH_NAME = Common option (enabled by default)
-set(CUDA_COMMON_GPU_ARCHITECTURES "3.5" "5.0")
+# set(CUDA_COMMON_GPU_ARCHITECTURES "3.5" "5.0")

# This list is used to filter CUDA archs when autodetecting
set(CUDA_ALL_GPU_ARCHITECTURES "3.5" "5.0")
diff --git a/cmake/Modules_CUDA_fix/upstream/FindCUDA.cmake b/cmake/Modules_CUDA_fix/upstream/FindCUDA.cmake
index 420ee63..f029b66 100644
--- a/cmake/Modules_CUDA_fix/upstream/FindCUDA.cmake
+++ b/cmake/Modules_CUDA_fix/upstream/FindCUDA.cmake
@@ -1694,9 +1694,9 @@ function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
# Match VERBATIM check below.
if(CUDA_HOST_COMPILER MATCHES "\\$\\(VCInstallDir\\)")
- list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
+ #list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
else()
- list(APPEND nvcc_flags -ccbin "${CUDA_HOST_COMPILER}")
+ #list(APPEND nvcc_flags -ccbin "${CUDA_HOST_COMPILER}")
endif()
endif()

diff --git a/cmake/public/cuda.cmake b/cmake/public/cuda.cmake
index 4112937..3e1af83 100644
--- a/cmake/public/cuda.cmake
+++ b/cmake/public/cuda.cmake
@@ -42,7 +42,7 @@ set(CUDAToolkit_ROOT "${CUDA_TOOLKIT_ROOT_DIR}")
# Must be done before CUDA language is enabled, see
# https://cmake.org/cmake/help/v3.15/variable/CMAKE_CUDA_HOST_COMPILER.html
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
- set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}")
+ #set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}")
endif()
enable_language(CUDA)
if("X${CMAKE_CUDA_STANDARD}" STREQUAL "X" )
39 changes: 39 additions & 0 deletions ports/libtorch/fix-api-export.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
diff --git a/aten/src/ATen/Context.h b/aten/src/ATen/Context.h
index 285c6f7..1040acc 100644
--- a/aten/src/ATen/Context.h
+++ b/aten/src/ATen/Context.h
@@ -28,7 +28,7 @@ namespace at {

class Tensor;

-enum class TORCH_API Float32MatmulPrecision { HIGHEST, HIGH, MEDIUM };
+enum class Float32MatmulPrecision { HIGHEST, HIGH, MEDIUM };

class TORCH_API Context {
public:
diff --git a/aten/src/ATen/core/function_schema.h b/aten/src/ATen/core/function_schema.h
index c48e9b0..cd8d4dd 100644
--- a/aten/src/ATen/core/function_schema.h
+++ b/aten/src/ATen/core/function_schema.h
@@ -206,7 +206,7 @@ inline bool operator!=(const Argument& lhs, const Argument& rhs) {
return !(lhs == rhs);
}

-enum struct TORCH_API SchemaArgType { input, output };
+enum struct SchemaArgType { input, output };

/**
* struct SchemaArgument
diff --git a/torch/csrc/jit/runtime/static/native_ops.cpp b/torch/csrc/jit/runtime/static/native_ops.cpp
index 7f3cbcf..fe80ab1 100644
--- a/torch/csrc/jit/runtime/static/native_ops.cpp
+++ b/torch/csrc/jit/runtime/static/native_ops.cpp
@@ -1055,7 +1055,7 @@ namespace {
execution is completed, future is marked as complete to
indicate aten::wait() to proceed
*/
-class TORCH_API ForkedSubgraphSRLauncher {
+class ForkedSubgraphSRLauncher {
public:
ForkedSubgraphSRLauncher(
std::shared_ptr<StaticModule> smodule,
Loading

0 comments on commit 20584b9

Please sign in to comment.