PAI-Blade提供Python介面供您調用,從而將最佳化模型整合在工作流程中。本文介紹這些Python介面的詳細資料,包括簽名格式、輸入參數及返回結果。
optimize
PAI-Blade主要使用optimize介面進行模型最佳化,介面詳情如下:
簽名格式
def optimize( model: Any, optimization_level: str, device_type: str, config: Optional[Config] = None, inputs: Optional[List[str]] = None, outputs: Optional[List[str]] = None, input_shapes: Optional[List[List[str]]] = None, input_ranges: Optional[List[List[str]]] = None, test_data: List[Dict[str, np.ndarray]] = [], calib_data: List[Dict[str, np.ndarray]] = [], custom_ops: List[str] = [], verbose: bool = False, ) -> Tuple[Any, OptimizeSpec, OptimizeReport]: pass
輸入參數
參數
類型
是否必選
描述
預設值
model
多種
是
待最佳化的模型,支援以下類型的模型:
如果最佳化TensorFlow模型,支援以下格式:
GraphDef對象。
GraphDef PB檔案路徑,即以
.pb
或.pbtxt
為尾碼的檔案。SavedModel目錄,字串格式的路徑。
如果最佳化PyTorch模型,支援以下格式:
torch.nn.Module對象。
torch.nn.Module匯出的檔案,字串格式的路徑,該檔案以
.pt
為尾碼。
無
optimization_level
STRING
是
最佳化層級,取值如下(不區分大小寫):
o1:表示無損最佳化,包括圖改寫、編譯最佳化等。
o2:表示量化最佳化。
無
device_type
STRING
是
模型啟動並執行裝置類型,取值如下(不區分大小寫):
gpu
cpu
edge (暫不支援PyTorch)
無
inputs
LIST[STRING]
否
輸入節點名稱。如果不指定該參數,則系統嘗試自動推斷。
None
outputs
LIST[STRING]
否
輸出節點名稱。如果不指定該參數,則系統嘗試自動推斷。
None
input_shapes
LIST[LIST[STRING]]
否
輸入Tensor可能的形狀,用於提升特定情境的最佳化效果。內層列表元素個數必須等於模型輸入Tensor的數量,每個元素是一個字串,表示某種輸入的形狀,例如
'1*512'
。如果有多組可能的形狀,則在外層列表中增加元素即可。例如,有兩個輸入的模型可能有如下形狀或若干組可能的形狀,取值樣本如下:[['1*512', '3*256']]
[ ['1*512', '3*256'], ['5*512', '9*256'], ['10*512', '27*256'] ]
None
input_ranges
LIST[LIST[STRING]]
否
每個輸入Tensor的元素取值範圍。內層列表元素數量必須等於模型輸入Tensor的數量,每個元素是一個字串,表示某種取值範圍。
取值範圍可以使用方括弧加實數或字元表示,例如'[1,2]'、'[0.3,0.9]'及'[a,f]'等。如果有多組可能的取值範圍,則在外層列表中增加元素即可。例如,有兩個輸入的模型可能有如下取值範圍或若干組可能的取值範圍,取值樣本分別如下:
[['[0.1,0.4]', '[a,f]']]
[ ['[0.1,0.4]', '[a,f]'], ['[1.1,1.4]', '[h,l]'], ['[2.1,2.4]', '[n,z]'] ]
None
test_data
多種
否
用於模型執行速度校準的測試資料。對於不同類型的模型,其測試資料格式存在差異,其中:
TensorFlow模型的測試資料為包含若干組feed_dict的列表,類型為LIST[DICT[STRING, np.ndarray]]。
PyTorch模型的測試資料為若干組輸入Tensor Tuple,類型為LIST[Tuple[torch.tensor, ]]。
[]
calib_data
多種
否
用於量化最佳化的校準資料。當最佳化層級為o2時,必須指定該參數。校準資料的資料類型與測試資料相同。
[]
custom_ops
LIST[STRING]
否
自訂運算元庫的路徑。如果模型中包含使用者的自訂運算元庫檔案,需要把依賴的庫檔案路徑放到列表中。
[]
verbose
BOOL
否
是否列印更多日誌,包括如下取值:
True:列印更多日誌
False:無需列印更多日誌
False
config
blade.Config
否
進階配置,詳情請參見下方的blade.Config參數表。
無
blade.Config用於傳遞最佳化的進階參數,其建構函式的簽名如下。
class Config(ABC): def __init__( self, disable_fp16_accuracy_check: bool = False, disable_fp16_perf_check: bool = False, enable_static_shape_compilation_opt: bool = False, enable_dynamic_shape_compilation_opt: bool = True, quant_config: Optional[Dict[str, str]] = None, ) -> None: pass
簽名中的參數含義如下表所示。
表 1. blade.Config 參數
是否必選
類型
描述
預設值
disable_fp16_accuracy_check
否
BOOL
是否在fp16最佳化中開啟準確性校正,取值如下:
False:關閉準確性校正
True:開啟準確性校正
False
disable_fp16_perf_check
否
BOOL
是否在fp16最佳化中開啟效能校正,取值如下:
False:關閉效能校正
True:開啟效能校正
False
enable_static_shape_compilation_opt
否
BOOL
是否開啟固定尺寸的編譯最佳化,即Static Shape模式編譯,取值如下:
False:關閉固定尺寸的編譯最佳化
True:開啟固定尺寸的編譯最佳化
False
enable_dynamic_shape_compilation_opt
否
BOOL
是否開啟動態尺寸的編譯最佳化,即Dynamic Shape模式編譯,取值如下:
False:關閉動態尺寸的編譯最佳化
True:開啟動態尺寸的編譯最佳化
True
quant_config
否
DICT[STRING, STRING]
量化最佳化相關的配置。目前僅支援唯一的key值weight_adjustment,表示是否嘗試調整模型參數以減小量化精度損失。該key值對應的value包括如下取值:
"true":開啟該選項。
"false":關閉該選項。
None
傳回值
返回一個具有三個元素的Tuple,類型為Tuple[Any, OptimizeSpec, OptimizeReport]。其中三個元素的詳細資料如下表所示。
序號
含義
類型
描述
①
最佳化後的模型
多種
其類型與輸入模型相同。例如TensorFlow SavedModel的返回結果是GraphDef對象。
②
最佳化的外部依賴
OptimizeSpec
Python中通過
with
語句使達到預期最佳化效果的外部依賴都生效,該依賴包括環境變數、編譯緩衝等。SDK中暫不需要該參數。③
最佳化報告
OptimizeReport
詳情請參見最佳化報告。