torch.utils.mobile_optimizer¶
警告
PyTorch Mobile 已不再積極支援。請查看 ExecuTorch,這是 PyTorch 全新的裝置上推論函式庫。您也可以查看有關 XNNPACK 和 Vulkan 委派的文件。
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 卷積和線性運算核心。因此,鉗位實際上是免費的。因此,任何可以表示為鉗位運算的運算,例如
ReLU
或hardtanh
,都可以與先前的 XNNPACKConv2D
或linear
運算融合。此程序透過尋找跟隨 XNNPACKConv2D/linear
運算(由先前的程序寫入)的ReLU/hardtanh
運算來重寫圖形,並將它們融合在一起。Dropout 移除(封鎖清單選項 mobile_optimizer.MobileOptimizerType.REMOVE_DROPOUT):當訓練為 false 時,此最佳化程序會從此模組中移除
dropout
和dropout_
節點。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