pytorch
0f358fab - Hide cudnn symbols in libtorch_cuda.so when statically linking cudnn (#41986)

Commit
4 years ago
Hide cudnn symbols in libtorch_cuda.so when statically linking cudnn (#41986) Summary: This PR intends to fix https://github.com/pytorch/pytorch/issues/32983. The initial (one-line) diff causes statically linked cudnn symbols in `libtorch_cuda.so` to have local linkage (such that they shouldn't be visible to external libraries during dynamic linking at load time), at least in my source build on Ubuntu 20.04. Procedure I used to verify: ``` export USE_STATIC_CUDNN=ON python3 setup.py install ... ``` then ``` mcarilli@mcarilli-desktop:~/Desktop/mcarilli_github/pytorch/torch/lib$ nm libtorch_cuda.so | grep cudnnCreate 00000000031ff540 t cudnnCreate 00000000031fbe70 t cudnnCreateActivationDescriptor ``` Before the diff they were marked with capital `T`s indicating external linkage. Caveats: - The fix is gcc-specific afaik. I have no idea how to enable it for Windows or other compilers. - Hiding the cudnn symbols will break external C++ applications that rely on linking `libtorch.so` to supply cudnn symbol definitions. IMO this is "off menu" usage so I don't think it's a major concern. Hiding the symbols _won't_ break applications that call cudnn indirectly through torch functions, which IMO is the "on menu" way. - I know _very little_ about the build system. The diff's intent is to add a link option that applies to any Pytorch `.so`s that statically link cudnn, and does so on Linux only. I'm blindly following soumith 's recommendation https://github.com/pytorch/pytorch/issues/32983#issuecomment-662056151, and post-checking the built libs (I also added `set(CMAKE_VERBOSE_MAKEFILE ON)` to the top-level CMakeLists.txt at one point to confirm `-Wl,--exclude-libs,libcudnn_static.a` was picked up by the command that linked `libtorch_cuda.so`). - https://github.com/pytorch/pytorch/issues/32983 (which used a Pytorch 1.4 binary build) complained about `libtorch.so`, not `libtorch_cuda.so`: ``` nvpohanh@ubuntu:~$ nm /usr/local/lib/python3.5/dist-packages/torch/lib/libtorch.so | grep ' cudnnCreate' 000000000f479c30 T cudnnCreate 000000000f475ff0 T cudnnCreateActivationDescriptor ``` In my source build, `libtorch.so` ends up small, containing no cudnn symbols (this is true with or without the PR's diff), which contradicts https://github.com/pytorch/pytorch/issues/32983. Maybe the symbol organization (what goes in `libtorch.so` vs `libtorch_cuda/cpu/whatever.so`) changed since 1.4. Or maybe the symbol organization is different for source vs binary builds, in which case I have no idea if this PR's diff has the same effect for a binary build. Pull Request resolved: https://github.com/pytorch/pytorch/pull/41986 Reviewed By: glaringlee Differential Revision: D22934926 Pulled By: malfet fbshipit-source-id: 711475834e0f8148f0e5f2fe28fca5f138ef494b
Author
Parents
Loading