mirror of
https://github.com/saymrwulf/pytorch.git
synced 2026-05-14 20:57:59 +00:00
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
45 lines
2.2 KiB
CMake
45 lines
2.2 KiB
CMake
cmake_minimum_required(VERSION 3.18)
|
|
project(functorch)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
include(GNUInstallDirs)
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
set(FT_DIR csrc)
|
|
file(GLOB_RECURSE FT_SOURCES ${FT_DIR}/*.cpp ${FT_DIR}/*.c)
|
|
|
|
add_library(${PROJECT_NAME} MODULE ${FT_SOURCES})
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE FUNCTORCH_BUILD_MAIN_LIB)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE TORCH_EXTENSION_NAME=_C)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE TORCH_API_INCLUDE_EXTENSION_H)
|
|
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} "-Werror=missing-prototypes")
|
|
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)
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
|
${CMAKE_BINARY_DIR}/functorch)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${_rpath_portable_origin}/../torch/lib")
|
|
|
|
# Copy-pasted prefix/suffix logic for Python extensions from
|
|
# https://github.com/pytorch/pytorch/blob/33bb8ae350611760139457b85842b1d7edf9aa11/caffe2/CMakeLists.txt#L1975
|
|
# https://github.com/pytorch/pytorch/blob/33bb8ae350611760139457b85842b1d7edf9aa11/caffe2/CMakeLists.txt#L2022
|
|
# TODO: It would be good to be able to use Python3_add_library target, but it does not work in many cases
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" DEBUG_POSTFIX "")
|
|
if(WIN32)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".pyd")
|
|
else()
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".so")
|
|
endif()
|
|
# Needed to link functorch on MacOS
|
|
if(NOT ${TORCH_PYTHON_LINK_FLAGS} STREQUAL "")
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS ${TORCH_PYTHON_LINK_FLAGS})
|
|
endif()
|
|
install(TARGETS ${PROJECT_NAME} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}")
|