• 文件 >
  • torch.utils.mobile_optimizer
捷徑

torch.utils.mobile_optimizer

警告

PyTorch Mobile 已不再積極支援。請查看 ExecuTorch,這是 PyTorch 全新的裝置上推論函式庫。您也可以查看有關 XNNPACKVulkan 委派的文件。

Torch mobile 支援 torch.utils.mobile_optimizer.optimize_for_mobile 公用程式,以在 eval 模式下使用模組執行一系列最佳化程序。該方法採用以下參數:torch.jit.ScriptModule 物件、封鎖清單最佳化集合、保留的方法清單和後端。

對於 CPU 後端,預設情況下,如果最佳化封鎖清單為 None 或空,optimize_for_mobile 將執行以下最佳化:
  • Conv2D + BatchNorm 融合(封鎖清單選項 mobile_optimizer.MobileOptimizerType.CONV_BN_FUSION):此最佳化程序將 Conv2d-BatchNorm2d 折疊到此模組及其所有子模組的 forward 方法中的 Conv2d 中。Conv2d 的權重和偏差會相應更新。

  • 插入和折疊預先封裝的運算(封鎖清單選項 mobile_optimizer.MobileOptimizerType.INSERT_FOLD_PREPACK_OPS):此最佳化程序會重寫圖形,以將 2D 卷積和線性運算替換為其預先封裝的對應項。預先封裝的運算是具有狀態的運算,因為它們需要建立一些狀態,例如權重預先封裝,並在運算執行期間使用此狀態,即預先封裝的權重。XNNPACK 就是這樣一種後端,它提供預先封裝的運算,其核心針對行動平台(例如 ARM CPU)進行了最佳化。權重的預先封裝可實現有效的記憶體存取,從而加快核心執行速度。目前,optimize_for_mobile 程序會重寫圖形,以將 Conv2D/Linear 替換為 1) 為 XNNPACK conv2d/linear 運算預先封裝權重的運算,以及 2) 將預先封裝的權重和啟用作為輸入並產生輸出啟用的運算。由於 1 只需要執行一次,因此我們折疊權重預先封裝,以便僅在模型載入時執行一次。此 optimize_for_mobile 程序會執行 1 和 2,然後折疊,即移除權重預先封裝運算。

  • ReLU/Hardtanh 融合:XNNPACK 運算支援鉗位的融合。也就是說,輸出啟用的鉗位是核心的一部分,包括 2D 卷積和線性運算核心。因此,鉗位實際上是免費的。因此,任何可以表示為鉗位運算的運算,例如 ReLUhardtanh,都可以與先前的 XNNPACK Conv2Dlinear 運算融合。此程序透過尋找跟隨 XNNPACK Conv2D/linear 運算(由先前的程序寫入)的 ReLU/hardtanh 運算來重寫圖形,並將它們融合在一起。

  • Dropout 移除(封鎖清單選項 mobile_optimizer.MobileOptimizerType.REMOVE_DROPOUT):當訓練為 false 時,此最佳化程序會從此模組中移除 dropoutdropout_ 節點。

  • Conv 封裝參數提升(封鎖清單選項 mobile_optimizer.MobileOptimizerType.HOIST_CONV_PACKED_PARAMS):此最佳化程序將卷積封裝參數移動到根模組,以便可以刪除卷積結構。這會減小模型大小,而不會影響數值。

  • Add/ReLU 融合(封鎖清單選項 mobile_optimizer.MobileOptimizerType.FUSE_ADD_RELU):此程序會尋找跟隨 add 運算的 relu 運算的實例,並將它們融合為單個 add_relu

對於 Vulkan 後端,預設情況下,如果最佳化封鎖清單為 None 或空,optimize_for_mobile 將執行以下最佳化:
  • 自動 GPU 傳輸(封鎖清單選項 mobile_optimizer.MobileOptimizerType.VULKAN_AUTOMATIC_GPU_TRANSFER):此最佳化程序會重寫圖形,以便將輸入和輸出資料移至和移出 GPU 成為模型的一部分。

optimize_for_mobile 還會調用 freeze_module 程序,該程序僅保留 forward 方法。如果您有其他需要保留的方法,請將它們新增到保留方法清單中,然後傳遞到該方法中。

torch.utils.mobile_optimizer.optimize_for_mobile(script_module, optimization_blocklist=None, preserved_methods=None, backend='CPU')[source][source]

針對行動部署最佳化 torch script 模組。

參數
  • script_module (ScriptModule) – 類型為 ScriptModule 的 torch script 模組的實例。

  • optimization_blocklist (Optional[Set[_MobileOptimizerType]]) – 類型為 MobileOptimizerType 的集合。當未傳遞集合時,最佳化方法將執行所有最佳化程序;否則,最佳化方法將執行不包含在 optimization_blocklist 中的最佳化程序。

  • preserved_methods (Optional[List]) – 調用 freeze_module 程序時需要保留的方法清單

  • backend (str) – 用於執行結果模型的裝置類型('CPU'(預設)、'Vulkan' 或 'Metal')。

傳回

一個新的最佳化 torch script 模組

傳回類型

RecursiveScriptModule

文件

存取 PyTorch 的全面開發人員文件

檢視文件

教學課程

取得適用於初學者和高級開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得問題解答

檢視資源