Building for iOS with torch:nn features

I’m building an iOS application linking in libtorch that uses more than just the low level ops, and it seems build_ios.sh and the cmake build are not set up to accommodate this. Am I missing something?

We need stuff in the torch::nn namespace, e.g. torch::nn::Module::register_parameter. It seems I have to modify CMakeLists.txt to have NO_API=0 to get this. Then I can try building with

BUILD_LITE_INTERPRETER=0 BUILD_PYTORCH_MOBILE=1 IOS_ARCH=arm64 ./scripts/build_ios.sh

That almost works, except there are link errors relating to torch::jit::ExportModule, that meant I had to comment out calls to this in csrc/api/src/serialize/output-archive.cpp.

CMakeLists.txt only compiles ${TORCH_SRC_DIR}/csrc/jit/serialization/export_module.cpp, where this method is defined, if INTERN_BUILD_MOBILE is false, which of course it isn’t for an iOS build. However, references to this method are compiled in if NO_API is false. So my build configuration apparently entails incompatible flags. Various hacks to the build to get around this resulted in other problems.

So as things stand I have to modify the source and CMakeLists.txt to get things running on iOS. Is there a better way? Is the mobile build intended to support these features, now or in the future?

Separately from this, I found I had to manually invoke

python -m tools.autograd.gen_autograd
aten/src/ATen/native/native_functions.yaml
aten/src/ATen/native/tags.yaml
torch/csrc/autograd/generated/
tools/autograd

to get necessary headers like tools/autograd/templates/VariableType.h.

Any insights appreciated.