在 C++ 中使用 ExecuTorch¶
为了支持从高端手机到微型嵌入式系统的各种设备,ExecuTorch 提供了高度可定制的 API 接口。C++ API 提供了高级配置选项,例如控制内存分配、放置和数据加载。为了满足应用编程和嵌入式编程的需求,ExecuTorch 提供了一套低级别、高度可定制的核心 API,以及一套高级扩展,后者抽象掉了许多与移动应用编程不相关的低级别细节。
高级 API¶
C++ Module
类提供了从 C++ 加载和执行模型的高级接口。它负责加载 .pte 文件、配置内存分配和放置以及运行模型。Module 构造函数接受一个文件路径,并提供一个简化的 forward()
方法来运行模型。
除了 Module 类,张量扩展还提供了一个封装好的接口来定义和管理张量内存。它提供了 TensorPtr
类,这是一个“胖”智能指针。它拥有张量数据和元数据的所有权,例如大小和跨度。定义在 tensor.h
中的 make_tensor_ptr
和 from_blob
方法分别提供了拥有和非拥有张量创建 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 模型。有关高级张量 API 的信息,请参阅在 C++ 中管理张量内存。
有关使用 Module API 构建和运行 C++ 应用程序的完整示例,请参阅我们的示例 GitHub 仓库。
低级别 API¶
使用低级别运行时 API 运行模型可以高度控制内存分配、放置和加载。这使得高级用例成为可能,例如将分配放置在特定的内存库中,或者在没有文件系统的情况下加载模型。有关使用低级别运行时 API 的端到端示例,请参阅在 C++ 中运行 ExecuTorch 模型教程。
使用 CMake 构建¶
ExecuTorch 使用 CMake 作为主要的构建系统。是否包含 module 和 tensor API 由 EXECUTORCH_BUILD_EXTENSION_MODULE
和 EXECUTORCH_BUILD_EXTENSION_TENSOR
CMake 选项控制。由于这些 API 可能不受嵌入式系统的支持,因此在从源代码构建时默认禁用它们。低级别 API 接口始终包含在内。要进行链接,请将 executorch
目标添加为 CMake 依赖项,如果需要,还可以添加 extension_module_static
和 extension_tensor
。
# CMakeLists.txt
add_subdirectory("executorch")
...
target_link_libraries(
my_target
PRIVATE executorch
extension_module_static
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 目录。
后续步骤¶
运行时 API 参考,获取可用 C++ 运行时 API 的文档。
在 C++ 中使用 Module 扩展运行 ExecuTorch 模型,获取关于高级 Module API 的信息。
在 C++ 中管理张量内存,获取关于高级张量 API 的信息。
在 C++ 中运行 ExecuTorch 模型教程,获取关于低级别运行时 API 的信息。
从源代码构建,获取关于 CMake 构建集成的信息。