快捷方式

執行時整合

本節介紹了配置和定製 ExecuTorch 執行時的選項。預構建包旨在提供“開箱即用”的體驗,但在投入生產時通常需要額外的配置。ExecuTorch 提供了在編譯時控制功能(例如日誌記錄)、定製系統整合以及僅包含執行特定模型所需的運算元(選擇性構建)的能力。

日誌記錄

ExecuTorch 執行時程式碼包含各種級別的日誌記錄語句,以幫助整合和除錯。日誌記錄的包含由 EXECUTORCH_ENABLE_LOGGINGEXECUTORCH_LOG_LEVEL CMake 選項在構建時控制。將這些作為編譯時配置公開,可以在不使用日誌時排除所有與日誌相關的程式碼,這對於資源受限的系統至關重要。

在主機平臺上,日誌預設傳送到 STDOUT 和 STDERR,在 Android 和 iOS 上則重定向到作業系統特定的日誌系統。有關日誌路由的更多資訊,請參閱下方的平臺抽象層

從原始碼構建時,要配置日誌級別,請將 EXECUTORCH_ENABLE_LOG_LEVEL 指定為 on 或 off,並將 EXECUTORCH_LOG_LEVEL 指定為 debug、info、error 或 fatal 中的一個。日誌預設在 debug 構建中啟用,在 release 構建中停用。日誌級別預設為 info。

有關更多資訊,請參閱從原始碼構建

cmake -b cmake-out -DEXECUTORCH_ENABLE_LOGGING=ON -DEXECUTORCH_LOG_LEVEL=DEBUG ...

平臺抽象層 (PAL)

ExecuTorch 平臺抽象層(PAL)是一個膠合層(glue layer),負責提供與特定宿主系統的整合。這包括日誌路由、時間戳和中止處理。ExecuTorch 為符合 POSIX 標準的目標提供了預設實現,並在適當的擴充套件下提供了 Android 和 iOS 特定的實現。

對於不符合 POSIX 標準的系統,提供了最小的 no-op PAL 實現。使用者需要覆蓋相關的 PAL 方法以啟用日誌記錄、時間戳和中止。透過使用 -DEXECUTORCH_PAL_DEFAULT=minimal 進行構建可以選擇最小 PAL。

覆蓋 PAL

通常覆蓋預設 PAL 實現是為了將日誌路由到使用者指定的目標,或者在嵌入式系統上提供 PAL 功能。要覆蓋一個或多個 PAL 方法,請執行以下步驟:

預設 PAL 函式是弱符號,因此提供您自己的強符號定義可以在連結時覆蓋它們。為確保您的定義優先,您可能需要確保強定義在連結順序中位於弱定義之前。

有關 PAL 函式簽名,請參閱 runtime/platform/platform.h;有關參考 POSIX 實現,請參閱 runtime/platform/default/posix.cpp

核心庫

在匯出過程中,模型被分解為運算元列表,每個運算元提供一些基本計算。兩個張量相加是一個運算元,卷積也是。每個運算元都需要一個相應的運算元核心(kernel)來在目標硬體上執行計算。ExecuTorch 後端是實現這一目標的首選方法,但並非所有後端都支援所有運算元。

為了處理這個問題,ExecuTorch 提供了兩種實現:可移植(portable)核心庫和最佳化(optimized)核心庫。可移植核心庫以平臺無關的方式提供對所有運算元的全面支援。最佳化庫需要額外的系統要求,但能夠利用多執行緒和向量化程式碼來實現更高的效能。單個構建可以同時使用這兩種庫的運算元,允許在可用時使用最佳化庫,並以可移植庫作為備用(fallback)。

使用移動預構建包時,核心庫的選擇對使用者是透明的。然而,從原始碼構建時,尤其是在嵌入式系統上,這一點很重要。在移動裝置上,優先使用可用的最佳化運算元。有關更多資訊,請參閱ExecuTorch 核心庫概述

選擇性構建

預設情況下,ExecuTorch 附帶所有支援的運算元核心,使其能夠以任何精度執行任何支援的模型。這會導致二進位制檔案大小達到幾兆位元組,這對於生產用例或資源受限的系統可能是不理想的。為了最小化二進位制檔案大小,ExecuTorch 提供了選擇性構建功能,以便僅包含執行特定模型所需的運算元。

請注意,選擇性構建僅適用於可移植和最佳化核心庫。Delegate 不參與選擇性構建,可以透過單獨連結來包含或排除。有關更多資訊,請參閱核心庫選擇性構建

文件

訪問 PyTorch 全面的開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源