在 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 構建整合的資訊。