You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Paddle/doc/mobile/cross_compiling_for_ios_cn.md

5.7 KiB

iOS平台编译指南

交叉编译iOS平台上适用的PaddlePaddle库需要在MacOS系统上进行。本文的将介绍在MacOS上从源码交叉编译iOS平台上适用的PaddlePaddle库。

准备交叉编译环境

Apple官方为iOS开发提供了完整的交叉编译工具和集成开发环境用户从App Store下载安装Xcode即可。也可自行前往官网下载Xcode。安装完成之后,可在命令行执行xcodebuild -version,判断是否安装成功。

$ xcodebuild -version
Xcode 9.0
Build version 9A235

配置交叉编译参数

PaddlePaddle为交叉编译提供了工具链配置文档cmake/cross_compiling/ios.cmake,以提供一些默认的编译器和编译参数配置。

交叉编译iOS版本的PaddlePaddle库时有一些必须配置的参数

  • CMAKE_SYSTEM_NAMECMake编译的目标平台必须设置为iOS。在设置CMAKE_SYSTEM_NAME=iOSPaddlePaddle的CMake系统会自动编译所有的第三方依赖库并且强制设置一些PaddlePaddle参数的值WITH_C_API=ONWITH_GPU=OFFWITH_AVX=OFFWITH_PYTHON=OFFWITH_RDMA=OFF)。
  • WITH_C_API是否编译C-API预测库必须设置为ON。在iOS平台上只支持使用C-API来预测。
  • WITH_SWIG_PY,必须设置为OFF。在iOS平台上不支持通过swig调用来训练或者预测。

iOS平台可选配置参数

  • IOS_PLATFORM,可设置为OS(默认值)或SIMULATOR

    • OS,构建目标为arm架构的iPhone或者iPad等物理设备。
    • SIMULATOR,构建目标为x86架构的模拟器平台。
  • IOS_ARCH,目标架构。针对不同的IOS_PLATFORM,可设置的目标架构如下表所示,默认编译所有架构:

    IOS_PLATFORM IOS_ARCH
    OS armv7, armv7s, arm64
    SIMULATOR i386, x86_64
  • IOS_DEPLOYMENT_TARGET最小的iOS部署版本默认值为7.0

  • IOS_ENABLE_BITCODE,是否使能Bitcode,可设置ON/OFF,默认值为ON

  • IOS_USE_VECLIB_FOR_BLAS,是否使用vecLib框架进行BLAS矩阵计算可设置ON/OFF,默认值为OFF

  • IOS_DEVELOPMENT_ROOTDeveloper目录,可显式指定为/path/to/platform/Developer。若未显式指定PaddlePaddle将会根据IOS_PLATFORM自动选择Xcode对应platformDeveloper目录。

  • IOS_SDK_ROOT,所使用SDK的根目录,可显式指定为/path/to/platform/Developer/SDKs/SDK。若未显式指定PaddlePaddle将会自动选择IOS_DEVELOPMENT_ROOT目录下最新的SDK版本。

其他配置参数:

  • USE_EIGEN_FOR_BLAS是否使用Eigen库进行矩阵计算IOS_USE_VECLIB_FOR_BLAS=OFF时有效。可设置ON/OFF,默认值为OFF
  • HOST_C/CXX_COMPILER宿主机的C/C++编译器。默认值为环境变量CC/CXX的值;若环境变量CC/CXX未设置,则使用cc/c++编译器。

常用的cmake配置如下

cmake -DCMAKE_SYSTEM_NAME=iOS \
      -DIOS_PLATFORM=OS \
      -DIOS_ARCH="armv7;arm64" \
      -DIOS_ENABLE_BITCODE=ON \
      -DIOS_USE_VECLIB_FOR_BLAS=ON \
      -DCMAKE_INSTALL_PREFIX=your/path/to/install \
      -DWITH_C_API=ON \
      -DWITH_TESTING=OFF \
      -DWITH_SWIG_PY=OFF \
      ..
cmake -DCMAKE_SYSTEM_NAME=iOS \
      -DIOS_PLATFORM=SIMULATOR \
      -DIOS_ARCH="x86_64" \
      -DIOS_USE_VECLIB_FOR_BLAS=ON \
      -DCMAKE_INSTALL_PREFIX=your/path/to/install \
      -DWITH_C_API=ON \
      -DWITH_TESTING=OFF \
      -DWITH_SWIG_PY=OFF \
      ..

用户还可根据自己的需求设置其他编译参数。比如希望最小化生成库的大小,可以设置CMAKE_BUILD_TYPEMinSizeRel;若希望得到最快的执行速度,则可设置CMAKE_BUILD_TYPERelease。亦可以通过手动设置CMAKE_C/CXX_FLAGS来影响PaddlePaddle的编译过程。

性能TIPS为了达到最快的计算速度在CMake参数配置上有以下建议

  • 设置CMAKE_BUILD_TYPERelease
  • 设置IOS_USE_VECLIB_FOR_BLAS=ON,调用vecLib框架提供的BLAS函数进行矩阵计算。

编译和安装

CMake配置完成后执行以下命令PaddlePaddle将自动下载和编译所有第三方依赖库、编译和安装PaddlePaddle预测库。

$ make
$ make install

注意如果你曾在源码目录下编译过其他平台的PaddlePaddle库请先使用rm -rf命令删除third_party目录和build目录以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。

执行完安装命令后,your/path/to/install目录中会包含以下内容:

  • include目录其中包含所有C-API的头文件
  • lib目录其中包含PaddlePaddle的C-API静态库
  • third_party目录,其中包含所依赖的所有第三方库

注意如果PaddlePaddle库需要同时支持真机和模拟器则需要分别编译真机和模拟器版本然后使用lipo工具合并fat库。

自此PaddlePaddle库已经安装完成用户可将合成的fat库用于深度学习相关的iOS App中调用方法见C-API文档。