• 文档 >
  • 在 C++ 中使用 ExecuTorch
快捷方式

在 C++ 中使用 ExecuTorch

为了支持从高端手机到微型嵌入式系统的各种设备,ExecuTorch 提供了高度可定制的 API 接口。C++ API 提供了高级配置选项,例如控制内存分配、放置和数据加载。为了满足应用编程和嵌入式编程的需求,ExecuTorch 提供了一套低级别、高度可定制的核心 API,以及一套高级扩展,后者抽象掉了许多与移动应用编程不相关的低级别细节。

高级 API

C++ Module 类提供了从 C++ 加载和执行模型的高级接口。它负责加载 .pte 文件、配置内存分配和放置以及运行模型。Module 构造函数接受一个文件路径,并提供一个简化的 forward() 方法来运行模型。

除了 Module 类,张量扩展还提供了一个封装好的接口来定义和管理张量内存。它提供了 TensorPtr 类,这是一个“胖”智能指针。它拥有张量数据和元数据的所有权,例如大小和跨度。定义在 tensor.h 中的 make_tensor_ptrfrom_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_MODULEEXECUTORCH_BUILD_EXTENSION_TENSOR CMake 选项控制。由于这些 API 可能不受嵌入式系统的支持,因此在从源代码构建时默认禁用它们。低级别 API 接口始终包含在内。要进行链接,请将 executorch 目标添加为 CMake 依赖项,如果需要,还可以添加 extension_module_staticextension_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/coremlexamples 目录。

后续步骤

文档

查阅 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

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

查看资源