使用 ExecuTorch 进行 C++ 开发¶
为了支持从高端手机到小型嵌入式系统等各种设备,ExecuTorch 提供了一个高度可定制的 API 表面。C++ API 公开了高级配置选项,例如控制内存分配、放置和数据加载。为了满足应用程序和嵌入式编程的需求,ExecuTorch 提供了一组低级、高度可定制的核心 API,以及一组高级扩展,这些扩展抽象了许多与移动应用程序编程无关的低级细节。
高级 API¶
C++ Module
类提供了从 C++ 加载和执行模型的高级接口。它负责加载 .pte 文件、配置内存分配和放置以及运行模型。Module 构造函数接受文件路径,并提供了一个简化的 forward()
方法来运行模型。
除了 Module 类之外,tensor 扩展还提供了一个封装的接口来定义和管理 tensor 内存。它提供了 TensorPtr
类,这是一个“胖”智能指针。它提供了对 tensor 数据和元数据(如大小和步幅)的所有权。在 tensor.h
中定义的 make_tensor_ptr
和 from_blob
方法分别提供了拥有和非拥有的 tensor 创建 API。
#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>
using namespace ::executorch::extension;
// Load the model.
Module module("/path/to/model.pte");
// Create an input tensor.
float input[1 * 3 * 256 * 256];
auto tensor = from_blob(input, {1, 3, 256, 256});
// Perform an inference.
const auto result = module.forward(tensor);
if (result.ok()) {
// Retrieve the output data.
const auto output = result->at(0).toTensor().const_data_ptr<float>();
}
有关 Module 类的更多信息,请参阅 使用 C++ 中的 Module 扩展运行 ExecuTorch 模型。有关高级 tensor API 的信息,请参阅 在 C++ 中管理 Tensor 内存。
有关使用 Module API 构建和运行 C++ 应用程序的完整示例,请参阅我们的 示例 GitHub 存储库。
低级 API¶
使用低级运行时 API 运行模型可以高度控制内存分配、放置和加载。这使得高级用例成为可能,例如将分配放置在特定的内存库中或在没有文件系统的情况下加载模型。有关使用低级运行时 API 的端到端示例,请参阅 ExecuTorch 模型 C++ 运行教程。
使用 CMake 构建¶
ExecuTorch 使用 CMake 作为主要的构建系统。模块和 tensor API 的包含由 EXECUTORCH_BUILD_EXTENSION_MODULE
和 EXECUTORCH_BUILD_EXTENSION_TENSOR
CMake 选项控制。由于这些 API 可能在嵌入式系统上不受支持,因此在从源构建时默认禁用它们。低级 API 表面始终包含在内。要链接,请将 executorch
目标添加为 CMake 依赖项,以及 extension_module_static
和 extension_tensor
(如果需要)。请注意,extension_flat_tensor
是 extension_module
的依赖项,以支持 程序数据分离。
# CMakeLists.txt
add_subdirectory("executorch")
...
target_link_libraries(
my_target
PRIVATE executorch
extension_module_static
extension_flat_tensor
extension_tensor
optimized_native_cpu_ops_lib
xnnpack_backend)
有关 CMake 构建过程的更多信息,请参阅 从源构建。
参考运行器¶
ExecuTorch 存储库包含几个参考运行器,它们是加载和执行 .pte 文件(通常使用随机输入)的简单程序。这些可以用于在开发平台上进行模型执行的健全性检查,并作为运行时集成的代码参考。
使用 CMake 构建时,executor_runner
目标默认构建。它可以通过以下方式调用
./cmake-out/executor_runner --model_path path/to/model.pte
可以在 ExecuTorch 存储库的 examples/portable/executor_runner.cpp 下找到运行器源代码。一些后端(如 CoreML)具有专用的运行器来展示后端和平台特定的功能。有关更多信息,请参阅 examples/apple/coreml 和 examples 目录。
下一步¶
有关可用 C++ 运行时 API 的文档,请参阅 运行时 API 参考。
有关高级 Module API 的信息,请参阅 使用 C++ 中的 Module 扩展运行 ExecuTorch 模型。
有关高级 tensor API 的信息,请参阅 在 C++ 中管理 Tensor 内存。
有关低级运行时 API 的信息,请参阅 ExecuTorch 模型 C++ 运行教程。
有关 CMake 构建集成的信息,请参阅 从源构建。