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

torch.utils.mobile_optimizer

警告

此 API 處於測試階段,在不久的將來可能會有所變更。

Torch 行動版支援 torch.utils.mobile_optimizer.optimize_for_mobile 公用程式,可在模組處於評估模式時執行最佳化傳遞清單。該方法採用以下參數: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_ 節點。

  • 卷積封裝參數提升(區塊清單選項 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')[原始碼]

最佳化 torch 腳本模組以進行行動部署。

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

  • optimization_blocklist (Optional[Set[_MobileOptimizerType]]) – 一個 MobileOptimizerType 類型的集合。當未傳遞集合時,優化方法將運行所有優化器遍歷;否則,優化器方法將運行未包含在 optimization_blocklist 內的優化器遍歷。

  • preserved_methods (Optional[List]) – 在調用 freeze_module 遍歷時需要保留的方法列表。

  • backend (str) – 用於運行結果模型的設備類型(「CPU」(預設)、「Vulkan」或「Metal」)。

回傳值

一個新的經過優化的 torch script 模組

回傳類型

RecursiveScriptModule

文件

存取 PyTorch 的完整開發者文件

查看文件

教學課程

取得適用於初學者和進階開發者的深入教學課程

查看教學課程

資源

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

查看資源