使用 Core ML 后端构建和运行 ExecuTorch¶
Core ML 委托使用 Core ML API 通过 Apple 的硬件加速来运行神经网络。有关 Core ML 的更多信息,您可以点击此处阅读。在本教程中,我们将逐步介绍将 PyTorch 模型降低到 Core ML 委托的步骤
在本教程中,您将学习如何导出 MobileNet V3 模型,以便它可以在 Core ML 后端上运行。
您还将学习如何在受支持的 Apple 设备上部署和运行导出的模型。
先决条件(硬件和软件)¶
为了能够成功构建和运行 ExecuTorch 的 Core ML 后端,您需要以下硬件和软件组件。
设置您的开发者环境¶
确保您已完成本页顶部链接的 ExecuTorch 设置教程并设置环境。
运行
install_requirements.sh
以安装 Core ML 后端所需的依赖项。
cd executorch
./backends/apple/coreml/scripts/install_requirements.sh
安装 Xcode。
安装 Xcode 命令行工具。
xcode-select --install
构建¶
AOT(预先)组件:¶
导出 Core ML 委托程序:
在此步骤中,您将把 MobileNet V3 模型降低到 Core ML 后端并导出 ExecuTorch 程序。然后,您将使用 Core ML 后端在受支持的 Apple 设备上部署和运行导出的程序。
cd executorch
# Generates ./mv3_coreml_all.pte file.
python3 -m examples.apple.coreml.scripts.export --model_name mv3
Core ML 后端使用 coremltools 将 Edge 方言 降低为 Core ML 格式,然后将其捆绑在
.pte
文件中。
运行时:¶
运行 Core ML 委托程序:
构建运行器。
cd executorch
# Builds `coreml_executor_runner`.
./examples/apple/coreml/scripts/build_executor_runner.sh
运行 CoreML 委托程序。
cd executorch
# Runs the exported mv3 model using the Core ML backend.
./coreml_executor_runner --model_path mv3_coreml_all.pte
分析 Core ML 委托程序:
请注意,macOS >= 14.4 支持分析。
[可选] 在导出模型时生成 ETRecord。
cd executorch
# Generates `mv3_coreml_all.pte` and `mv3_coreml_etrecord.bin` files.
python3 -m examples.apple.coreml.scripts.export --model_name mv3 --generate_etrecord
构建运行器。
# Builds `coreml_executor_runner`.
./examples/apple/coreml/scripts/build_executor_runner.sh
运行并生成 ETDump。
cd executorch
# Generate the ETDump file.
./coreml_executor_runner --model_path mv3_coreml_all.pte --profile_model --etdump_path etdump.etdp
通过传入从运行时获取的 ETDump 以及从步骤 1 可选生成的 ETRecord 来创建 Inspector API 的实例,或在您的终端中执行以下命令以显示分析数据表。
python examples/apple/coreml/scripts/inspector_cli.py --etdump_path etdump.etdp --etrecord_path mv3_coreml.bin
在设备上部署和运行¶
在演示 iOS 应用程序中运行 Core ML 委托程序:
请按照教程的 导出模型 步骤来捆绑导出的 MobileNet V3 程序。您只需要执行 Core ML 部分。
完成教程的 构建运行时和后端 部分。构建框架时,您只需要
coreml
选项。完成教程的 最后步骤 部分来构建和运行演示应用程序。
在您的应用程序中运行 Core ML 委托程序
构建框架,运行以下命令将在
cmake-out
目录中创建executorch.xcframework
和coreml_backend.xcframework
。
cd executorch
./build/build_apple_frameworks.sh --coreml
创建一个新的 Xcode 项目 或打开现有项目。
将从步骤 2 生成的
executorch.xcframework
和coreml_backend.xcframework
拖到 Frameworks。转到项目的 Build Phases - Link Binaries With Libraries,单击 + 号,并添加以下框架
executorch.xcframework
coreml_backend.xcframework
Accelerate.framework
CoreML.framework
libsqlite3.tbd
将导出的程序添加到 Xcode 目标的 Copy Bundle Phase。
请按照 运行时 API 教程 集成用于加载 ExecuTorch 程序的代码。
更新代码以从应用程序的捆绑包加载程序。
NSURL *model_url = [NBundle.mainBundle URLForResource:@"mv3_coreml_all" extension:@"pte"];
Result<executorch::extension::FileDataLoader> loader =
executorch::extension::FileDataLoader::from(model_url.path.UTF8String);
使用 Xcode 在设备上部署应用程序。
应用程序现在可以在 Core ML 后端上运行 MobileNet V3 模型。
在本教程中,您学习了如何将 MobileNet V3 模型降低到 Core ML 后端,并在 Apple 设备上部署和运行它。