使用 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 中。转到项目的构建阶段 - 将二进制文件与库链接,点击+号,并添加以下框架
executorch.xcframework
coreml_backend.xcframework
Accelerate.framework
CoreML.framework
libsqlite3.tbd
将导出的程序添加到Xcode目标的复制捆绑包阶段。
请按照运行时 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 设备上。