mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
[Split Build] Add option to create libtorch wheel and use it to build pytorch as a separate wheel (#126328)
Creates an option to just build the libtorch portion of pytorch such that we have the necessary .so files. Then it builds a torch package using the libtorch wheel. These options are enabled using ` BUILD_LIBTORCH_WHL` and `BUILD_PYTHON_ONLY`.
We run
```
BUILD_LIBTORCH_WHL=1 python setup.py install
python setup.py clean
BUILD_PYTHON_ONLY=1 python setup.py install
```
to produce
```
sahanp@devgpu086 ~/pytorch (detached HEAD|REBASE-i 3/5)> ls /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/torch/lib/ (pytorch-3.10)
libshm.so* libtorch_global_deps.so* libtorch_python.so*
sahanp@devgpu086 ~/pytorch (detached HEAD|REBASE-i 3/5)> ldd build/lib/libtorch_python.so (pytorch-3.10)
linux-vdso.so.1 (0x00007ffdc2d37000)
libtorch.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/libtorch/lib/libtorch.so (0x00007f539fe99000)
libshm.so => /home/sahanp/pytorch/build/lib/libshm.so (0x00007f539fe90000)
libcudnn.so.8 => /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn.so.8 (0x00007f539e800000)
libnvToolsExt.so.1 => /usr/local/cuda/lib64/libnvToolsExt.so.1 (0x00007f539e400000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f539e000000)
libm.so.6 => /lib64/libm.so.6 (0x00007f539fda5000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f539ebe5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f539dc00000)
/lib64/ld-linux-x86-64.so.2 (0x00007f539fea0000)
libtorch_cpu.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/libtorch/lib/libtorch_cpu.so (0x00007f5392400000)
libtorch_cuda.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/libtorch/lib/libtorch_cuda.so (0x00007f5380000000)
librt.so.1 => /lib64/librt.so.1 (0x00007f539fd9e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f539fd99000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f539fd94000)
libc10.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/libtorch/lib/libc10.so (0x00007f539eb07000)
libmkl_intel_lp64.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_intel_lp64.so.2 (0x00007f537ec00000)
libmkl_gnu_thread.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_gnu_thread.so.2 (0x00007f537ce00000)
libmkl_core.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_core.so.2 (0x00007f5378800000)
libomp.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/libomp.so (0x00007f539e707000)
libcupti.so.12 => /usr/local/cuda/lib64/libcupti.so.12 (0x00007f5377e00000)
libcudart.so.12 => /usr/local/cuda/lib64/libcudart.so.12 (0x00007f5377a00000)
libc10_cuda.so => /home/sahanp/.conda/envs/pytorch-3.10/lib/python3.10/site-packages/libtorch/lib/libc10_cuda.so (0x00007f539ea6a000)
libcusparse.so.12 => /usr/local/cuda/lib64/libcusparse.so.12 (0x00007f5368400000)
libcufft.so.11 => /usr/local/cuda/lib64/libcufft.so.11 (0x00007f535ee00000)
libcusolver.so.11 => /usr/local/cuda/lib64/libcusolver.so.11 (0x00007f534c800000)
libcurand.so.10 => /usr/local/cuda/lib64/libcurand.so.10 (0x00007f5346200000)
libcublas.so.12 => /usr/local/cuda/lib64/libcublas.so.12 (0x00007f533f800000)
libcublasLt.so.12 => /usr/local/cuda/lib64/libcublasLt.so.12 (0x00007f531e800000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f539ea63000)
libnvJitLink.so.12 => /usr/local/cuda/lib64/libnvJitLink.so.12 (0x00007f531b800000)
sahanp@devgpu086 ~/pytorch (detached HEAD|REBASE-i 3/5)> ldd build/lib/libtorch_global_deps.so (pytorch-3.10)
linux-vdso.so.1 (0x00007ffc265df000)
libmkl_intel_lp64.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_intel_lp64.so.2 (0x00007fa93fc00000)
libmkl_gnu_thread.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_gnu_thread.so.2 (0x00007fa93de00000)
libmkl_core.so.2 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libmkl_core.so.2 (0x00007fa939800000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa940f05000)
libcudart.so.12 => /usr/local/cuda/lib64/libcudart.so.12 (0x00007fa939400000)
libnvToolsExt.so.1 => /usr/local/cuda/lib64/libnvToolsExt.so.1 (0x00007fa939000000)
libgomp.so.1 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libgomp.so.1 (0x00007fa93fb07000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa938c00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa940efe000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa940ef9000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa940ff5000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa940ef2000)
libstdc++.so.6 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libstdc++.so.6 (0x00007fa93921d000)
libgcc_s.so.1 => /home/sahanp/.conda/envs/pytorch-3.10/lib/libgcc_s.so.1 (0x00007fa93faec000)
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/126328
Approved by: https://github.com/atalman
This commit is contained in:
parent
8090145936
commit
a25b28a753
995
CMakeLists.txt
995
CMakeLists.txt
File diff suppressed because it is too large
Load Diff
|
|
@ -12,120 +12,128 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
# protobuf header files, because protobuf header files will transitively force
|
# protobuf header files, because protobuf header files will transitively force
|
||||||
# one to link against a specific protobuf version.
|
# one to link against a specific protobuf version.
|
||||||
|
|
||||||
# ---[ Configure macro file.
|
if(BUILD_LIBTORCHLESS)
|
||||||
set(C10_USE_GFLAGS ${USE_GFLAGS}) # used in cmake_macros.h.in
|
find_library(C10_LIB c10 PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
set(C10_USE_GLOG ${USE_GLOG}) # used in cmake_macros.h.in
|
else()
|
||||||
set(C10_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) # used in cmake_macros.h.in
|
set(C10_LIB c10)
|
||||||
set(C10_USE_NUMA ${USE_NUMA})
|
|
||||||
set(C10_USE_MSVC_STATIC_RUNTIME ${CAFFE2_USE_MSVC_STATIC_RUNTIME})
|
|
||||||
set(C10_USE_ROCM_KERNEL_ASSERT ${USE_ROCM_KERNEL_ASSERT})
|
|
||||||
configure_file(
|
|
||||||
${CMAKE_CURRENT_LIST_DIR}/macros/cmake_macros.h.in
|
|
||||||
${CMAKE_BINARY_DIR}/c10/macros/cmake_macros.h)
|
|
||||||
|
|
||||||
# Note: if you want to add ANY dependency to the c10 library, make sure you
|
|
||||||
# check with the core PyTorch developers as the dependency will be
|
|
||||||
# transitively passed on to all libraries dependent on PyTorch.
|
|
||||||
file(GLOB C10_SRCS
|
|
||||||
*.cpp
|
|
||||||
core/*.cpp
|
|
||||||
core/impl/*.cpp
|
|
||||||
mobile/*.cpp
|
|
||||||
macros/*.cpp
|
|
||||||
util/*.cpp
|
|
||||||
)
|
|
||||||
file(GLOB C10_HEADERS
|
|
||||||
*.h
|
|
||||||
core/*.h
|
|
||||||
core/impl/*.h
|
|
||||||
mobile/*.h
|
|
||||||
macros/*.h
|
|
||||||
util/*.h
|
|
||||||
)
|
|
||||||
add_library(c10 ${C10_SRCS} ${C10_HEADERS})
|
|
||||||
target_compile_options_if_supported(c10 "-Wdeprecated")
|
|
||||||
if(HAVE_SOVERSION)
|
|
||||||
set_target_properties(c10 PROPERTIES
|
|
||||||
VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION})
|
|
||||||
endif()
|
|
||||||
# If building shared library, set dllimport/dllexport proper.
|
|
||||||
target_compile_options(c10 PRIVATE "-DC10_BUILD_MAIN_LIB")
|
|
||||||
# Enable hidden visibility if compiler supports it.
|
|
||||||
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
|
||||||
target_compile_options(c10 PRIVATE "-fvisibility=hidden")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(C10_USE_IWYU "Use include-what-you-use to clean up header inclusion" OFF)
|
# ---[ Configure macro file.
|
||||||
if(C10_USE_IWYU)
|
set(C10_USE_GFLAGS ${USE_GFLAGS}) # used in cmake_macros.h.in
|
||||||
find_program(iwyu NAMES include-what-you-use)
|
set(C10_USE_GLOG ${USE_GLOG}) # used in cmake_macros.h.in
|
||||||
if(iwyu)
|
set(C10_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) # used in cmake_macros.h.in
|
||||||
set(iwyu_cmd
|
set(C10_USE_NUMA ${USE_NUMA})
|
||||||
"include-what-you-use"
|
set(C10_USE_MSVC_STATIC_RUNTIME ${CAFFE2_USE_MSVC_STATIC_RUNTIME})
|
||||||
"-Xiwyu"
|
set(C10_USE_ROCM_KERNEL_ASSERT ${USE_ROCM_KERNEL_ASSERT})
|
||||||
"--transitive_includes_only"
|
configure_file(
|
||||||
"-Xiwyu"
|
${CMAKE_CURRENT_LIST_DIR}/macros/cmake_macros.h.in
|
||||||
"--no_fwd_decls"
|
${CMAKE_BINARY_DIR}/c10/macros/cmake_macros.h)
|
||||||
"-Xiwyu"
|
|
||||||
"--prefix_header_includes=keep"
|
# Note: if you want to add ANY dependency to the c10 library, make sure you
|
||||||
"-Xiwyu"
|
# check with the core PyTorch developers as the dependency will be
|
||||||
"--mapping_file=${CMAKE_CURRENT_LIST_DIR}/../tools/iwyu/all.imp"
|
# transitively passed on to all libraries dependent on PyTorch.
|
||||||
)
|
file(GLOB C10_SRCS
|
||||||
set_property(TARGET c10 PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_cmd})
|
*.cpp
|
||||||
|
core/*.cpp
|
||||||
|
core/impl/*.cpp
|
||||||
|
mobile/*.cpp
|
||||||
|
macros/*.cpp
|
||||||
|
util/*.cpp
|
||||||
|
)
|
||||||
|
file(GLOB C10_HEADERS
|
||||||
|
*.h
|
||||||
|
core/*.h
|
||||||
|
core/impl/*.h
|
||||||
|
mobile/*.h
|
||||||
|
macros/*.h
|
||||||
|
util/*.h
|
||||||
|
)
|
||||||
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
|
add_library(c10 ${C10_SRCS} ${C10_HEADERS})
|
||||||
|
target_compile_options_if_supported(c10 "-Wdeprecated")
|
||||||
|
if(HAVE_SOVERSION)
|
||||||
|
set_target_properties(c10 PROPERTIES
|
||||||
|
VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION})
|
||||||
|
endif()
|
||||||
|
# If building shared library, set dllimport/dllexport proper.
|
||||||
|
target_compile_options(c10 PRIVATE "-DC10_BUILD_MAIN_LIB")
|
||||||
|
# Enable hidden visibility if compiler supports it.
|
||||||
|
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
||||||
|
target_compile_options(c10 PRIVATE "-fvisibility=hidden")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WERROR)
|
option(C10_USE_IWYU "Use include-what-you-use to clean up header inclusion" OFF)
|
||||||
target_compile_options_if_supported(c10 PRIVATE "-Werror=sign-compare")
|
if(C10_USE_IWYU)
|
||||||
target_compile_options_if_supported(c10 PRIVATE "-Werror=shadow")
|
find_program(iwyu NAMES include-what-you-use)
|
||||||
endif()
|
if(iwyu)
|
||||||
|
set(iwyu_cmd
|
||||||
|
"include-what-you-use"
|
||||||
|
"-Xiwyu"
|
||||||
|
"--transitive_includes_only"
|
||||||
|
"-Xiwyu"
|
||||||
|
"--no_fwd_decls"
|
||||||
|
"-Xiwyu"
|
||||||
|
"--prefix_header_includes=keep"
|
||||||
|
"-Xiwyu"
|
||||||
|
"--mapping_file=${CMAKE_CURRENT_LIST_DIR}/../tools/iwyu/all.imp"
|
||||||
|
)
|
||||||
|
set_property(TARGET c10 PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_cmd})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# ---[ Dependency of c10
|
if(WERROR)
|
||||||
if(C10_USE_GFLAGS)
|
target_compile_options_if_supported(c10 PRIVATE "-Werror=sign-compare")
|
||||||
target_link_libraries(c10 PUBLIC gflags)
|
target_compile_options_if_supported(c10 PRIVATE "-Werror=shadow")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(C10_USE_GLOG)
|
# ---[ Dependency of c10
|
||||||
target_link_libraries(c10 PUBLIC glog::glog)
|
if(C10_USE_GFLAGS)
|
||||||
endif()
|
target_link_libraries(c10 PUBLIC gflags)
|
||||||
target_link_libraries(c10 PRIVATE fmt::fmt-header-only)
|
endif()
|
||||||
|
|
||||||
if(C10_USE_NUMA)
|
if(C10_USE_GLOG)
|
||||||
message(STATUS "NUMA paths:")
|
target_link_libraries(c10 PUBLIC glog::glog)
|
||||||
message(STATUS ${Numa_INCLUDE_DIR})
|
endif()
|
||||||
message(STATUS ${Numa_LIBRARIES})
|
target_link_libraries(c10 PRIVATE fmt::fmt-header-only)
|
||||||
target_include_directories(c10 PRIVATE ${Numa_INCLUDE_DIR})
|
|
||||||
target_link_libraries(c10 PRIVATE ${Numa_LIBRARIES})
|
|
||||||
else()
|
|
||||||
message(STATUS "don't use NUMA")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "s390x" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
|
if(C10_USE_NUMA)
|
||||||
target_link_libraries(c10 PRIVATE cpuinfo)
|
message(STATUS "NUMA paths:")
|
||||||
endif()
|
message(STATUS ${Numa_INCLUDE_DIR})
|
||||||
|
message(STATUS ${Numa_LIBRARIES})
|
||||||
|
target_include_directories(c10 PRIVATE ${Numa_INCLUDE_DIR})
|
||||||
|
target_link_libraries(c10 PRIVATE ${Numa_LIBRARIES})
|
||||||
|
else()
|
||||||
|
message(STATUS "don't use NUMA")
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(Backtrace)
|
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "s390x" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le")
|
||||||
if(Backtrace_FOUND)
|
target_link_libraries(c10 PRIVATE cpuinfo)
|
||||||
target_include_directories(c10 PRIVATE ${Backtrace_INCLUDE_DIRS})
|
endif()
|
||||||
target_link_libraries(c10 PRIVATE ${Backtrace_LIBRARIES})
|
|
||||||
target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=1)
|
|
||||||
else()
|
|
||||||
target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(USE_MIMALLOC)
|
find_package(Backtrace)
|
||||||
target_link_libraries(c10 PRIVATE "mimalloc-static")
|
if(Backtrace_FOUND)
|
||||||
add_dependencies(c10 mimalloc-static)
|
target_include_directories(c10 PRIVATE ${Backtrace_INCLUDE_DIRS})
|
||||||
endif()
|
target_link_libraries(c10 PRIVATE ${Backtrace_LIBRARIES})
|
||||||
|
target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=1)
|
||||||
|
else()
|
||||||
|
target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(ANDROID)
|
if(USE_MIMALLOC)
|
||||||
target_link_libraries(c10 PRIVATE log)
|
target_link_libraries(c10 PRIVATE "mimalloc-static")
|
||||||
endif()
|
add_dependencies(c10 mimalloc-static)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_include_directories(
|
if(ANDROID)
|
||||||
c10 PUBLIC
|
target_link_libraries(c10 PRIVATE log)
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
|
endif()
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
|
||||||
$<INSTALL_INTERFACE:include>)
|
target_include_directories(
|
||||||
|
c10 PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:include>)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
add_subdirectory(benchmark)
|
add_subdirectory(benchmark)
|
||||||
|
|
@ -144,11 +152,14 @@ if(USE_XPU)
|
||||||
add_subdirectory(xpu)
|
add_subdirectory(xpu)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ---[ Installation
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
# Note: for now, we will put all export path into one single Caffe2Targets group
|
# ---[ Installation
|
||||||
# to deal with the cmake deployment need. Inside the Caffe2Targets set, the
|
# Note: for now, we will put all export path into one single Caffe2Targets group
|
||||||
# individual libraries like libc10.so and libcaffe2.so are still self-contained.
|
# to deal with the cmake deployment need. Inside the Caffe2Targets set, the
|
||||||
install(TARGETS c10 EXPORT Caffe2Targets DESTINATION lib)
|
# individual libraries like libc10.so and libcaffe2.so are still self-contained.
|
||||||
|
install(TARGETS c10 EXPORT Caffe2Targets DESTINATION lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||||
DESTINATION include
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h")
|
FILES_MATCHING PATTERN "*.h")
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ if(BUILD_TEST)
|
||||||
get_filename_component(bench_file_name ${bench_src} NAME_WE)
|
get_filename_component(bench_file_name ${bench_src} NAME_WE)
|
||||||
set(bench_name "c10_${bench_file_name}")
|
set(bench_name "c10_${bench_file_name}")
|
||||||
add_executable(${bench_name} "${bench_src}")
|
add_executable(${bench_name} "${bench_src}")
|
||||||
target_link_libraries(${bench_name} c10 benchmark)
|
target_link_libraries(${bench_name} ${C10_LIB} benchmark)
|
||||||
if(INSTALL_TEST)
|
if(INSTALL_TEST)
|
||||||
install(TARGETS ${bench_name} DESTINATION test)
|
install(TARGETS ${bench_name} DESTINATION test)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,10 @@ configure_file(
|
||||||
${CMAKE_CURRENT_LIST_DIR}/impl/cuda_cmake_macros.h.in
|
${CMAKE_CURRENT_LIST_DIR}/impl/cuda_cmake_macros.h.in
|
||||||
${CMAKE_BINARY_DIR}/c10/cuda/impl/cuda_cmake_macros.h)
|
${CMAKE_BINARY_DIR}/c10/cuda/impl/cuda_cmake_macros.h)
|
||||||
|
|
||||||
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
find_library(C10_CUDA_LIB c10_cuda PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Note: if you want to add ANY dependency to the c10 library, make sure you
|
# Note: if you want to add ANY dependency to the c10 library, make sure you
|
||||||
# check with the core PyTorch developers as the dependency will be
|
# check with the core PyTorch developers as the dependency will be
|
||||||
# transitively passed on to all libraries dependent on PyTorch.
|
# transitively passed on to all libraries dependent on PyTorch.
|
||||||
|
|
@ -47,36 +51,42 @@ set(C10_CUDA_HEADERS
|
||||||
impl/CUDATest.h
|
impl/CUDATest.h
|
||||||
)
|
)
|
||||||
set(CUDA_LINK_LIBRARIES_KEYWORD PRIVATE)
|
set(CUDA_LINK_LIBRARIES_KEYWORD PRIVATE)
|
||||||
torch_cuda_based_add_library(c10_cuda ${C10_CUDA_SRCS} ${C10_CUDA_HEADERS})
|
|
||||||
set(CUDA_LINK_LIBRARIES_KEYWORD)
|
|
||||||
# If building shared library, set dllimport/dllexport proper.
|
|
||||||
target_compile_options(c10_cuda PRIVATE "-DC10_CUDA_BUILD_MAIN_LIB")
|
|
||||||
# Enable hidden visibility if compiler supports it.
|
|
||||||
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
|
||||||
target_compile_options(c10_cuda PRIVATE "-fvisibility=hidden")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ---[ Dependency of c10_cuda
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
target_link_libraries(c10_cuda PUBLIC c10 torch::cudart)
|
torch_cuda_based_add_library(c10_cuda ${C10_CUDA_SRCS} ${C10_CUDA_HEADERS})
|
||||||
|
set(CUDA_LINK_LIBRARIES_KEYWORD)
|
||||||
|
# If building shared library, set dllimport/dllexport proper.
|
||||||
|
target_compile_options(c10_cuda PRIVATE "-DC10_CUDA_BUILD_MAIN_LIB")
|
||||||
|
# Enable hidden visibility if compiler supports it.
|
||||||
|
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
||||||
|
target_compile_options(c10_cuda PRIVATE "-fvisibility=hidden")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT WIN32)
|
# ---[ Dependency of c10_cuda
|
||||||
target_link_libraries(c10_cuda PRIVATE dl)
|
target_link_libraries(c10_cuda PUBLIC ${C10_LIB} torch::cudart)
|
||||||
target_compile_options(c10_cuda PRIVATE "-DPYTORCH_C10_DRIVER_API_SUPPORTED")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(
|
if(NOT WIN32)
|
||||||
c10_cuda PUBLIC
|
target_link_libraries(c10_cuda PRIVATE dl)
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>
|
target_compile_options(c10_cuda PRIVATE "-DPYTORCH_C10_DRIVER_API_SUPPORTED")
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
endif()
|
||||||
$<INSTALL_INTERFACE:include>)
|
|
||||||
|
|
||||||
add_subdirectory(test)
|
target_include_directories(
|
||||||
|
c10_cuda PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:include>)
|
||||||
|
set(C10_CUDA_LIB c10_cuda)
|
||||||
|
|
||||||
# ---[ Installation
|
# ---[ Installation
|
||||||
# Note: for now, we will put all export path into one single Caffe2Targets group
|
# Note: for now, we will put all export path into one single Caffe2Targets group
|
||||||
# to deal with the cmake deployment need. Inside the Caffe2Targets set, the
|
# to deal with the cmake deployment need. Inside the Caffe2Targets set, the
|
||||||
# individual libraries like libc10.so and libcaffe2.so are still self-contained.
|
# individual libraries like libc10.so and libcaffe2.so are still self-contained.
|
||||||
install(TARGETS c10_cuda EXPORT Caffe2Targets DESTINATION lib)
|
install(TARGETS c10_cuda EXPORT Caffe2Targets DESTINATION lib)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(test)
|
||||||
|
|
||||||
foreach(file ${C10_CUDA_HEADERS})
|
foreach(file ${C10_CUDA_HEADERS})
|
||||||
get_filename_component( dir ${file} DIRECTORY )
|
get_filename_component( dir ${file} DIRECTORY )
|
||||||
install( FILES ${file} DESTINATION include/c10/cuda/${dir} )
|
install( FILES ${file} DESTINATION include/c10/cuda/${dir} )
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ if(BUILD_TEST)
|
||||||
get_filename_component(test_file_name ${test_src} NAME_WE)
|
get_filename_component(test_file_name ${test_src} NAME_WE)
|
||||||
set(test_name "c10_cuda_${test_file_name}")
|
set(test_name "c10_cuda_${test_file_name}")
|
||||||
add_executable(${test_name} "${test_src}")
|
add_executable(${test_name} "${test_src}")
|
||||||
target_link_libraries(${test_name} c10_cuda gtest_main)
|
target_link_libraries(${test_name} ${C10_CUDA_LIB} ${C10_LIB} gtest_main)
|
||||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||||
if(INSTALL_TEST)
|
if(INSTALL_TEST)
|
||||||
install(TARGETS ${test_name} DESTINATION test)
|
install(TARGETS ${test_name} DESTINATION test)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,10 @@
|
||||||
|
|
||||||
include(../../cmake/public/utils.cmake)
|
include(../../cmake/public/utils.cmake)
|
||||||
|
|
||||||
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
find_library(C10_HIP_LIB c10_hip PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ---[ Configure macro file.
|
# ---[ Configure macro file.
|
||||||
set(C10_HIP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) # used in cmake_macros.h.in
|
set(C10_HIP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) # used in cmake_macros.h.in
|
||||||
configure_file(
|
configure_file(
|
||||||
|
|
@ -26,36 +30,40 @@ file(GLOB __c10_hip_srcs_cpp *.cc impl/*.cc)
|
||||||
set_source_files_properties(${__c10_hip_srcs_cpp} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
|
set_source_files_properties(${__c10_hip_srcs_cpp} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
|
||||||
|
|
||||||
file(GLOB_RECURSE C10_HIP_HEADERS *.h)
|
file(GLOB_RECURSE C10_HIP_HEADERS *.h)
|
||||||
hip_add_library(c10_hip ${C10_HIP_SRCS} ${C10_HIP_HEADERS})
|
|
||||||
|
|
||||||
# Propagate HIP_CXX_FLAGS that were set from Dependencies.cmake
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
target_compile_options(c10_hip PRIVATE ${HIP_CXX_FLAGS})
|
hip_add_library(c10_hip ${C10_HIP_SRCS} ${C10_HIP_HEADERS})
|
||||||
|
|
||||||
# caffe2_hip adds a bunch of dependencies like rocsparse, but c10/hip is supposed to be
|
# Propagate HIP_CXX_FLAGS that were set from Dependencies.cmake
|
||||||
# minimal. I'm not sure if we need hip_hcc or not; for now leave it out
|
target_compile_options(c10_hip PRIVATE ${HIP_CXX_FLAGS})
|
||||||
|
|
||||||
# If building shared library, set dllimport/dllexport proper.
|
# caffe2_hip adds a bunch of dependencies like rocsparse, but c10/hip is supposed to be
|
||||||
target_compile_options(c10_hip PRIVATE "-DC10_HIP_BUILD_MAIN_LIB")
|
# minimal. I'm not sure if we need hip_hcc or not; for now leave it out
|
||||||
# Enable hidden visibility if compiler supports it.
|
|
||||||
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
# If building shared library, set dllimport/dllexport proper.
|
||||||
target_compile_options(c10_hip PRIVATE "-fvisibility=hidden")
|
target_compile_options(c10_hip PRIVATE "-DC10_HIP_BUILD_MAIN_LIB")
|
||||||
|
# Enable hidden visibility if compiler supports it.
|
||||||
|
if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY})
|
||||||
|
target_compile_options(c10_hip PRIVATE "-fvisibility=hidden")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ---[ Dependency of c10_hip
|
||||||
|
target_link_libraries(c10_hip PUBLIC c10)
|
||||||
|
|
||||||
|
target_link_libraries(c10_hip PUBLIC ${PYTORCH_HIP_LIBRARIES})
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
c10_hip PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:include>)
|
||||||
|
install(TARGETS c10_hip EXPORT Caffe2Targets DESTINATION lib)
|
||||||
|
set(C10_HIP_LIB c10_hip)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ---[ Dependency of c10_hip
|
|
||||||
target_link_libraries(c10_hip PUBLIC c10)
|
|
||||||
|
|
||||||
target_link_libraries(c10_hip PUBLIC ${PYTORCH_HIP_LIBRARIES})
|
|
||||||
|
|
||||||
target_include_directories(
|
|
||||||
c10_hip PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
|
||||||
$<INSTALL_INTERFACE:include>)
|
|
||||||
|
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
|
||||||
# ---[ Installation
|
# ---[ Installation
|
||||||
install(TARGETS c10_hip EXPORT Caffe2Targets DESTINATION lib)
|
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||||
DESTINATION include
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h")
|
FILES_MATCHING PATTERN "*.h")
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ if(BUILD_TEST)
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
target_compile_options(${test_name} PRIVATE -Wno-unused-variable)
|
target_compile_options(${test_name} PRIVATE -Wno-unused-variable)
|
||||||
endif()
|
endif()
|
||||||
target_link_libraries(${test_name} c10 gmock gtest gtest_main)
|
target_link_libraries(${test_name} ${C10_LIB} gmock gtest gtest_main)
|
||||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||||
if(INSTALL_TEST)
|
if(INSTALL_TEST)
|
||||||
install(TARGETS ${test_name} DESTINATION test)
|
install(TARGETS ${test_name} DESTINATION test)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@
|
||||||
|
|
||||||
include(../../cmake/public/xpu.cmake)
|
include(../../cmake/public/xpu.cmake)
|
||||||
|
|
||||||
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
|
find_library(C10_XPU_LIB c10_xpu PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(C10_XPU_SRCS
|
set(C10_XPU_SRCS
|
||||||
XPUCachingAllocator.cpp
|
XPUCachingAllocator.cpp
|
||||||
XPUFunctions.cpp
|
XPUFunctions.cpp
|
||||||
|
|
@ -19,7 +23,7 @@ set(C10_XPU_HEADERS
|
||||||
XPUStream.h
|
XPUStream.h
|
||||||
impl/XPUGuardImpl.h
|
impl/XPUGuardImpl.h
|
||||||
)
|
)
|
||||||
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
add_library(c10_xpu ${C10_XPU_SRCS} ${C10_XPU_HEADERS})
|
add_library(c10_xpu ${C10_XPU_SRCS} ${C10_XPU_HEADERS})
|
||||||
target_compile_options(c10_xpu PRIVATE "-DC10_XPU_BUILD_MAIN_LIB")
|
target_compile_options(c10_xpu PRIVATE "-DC10_XPU_BUILD_MAIN_LIB")
|
||||||
# Enable hidden visibility if compiler supports it.
|
# Enable hidden visibility if compiler supports it.
|
||||||
|
|
@ -35,11 +39,13 @@ target_include_directories(
|
||||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
install(TARGETS c10_xpu EXPORT Caffe2Targets DESTINATION lib)
|
||||||
add_subdirectory(test)
|
set(C10_XPU_LIB c10_xpu)
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ---[ Installation
|
# ---[ Installation
|
||||||
install(TARGETS c10_xpu EXPORT Caffe2Targets DESTINATION lib)
|
|
||||||
foreach(file ${C10_XPU_HEADERS})
|
foreach(file ${C10_XPU_HEADERS})
|
||||||
get_filename_component(dir ${file} DIRECTORY)
|
get_filename_component(dir ${file} DIRECTORY)
|
||||||
install(FILES ${file} DESTINATION include/c10/xpu/${dir})
|
install(FILES ${file} DESTINATION include/c10/xpu/${dir})
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ if(BUILD_TEST)
|
||||||
get_filename_component(test_file_name ${test_src} NAME_WE)
|
get_filename_component(test_file_name ${test_src} NAME_WE)
|
||||||
set(test_name "c10_xpu_${test_file_name}")
|
set(test_name "c10_xpu_${test_file_name}")
|
||||||
add_executable(${test_name} "${test_src}")
|
add_executable(${test_name} "${test_src}")
|
||||||
target_link_libraries(${test_name} c10_xpu gtest_main)
|
target_link_libraries(${test_name} ${C10_XPU_LIB} gtest_main)
|
||||||
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
add_test(NAME ${test_name} COMMAND $<TARGET_FILE:${test_name}>)
|
||||||
if(INSTALL_TEST)
|
if(INSTALL_TEST)
|
||||||
install(TARGETS ${test_name} DESTINATION test)
|
install(TARGETS ${test_name} DESTINATION test)
|
||||||
|
|
|
||||||
|
|
@ -785,6 +785,32 @@ set(Caffe2_CPU_SRCS ${Caffe2_CPU_SRCS_NON_AVX} ${Caffe2_CPU_SRCS_AVX2} ${Caffe2_
|
||||||
# END formerly-libtorch sources
|
# END formerly-libtorch sources
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
find_library(TORCH_LIB torch PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
find_library(TORCH_CPU_LIB torch_cpu PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
|
||||||
|
if(USE_CUDA)
|
||||||
|
find_library(TORCH_CUDA_LIB torch_cuda PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(USE_ROCM)
|
||||||
|
find_library(TORCH_HIP_LIB torch_hip PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(USE_XPU)
|
||||||
|
find_library(TORCH_XPU_LIB torch_xpu PATHS $ENV{LIBTORCH_LIB_PATH} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
add_subdirectory(../torch torch)
|
||||||
|
else()
|
||||||
|
set(TORCH_LIB torch)
|
||||||
|
set(TORCH_CPU_LIB torch_cpu)
|
||||||
|
set(TORCH_CUDA_LIB torch_cuda)
|
||||||
|
set(TORCH_HIP_LIB torch_hip)
|
||||||
|
set(TORCH_XPU_LIB torch_xpu)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
add_library(torch_cpu ${Caffe2_CPU_SRCS})
|
add_library(torch_cpu ${Caffe2_CPU_SRCS})
|
||||||
if(HAVE_SOVERSION)
|
if(HAVE_SOVERSION)
|
||||||
set_target_properties(torch_cpu PROPERTIES
|
set_target_properties(torch_cpu PROPERTIES
|
||||||
|
|
@ -1622,6 +1648,7 @@ endif()
|
||||||
# ---[ XPU library.
|
# ---[ XPU library.
|
||||||
if(USE_XPU)
|
if(USE_XPU)
|
||||||
target_link_libraries(torch_xpu INTERFACE torch::xpurt)
|
target_link_libraries(torch_xpu INTERFACE torch::xpurt)
|
||||||
|
|
||||||
target_link_libraries(torch_xpu PUBLIC c10_xpu)
|
target_link_libraries(torch_xpu PUBLIC c10_xpu)
|
||||||
|
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
|
|
@ -1701,6 +1728,7 @@ if(USE_ROCM)
|
||||||
|
|
||||||
# Since PyTorch files contain HIP headers, these flags are required for the necessary definitions to be added.
|
# Since PyTorch files contain HIP headers, these flags are required for the necessary definitions to be added.
|
||||||
target_compile_options(torch_hip PUBLIC ${HIP_CXX_FLAGS}) # experiment
|
target_compile_options(torch_hip PUBLIC ${HIP_CXX_FLAGS}) # experiment
|
||||||
|
|
||||||
target_link_libraries(torch_hip PUBLIC c10_hip)
|
target_link_libraries(torch_hip PUBLIC c10_hip)
|
||||||
|
|
||||||
if(NOT INTERN_BUILD_MOBILE)
|
if(NOT INTERN_BUILD_MOBILE)
|
||||||
|
|
@ -1921,6 +1949,7 @@ if(MSVC)
|
||||||
set_source_files_properties(${tmp_path} PROPERTIES COMPILE_FLAGS "-Xcompiler /Zc:lambda")
|
set_source_files_properties(${tmp_path} PROPERTIES COMPILE_FLAGS "-Xcompiler /Zc:lambda")
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Note: we only install the caffe2 python files if BUILD_CAFFE2_OPS is ON
|
# Note: we only install the caffe2 python files if BUILD_CAFFE2_OPS is ON
|
||||||
# This is because the build rules here written in such a way that they always
|
# This is because the build rules here written in such a way that they always
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,12 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE TORCH_API_INCLUDE_EXTENSION_H
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE ${TORCH_PYTHON_COMPILE_OPTIONS})
|
target_compile_options(${PROJECT_NAME} PRIVATE ${TORCH_PYTHON_COMPILE_OPTIONS})
|
||||||
target_compile_options_if_supported(${PROJECT_NAME} "-Wmissing-prototypes")
|
target_compile_options_if_supported(${PROJECT_NAME} "-Wmissing-prototypes")
|
||||||
target_compile_options_if_supported(${PROJECT_NAME} "-Werror=missing-prototypes")
|
target_compile_options_if_supported(${PROJECT_NAME} "-Werror=missing-prototypes")
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE torch torch_python)
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${TORCH_LIB} torch_python)
|
||||||
|
else()
|
||||||
|
# functorch cannot use the alias to build on windows
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE torch torch_python)
|
||||||
|
endif()
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE pybind::pybind11)
|
target_link_libraries(${PROJECT_NAME} PRIVATE pybind::pybind11)
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||||
|
|
|
||||||
115
setup.py
115
setup.py
|
|
@ -1,5 +1,4 @@
|
||||||
# Welcome to the PyTorch setup.py.
|
# Welcome to the PyTorch setup.py.
|
||||||
#
|
|
||||||
# Environment variables you are probably interested in:
|
# Environment variables you are probably interested in:
|
||||||
#
|
#
|
||||||
# DEBUG
|
# DEBUG
|
||||||
|
|
@ -199,7 +198,15 @@
|
||||||
#
|
#
|
||||||
# USE_PRIORITIZED_TEXT_FOR_LD
|
# USE_PRIORITIZED_TEXT_FOR_LD
|
||||||
# Uses prioritized text form cmake/prioritized_text.txt for LD
|
# Uses prioritized text form cmake/prioritized_text.txt for LD
|
||||||
|
#
|
||||||
|
# BUILD_LIBTORCH_WHL
|
||||||
|
# Builds libtorch.so and its dependencies as a wheel
|
||||||
|
#
|
||||||
|
# BUILD_PYTHON_ONLY
|
||||||
|
# Builds pytorch as a wheel using libtorch.so from a seperate wheel
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pkgutil
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if sys.platform == "win32" and sys.maxsize.bit_length() == 31:
|
if sys.platform == "win32" and sys.maxsize.bit_length() == 31:
|
||||||
|
|
@ -210,6 +217,34 @@ if sys.platform == "win32" and sys.maxsize.bit_length() == 31:
|
||||||
|
|
||||||
import platform
|
import platform
|
||||||
|
|
||||||
|
|
||||||
|
def _get_package_path(package_name):
|
||||||
|
loader = pkgutil.find_loader(package_name)
|
||||||
|
if loader:
|
||||||
|
# The package might be a namespace package, so get_data may fail
|
||||||
|
try:
|
||||||
|
file_path = loader.get_filename()
|
||||||
|
return os.path.dirname(file_path)
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
BUILD_LIBTORCH_WHL = os.getenv("BUILD_LIBTORCH_WHL", "0") == "1"
|
||||||
|
BUILD_PYTHON_ONLY = os.getenv("BUILD_PYTHON_ONLY", "0") == "1"
|
||||||
|
|
||||||
|
|
||||||
|
# set up appropriate env variables
|
||||||
|
if BUILD_LIBTORCH_WHL:
|
||||||
|
# Set up environment variables for ONLY building libtorch.so and not libtorch_python.so
|
||||||
|
# functorch is not supported without python
|
||||||
|
os.environ["BUILD_FUNCTORCH"] = "OFF"
|
||||||
|
|
||||||
|
|
||||||
|
if BUILD_PYTHON_ONLY:
|
||||||
|
os.environ["BUILD_LIBTORCHLESS"] = "ON"
|
||||||
|
os.environ["LIBTORCH_LIB_PATH"] = f"{_get_package_path('libtorch')}/lib"
|
||||||
|
|
||||||
python_min_version = (3, 8, 0)
|
python_min_version = (3, 8, 0)
|
||||||
python_min_version_str = ".".join(map(str, python_min_version))
|
python_min_version_str = ".".join(map(str, python_min_version))
|
||||||
if sys.version_info < python_min_version:
|
if sys.version_info < python_min_version:
|
||||||
|
|
@ -222,7 +257,6 @@ import filecmp
|
||||||
import glob
|
import glob
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
@ -314,7 +348,10 @@ cmake_python_include_dir = sysconfig.get_path("include")
|
||||||
################################################################################
|
################################################################################
|
||||||
# Version, create_version_file, and package_name
|
# Version, create_version_file, and package_name
|
||||||
################################################################################
|
################################################################################
|
||||||
package_name = os.getenv("TORCH_PACKAGE_NAME", "torch")
|
|
||||||
|
DEFAULT_PACKAGE_NAME = "libtorch" if BUILD_LIBTORCH_WHL else "torch"
|
||||||
|
|
||||||
|
package_name = os.getenv("TORCH_PACKAGE_NAME", DEFAULT_PACKAGE_NAME)
|
||||||
package_type = os.getenv("PACKAGE_TYPE", "wheel")
|
package_type = os.getenv("PACKAGE_TYPE", "wheel")
|
||||||
version = get_torch_version()
|
version = get_torch_version()
|
||||||
report(f"Building wheel {package_name}-{version}")
|
report(f"Building wheel {package_name}-{version}")
|
||||||
|
|
@ -437,11 +474,12 @@ def build_deps():
|
||||||
|
|
||||||
check_submodules()
|
check_submodules()
|
||||||
check_pydep("yaml", "pyyaml")
|
check_pydep("yaml", "pyyaml")
|
||||||
|
build_python = not BUILD_LIBTORCH_WHL
|
||||||
|
|
||||||
build_caffe2(
|
build_caffe2(
|
||||||
version=version,
|
version=version,
|
||||||
cmake_python_library=cmake_python_library,
|
cmake_python_library=cmake_python_library,
|
||||||
build_python=True,
|
build_python=build_python,
|
||||||
rerun_cmake=RERUN_CMAKE,
|
rerun_cmake=RERUN_CMAKE,
|
||||||
cmake_only=CMAKE_ONLY,
|
cmake_only=CMAKE_ONLY,
|
||||||
cmake=cmake,
|
cmake=cmake,
|
||||||
|
|
@ -698,6 +736,8 @@ class build_ext(setuptools.command.build_ext.build_ext):
|
||||||
"caffe2.python.caffe2_pybind11_state_gpu",
|
"caffe2.python.caffe2_pybind11_state_gpu",
|
||||||
"caffe2.python.caffe2_pybind11_state_hip",
|
"caffe2.python.caffe2_pybind11_state_hip",
|
||||||
]
|
]
|
||||||
|
if BUILD_LIBTORCH_WHL:
|
||||||
|
caffe2_pybind_exts = []
|
||||||
i = 0
|
i = 0
|
||||||
while i < len(self.extensions):
|
while i < len(self.extensions):
|
||||||
ext = self.extensions[i]
|
ext = self.extensions[i]
|
||||||
|
|
@ -929,9 +969,14 @@ def configure_extension_build():
|
||||||
|
|
||||||
main_compile_args = []
|
main_compile_args = []
|
||||||
main_libraries = ["torch_python"]
|
main_libraries = ["torch_python"]
|
||||||
|
|
||||||
main_link_args = []
|
main_link_args = []
|
||||||
main_sources = ["torch/csrc/stub.c"]
|
main_sources = ["torch/csrc/stub.c"]
|
||||||
|
|
||||||
|
if BUILD_LIBTORCH_WHL:
|
||||||
|
main_libraries = ["torch"]
|
||||||
|
main_sources = []
|
||||||
|
|
||||||
if cmake_cache_vars["USE_CUDA"]:
|
if cmake_cache_vars["USE_CUDA"]:
|
||||||
library_dirs.append(os.path.dirname(cmake_cache_vars["CUDA_CUDA_LIB"]))
|
library_dirs.append(os.path.dirname(cmake_cache_vars["CUDA_CUDA_LIB"]))
|
||||||
|
|
||||||
|
|
@ -1053,7 +1098,6 @@ def configure_extension_build():
|
||||||
"default = torch.distributed.elastic.multiprocessing:DefaultLogsSpecs",
|
"default = torch.distributed.elastic.multiprocessing:DefaultLogsSpecs",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
return extensions, cmdclass, packages, entry_points, extra_install_requires
|
return extensions, cmdclass, packages, entry_points, extra_install_requires
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1080,6 +1124,11 @@ def print_box(msg):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
if BUILD_LIBTORCH_WHL and BUILD_PYTHON_ONLY:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Conflict: 'BUILD_LIBTORCH_WHL' and 'BUILD_PYTHON_ONLY' can't both be 1. Set one to 0 and rerun."
|
||||||
|
)
|
||||||
|
|
||||||
# the list of runtime dependencies required by this built package
|
# the list of runtime dependencies required by this built package
|
||||||
install_requires = [
|
install_requires = [
|
||||||
"filelock",
|
"filelock",
|
||||||
|
|
@ -1091,6 +1140,9 @@ def main():
|
||||||
'mkl>=2021.1.1,<=2021.4.0; platform_system == "Windows"',
|
'mkl>=2021.1.1,<=2021.4.0; platform_system == "Windows"',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if BUILD_PYTHON_ONLY:
|
||||||
|
install_requires.append("libtorch")
|
||||||
|
|
||||||
use_prioritized_text = str(os.getenv("USE_PRIORITIZED_TEXT_FOR_LD", ""))
|
use_prioritized_text = str(os.getenv("USE_PRIORITIZED_TEXT_FOR_LD", ""))
|
||||||
if (
|
if (
|
||||||
use_prioritized_text == ""
|
use_prioritized_text == ""
|
||||||
|
|
@ -1166,10 +1218,6 @@ def main():
|
||||||
"nn/parallel/*.pyi",
|
"nn/parallel/*.pyi",
|
||||||
"utils/data/*.pyi",
|
"utils/data/*.pyi",
|
||||||
"utils/data/datapipes/*.pyi",
|
"utils/data/datapipes/*.pyi",
|
||||||
"lib/*.so*",
|
|
||||||
"lib/*.dylib*",
|
|
||||||
"lib/*.dll",
|
|
||||||
"lib/*.lib",
|
|
||||||
"lib/*.pdb",
|
"lib/*.pdb",
|
||||||
"lib/torch_shm_manager",
|
"lib/torch_shm_manager",
|
||||||
"lib/*.h",
|
"lib/*.h",
|
||||||
|
|
@ -1335,6 +1383,23 @@ def main():
|
||||||
"utils/model_dump/*.mjs",
|
"utils/model_dump/*.mjs",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if BUILD_PYTHON_ONLY:
|
||||||
|
torch_package_data.extend(
|
||||||
|
[
|
||||||
|
"lib/libtorch_python*",
|
||||||
|
"lib/*shm*",
|
||||||
|
"lib/libtorch_global_deps*",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
torch_package_data.extend(
|
||||||
|
[
|
||||||
|
"lib/*.so*",
|
||||||
|
"lib/*.dylib*",
|
||||||
|
"lib/*.dll",
|
||||||
|
"lib/*.lib",
|
||||||
|
]
|
||||||
|
)
|
||||||
if get_cmake_cache_vars()["BUILD_CAFFE2"]:
|
if get_cmake_cache_vars()["BUILD_CAFFE2"]:
|
||||||
torch_package_data.extend(
|
torch_package_data.extend(
|
||||||
[
|
[
|
||||||
|
|
@ -1377,6 +1442,29 @@ def main():
|
||||||
"packaged/autograd/*",
|
"packaged/autograd/*",
|
||||||
"packaged/autograd/templates/*",
|
"packaged/autograd/templates/*",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if BUILD_LIBTORCH_WHL:
|
||||||
|
modified_packages = []
|
||||||
|
for package in packages:
|
||||||
|
parts = package.split(".")
|
||||||
|
if parts[0] == "torch":
|
||||||
|
modified_packages.append(DEFAULT_PACKAGE_NAME + package[len("torch") :])
|
||||||
|
packages = modified_packages
|
||||||
|
package_dir = {"libtorch": "torch"}
|
||||||
|
torch_package_dir_name = "libtorch"
|
||||||
|
package_data = {"libtorch": torch_package_data}
|
||||||
|
extensions = []
|
||||||
|
else:
|
||||||
|
torch_package_dir_name = "torch"
|
||||||
|
package_dir = {}
|
||||||
|
package_data = {
|
||||||
|
"torch": torch_package_data,
|
||||||
|
"torchgen": torchgen_package_data,
|
||||||
|
"caffe2": [
|
||||||
|
"python/serialized_test/data/operator_test/*.zip",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name=package_name,
|
name=package_name,
|
||||||
version=version,
|
version=version,
|
||||||
|
|
@ -1392,13 +1480,8 @@ def main():
|
||||||
entry_points=entry_points,
|
entry_points=entry_points,
|
||||||
install_requires=install_requires,
|
install_requires=install_requires,
|
||||||
extras_require=extras_require,
|
extras_require=extras_require,
|
||||||
package_data={
|
package_data=package_data,
|
||||||
"torch": torch_package_data,
|
package_dir=package_dir,
|
||||||
"torchgen": torchgen_package_data,
|
|
||||||
"caffe2": [
|
|
||||||
"python/serialized_test/data/operator_test/*.zip",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
url="https://pytorch.org/",
|
url="https://pytorch.org/",
|
||||||
download_url="https://github.com/pytorch/pytorch/tags",
|
download_url="https://github.com/pytorch/pytorch/tags",
|
||||||
author="PyTorch Team",
|
author="PyTorch Team",
|
||||||
|
|
|
||||||
|
|
@ -296,6 +296,8 @@ endif()
|
||||||
|
|
||||||
|
|
||||||
add_library(torch_python SHARED ${TORCH_PYTHON_SRCS})
|
add_library(torch_python SHARED ${TORCH_PYTHON_SRCS})
|
||||||
|
add_dependencies(torch_python Caffe2_PROTO)
|
||||||
|
add_dependencies(torch_python onnx_proto)
|
||||||
# Avoid numpy for the DEPLOY build
|
# Avoid numpy for the DEPLOY build
|
||||||
if(USE_NUMPY)
|
if(USE_NUMPY)
|
||||||
target_link_libraries(torch_python PRIVATE numpy::numpy)
|
target_link_libraries(torch_python PRIVATE numpy::numpy)
|
||||||
|
|
@ -344,7 +346,7 @@ endif()
|
||||||
|
|
||||||
target_compile_definitions(torch_python PRIVATE "-DTHP_BUILD_MAIN_LIB")
|
target_compile_definitions(torch_python PRIVATE "-DTHP_BUILD_MAIN_LIB")
|
||||||
|
|
||||||
target_link_libraries(torch_python PRIVATE torch_library ${TORCH_PYTHON_LINK_LIBRARIES})
|
target_link_libraries(torch_python PRIVATE ${TORCH_LIB} ${TORCH_PYTHON_LINK_LIBRARIES})
|
||||||
|
|
||||||
target_compile_definitions(torch_python PRIVATE ${TORCH_PYTHON_COMPILE_DEFINITIONS})
|
target_compile_definitions(torch_python PRIVATE ${TORCH_PYTHON_COMPILE_DEFINITIONS})
|
||||||
|
|
||||||
|
|
@ -359,7 +361,9 @@ endif()
|
||||||
|
|
||||||
if(BUILD_ONEDNN_GRAPH)
|
if(BUILD_ONEDNN_GRAPH)
|
||||||
target_compile_definitions(torch_python PRIVATE "-DBUILD_ONEDNN_GRAPH")
|
target_compile_definitions(torch_python PRIVATE "-DBUILD_ONEDNN_GRAPH")
|
||||||
target_compile_definitions(torch_cpu PRIVATE "-DBUILD_ONEDNN_GRAPH")
|
if(NOT BUILD_LIBTORCHLESS)
|
||||||
|
target_compile_definitions(torch_cpu PRIVATE "-DBUILD_ONEDNN_GRAPH")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT TORCH_PYTHON_LINK_FLAGS STREQUAL "")
|
if(NOT TORCH_PYTHON_LINK_FLAGS STREQUAL "")
|
||||||
|
|
@ -401,7 +405,11 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
${TORCH_SRC_DIR}/csrc/jit/backends/nnapi/nnapi_backend_preprocess.cpp
|
${TORCH_SRC_DIR}/csrc/jit/backends/nnapi/nnapi_backend_preprocess.cpp
|
||||||
)
|
)
|
||||||
# Pybind11 requires explicit linking of the torch_python library
|
# Pybind11 requires explicit linking of the torch_python library
|
||||||
target_link_libraries(nnapi_backend PRIVATE torch torch_python pybind::pybind11)
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
target_link_libraries(nnapi_backend PRIVATE ${TORCH_LIB} torch_python pybind::pybind11)
|
||||||
|
else()
|
||||||
|
target_link_libraries(nnapi_backend PRIVATE torch torch_python pybind::pybind11)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(TORCH_PYTHON_COMPILE_OPTIONS ${TORCH_PYTHON_COMPILE_OPTIONS} PARENT_SCOPE)
|
set(TORCH_PYTHON_COMPILE_OPTIONS ${TORCH_PYTHON_COMPILE_OPTIONS} PARENT_SCOPE)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ set_target_properties(shm PROPERTIES
|
||||||
PREFIX "lib"
|
PREFIX "lib"
|
||||||
IMPORT_PREFIX "lib"
|
IMPORT_PREFIX "lib"
|
||||||
CXX_STANDARD 17)
|
CXX_STANDARD 17)
|
||||||
target_link_libraries(shm PRIVATE torch_cpu)
|
target_link_libraries(shm PRIVATE ${TORCH_CPU_LIB})
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
include(CheckLibraryExists)
|
include(CheckLibraryExists)
|
||||||
|
|
@ -60,7 +60,12 @@ if(UNIX AND NOT APPLE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(torch_shm_manager manager.cpp)
|
add_executable(torch_shm_manager manager.cpp)
|
||||||
target_link_libraries(torch_shm_manager PRIVATE shm c10)
|
if(BUILD_LIBTORCHLESS)
|
||||||
|
target_link_libraries(torch_shm_manager PRIVATE shm ${C10_LIB})
|
||||||
|
else()
|
||||||
|
# we need to link directly to c10 here otherwise we miss symbols
|
||||||
|
target_link_libraries(torch_shm_manager PRIVATE shm c10)
|
||||||
|
endif()
|
||||||
set_target_properties(torch_shm_manager PROPERTIES
|
set_target_properties(torch_shm_manager PROPERTIES
|
||||||
INSTALL_RPATH "${_rpath_portable_origin}/../lib")
|
INSTALL_RPATH "${_rpath_portable_origin}/../lib")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user