pytorch/ios
Edward Yang 38986e1dea Split libtorch.so back into libtorch_{cpu,cuda,hip} (#30315)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/30315

The new structure is that libtorch_cpu contains the bulk of our
code, and libtorch depends on libtorch_cpu and libtorch_cuda.
This is a reland of https://github.com/pytorch/pytorch/pull/29731 but
I've extracted all of the prep work into separate PRs which can be
landed before this one.

Some things of note:

* torch/csrc/cuda/nccl.cpp was added to the wrong list of SRCS, now fixed (this didn't matter before because previously they were all in the same library)
* The dummy file for libtorch was brought back from the dead; it was previously deleted in #20774
In an initial version of the patch, I forgot to make torch_cuda explicitly depend on torch_cpu. This lead to some very odd errors, most notably "bin/blob_test: hidden symbol `_ZNK6google8protobuf5Arena17OnArenaAllocationEPKSt9type_infom' in lib/libprotobuf.a(arena.cc.o) is referenced by DSO"
* A number of places in Android/iOS builds have to add torch_cuda explicitly as a library, as they do not have transitive dependency calculation working correctly
* I had to torch_cpu/torch_cuda caffe2_interface_library so that they get whole-archived linked into torch when you statically link. And I had to do this in an *exported* fashion because torch needs to depend on torch_cpu_library. In the end I exported everything and removed the redefinition in the Caffe2Config.cmake. However, I am not too sure why the old code did it in this way in the first place; however, it doesn't seem to have broken anything to switch it this way.
* There's some uses of `__HIP_PLATFORM_HCC__` still in `torch_cpu` code, so I had to apply it to that library too (UGH). This manifests as a failer when trying to run the CUDA fuser. This doesn't really matter substantively right now because we still in-place HIPify, but it would be good to fix eventually. This was a bit difficult to debug because of an unrelated HIP bug, see https://github.com/ROCm-Developer-Tools/HIP/issues/1706

Fixes #27215 (as our libraries are smaller), and executes on
part of the plan in #29235.

Signed-off-by: Edward Z. Yang <ezyang@fb.com>

Test Plan: Imported from OSS

Differential Revision: D18790941

Pulled By: ezyang

fbshipit-source-id: 01296f6089d3de5e8365251b490c51e694f2d6c7
2019-12-04 08:04:57 -08:00
..
TestApp Split libtorch.so back into libtorch_{cpu,cuda,hip} (#30315) 2019-12-04 08:04:57 -08:00
.gitignore Add iOS test app skeleton (#26261) 2019-09-17 11:06:57 -07:00
LibTorch.h Change the source link in podspec (#26089) 2019-09-13 15:00:31 -07:00
LibTorch.podspec Split libtorch.so back into libtorch_{cpu,cuda,hip} (#30315) 2019-12-04 08:04:57 -08:00
README.md Update the link for iOS demo app in README.md (#27145) 2019-10-03 13:43:58 -07:00

PyTorch for iOS

Cocoapods Developers

PyTorch is now available via Cocoapods, to integrate it to your project, simply add the following line to your Podfile and run pod install

pod 'LibTorch'

Import the library

For Objective-C developers, simply import the umbrella header

#import <LibTorch/LibTorch.h>

For Swift developers, you need to create an Objective-C class as a bridge to call the C++ APIs. We highly recommend you to follow the Image Classification demo where you can find out how C++, Objective-C and Swift work together.

Disable Bitcode

Since PyTorch is not yet built with bitcode support, you need to disable bitcode for your target by selecting the Build Settings, searching for Enable Bitcode and set the value to No.

LICENSE

PyTorch is BSD-style licensed, as found in the LICENSE file.