• 文档 >
  • 使用 CMake 构建
快捷方式

使用 CMake 构建

ExecuTorch 使用 CMake 作为其主要构建系统。即使您不直接使用 CMake,CMake 也可以为其他格式(如 Make、Ninja 或 Xcode)生成脚本。有关信息,请参阅 cmake-generators(7)

CMake 构建系统构建的目标

ExecuTorch 的 CMake 构建系统涵盖了运行时中可能对嵌入式系统用户有用的部分。

  • libexecutorch_core.a:ExecuTorch 运行时的核心。不包含任何运算符/内核定义或后端定义。

  • libportable_kernels.a:ATEN 兼容运算符的实现,遵循 [functions.yaml](https://github.com/pytorch/executorch/blob/release/0.4/kernels/portable/functions.yaml) 中的签名。

  • libportable_ops_lib.a:生成的代码,将 libportable_kernels.a 的内容注册到运行时。

    • 注意:这必须使用类似 -Wl,-force_load-Wl,--whole-archive 的标志链接到您的应用程序中。它包含加载时函数,这些函数会自动注册内核,但链接器通常会默认修剪这些函数,因为没有对它们的直接调用。

  • executor_runner:一个示例工具,使用所有 1 值作为输入运行 .pte 程序文件,并将输出打印到标准输出。它与 libportable_kernels.a 链接,因此程序可以使用它实现的任何运算符。

为 CMake 构建准备的一次性设置

请按照以下步骤操作,以便在使用 CMake 在您的机器上构建之前准备好工具。

  1. 如果您的系统上的 python3 版本早于 3.11

    • 运行 pip install tomli

  2. 安装 CMake 版本 3.19 或更高版本

    • 运行 conda install cmakepip install cmake

配置 CMake 构建

克隆或拉取上游存储库后,请按照以下步骤操作,因为构建依赖项可能已更改。

# cd to the root of the executorch repo
cd executorch

# Clean cmake cache directory (cmake-out). It's a good practice to do this
# whenever cloning or pulling the upstream repo.
bash install_requirements.sh --clean

完成后,您无需再次执行此操作,直到您再次从上游存储库中拉取,或者修改任何与 CMake 相关的文件。

CMake 构建选项

发布版本提供了旨在提高性能和减小二进制文件大小的优化。它禁用程序验证和 executorch 日志记录,并添加优化标志。

CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release"

要进一步优化发布版本的大小,请添加

CMAKE_FLAGS="$CMAKE_FLAGS -DOPTIMIZE_SIZE=ON"

请参阅 CMakeLists.txt

构建运行时组件

使用以下命令构建所有目标

# Build using the configuration that you previously generated under the
# `cmake-out` directory.
cmake "$CMAKE_FLAGS" -Bcmake-out .

# NOTE: The `-j` argument specifies how many jobs/processes to use when
# building, and tends to speed up the build significantly. It's typical to use
# "core count + 1" as the `-j` value.
cmake --build cmake-out -j9

使用示例应用程序 executor_runner 执行 .pte 文件

首先,使用 设置 ExecuTorch 中描述的说明生成 add.pte 或其他 ExecuTorch 程序文件。

然后,将其传递到命令行工具

./cmake-out/executor_runner --model_path path/to/add.pte

如果成功,您应该会看到消息“模型执行成功”,后跟输出值。

I 00:00:00.000526 executorch:executor_runner.cpp:82] Model file add.pte is loaded.
I 00:00:00.000595 executorch:executor_runner.cpp:91] Using method forward
I 00:00:00.000612 executorch:executor_runner.cpp:138] Setting up planned buffer 0, size 48.
I 00:00:00.000669 executorch:executor_runner.cpp:161] Method loaded.
I 00:00:00.000685 executorch:executor_runner.cpp:171] Inputs prepared.
I 00:00:00.000764 executorch:executor_runner.cpp:180] Model executed successfully.
I 00:00:00.000770 executorch:executor_runner.cpp:184] 1 outputs: 
Output 0: tensor(sizes=[1], [2.])

交叉编译

以下是有关如何对 Android 和 iOS 执行交叉编译的说明。

Android

  • 先决条件:Android NDK,选择以下选项之一

    • 选项 1:按照 安装 ndk 的说明下载 Android Studio。

    • 选项 2:直接从 此处 下载 Android NDK。

假设 Android NDK 可用,请运行

# Run the following lines from the `executorch/` folder
rm -rf cmake-android-out && mkdir cmake-android-out && cd cmake-android-out

# point -DCMAKE_TOOLCHAIN_FILE to the location where ndk is installed
cmake -DCMAKE_TOOLCHAIN_FILE=/Users/{user_name}/Library/Android/sdk/ndk/25.2.9519653/build/cmake/android.toolchain.cmake  -DANDROID_ABI=arm64-v8a ..

cd  ..
cmake --build  cmake-android-out  -j9

adb shell mkdir -p /data/local/tmp/executorch
# push the binary to an Android device
adb push  cmake-android-out/executor_runner  /data/local/tmp/executorch
# push the model file
adb push  add.pte  /data/local/tmp/executorch

adb shell  "/data/local/tmp/executorch/executor_runner --model_path /data/local/tmp/executorch/add.pte"

iOS

对于 iOS,我们将构建 框架 而不是静态库,它还将在内部包含公共头文件。

  1. Mac App Store 安装 Xcode,然后使用终端安装命令行工具

xcode-select --install
  1. 构建框架

./build/build_apple_frameworks.sh

运行上述命令并添加 --help 标志,以了解如何构建其他后端(例如 Core MLMPS 或 XNNPACK)等的更多信息。请注意,某些后端可能需要额外的依赖项以及特定版本的 Xcode 和 iOS。

  1. 将生成的 .xcframework 捆绑包复制到您的 Xcode 项目中,将它们链接到您的目标,并且不要忘记添加额外的链接器标志 -all_load

查看 iOS 演示应用程序 教程以获取更多信息。

后续步骤

您已成功将 executor_runner 二进制文件交叉编译到 iOS 和 Android 平台。您可以开始探索高级功能和特性。以下列出了一些您可能想接下来阅读的部分

  • 选择性构建,以构建仅链接到程序使用的内核的运行时,这可以显著减少二进制文件的大小。

  • 构建 AndroidiOS 演示应用程序的教程。

  • 关于将应用程序部署到嵌入式设备(如 ARM Cortex-M/Ethos-UXTensa HiFi DSP)的教程。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源