Machine Learning Platform for AI (PAI)-Bladeは、モデル最適化プロセスをパイプラインに統合するために使用できるPythonメソッドを提供します。 このトピックでは、構文、入力パラメーター、レスポンスなど、Pythonメソッドの詳細について説明します。
最適化
PAI-Bladeは、モデルを最適化するために使用できる最適化方法を提供します。
構文
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
入力パラメーター
パラメーター
データ型
必須
説明
デフォルト値
モデル
複数のタイプ
可
最適化するモデル。
最適化するモデルがTensorFlowモデルの場合、次の形式がサポートされます。
GraphDefオブジェクト。
名前の接尾辞が
. pb
または. pbtxt
.SavedModelファイルのディレクトリを指定する文字列。
最適化するモデルがPyTorchモデルの場合、次の形式がサポートされます。
torch.nn.Moduleオブジェクト。
エクスポートされたtorch.nn.Moduleファイルのディレクトリを指定する文字列。 ファイルの名前の接尾辞は
. pt
.
N/A
optimization_level
STRING
可
最適化レベル。 有効な値 (大文字と小文字を区別しない):
o1: グラフ書き換えやコンパイル最適化などのロスレス最適化
o2: 量子化
N/A
device_type
STRING
可
モデルが実行されるデバイスのタイプ。 有効な値 (大文字と小文字を区別しない):
gpu
cpu
edge (PyTorchでは使用できません)
N/A
入力
リスト [ストリング]
不可
入力ノードの名前。 このパラメーターを指定しないと、システムは自動的に推論します。
None
出力
リスト [ストリング]
不可
出力ノードの名前。 このパラメーターを指定しないと、システムは自動的に推論します。
None
input_shapes
LIST [リスト [ストリング]]
不可
入力テンソルの可能な形状。 このパラメーターを指定すると、特定のシナリオで最適化効果を改善できます。 内部リスト内の要素の数は、モデル内の入力テンソルの数と等しくなければなりません。 各要素は、入力形状を指定する文字列です。 例:
'1*512 '
可能な形状の複数のグループを指定する場合は、外側のリストに要素を追加できます。 たとえば、1つのモデルに可能な形状のグループを指定し、別のモデルに可能な形状の複数のグループを指定する必要があります。 次のサンプルコードに例を示します。[['1*512 ', '3*256']]
[ ['1*512', '3*256'], ['5*512', '9*256'], ['10*512', '27*256'] ]
None
input_ranges
LIST [リスト [ストリング]]
不可
入力テンソルの値の範囲。 内部リスト内の要素の数は、モデル内の入力テンソルの数と等しくなければなりません。 各要素は、値の範囲を指定する文字列です。
値の範囲は、括弧 ([]) 、実数、および文字を使用して指定できます。 例: '[1,2]' 、'[0.3,0.9]' 、および '[a,f]' 。 値の範囲の複数のグループを指定する場合は、外側のリストに要素を追加できます。 たとえば、1つのモデルに値範囲のグループを指定し、別のモデルに値範囲の複数のグループを指定する必要があります。 次のサンプルコードに例を示します。
[['[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モデルに使用されるテストデータは、入力テンソルの複数のタプルで構成されます。 対応するデータ型は、LIST[Tuple[torch.tensor, ]] です。
[]
calib_data
複数のタイプ
不可
モデルを量子化するために使用される校正データ。 このパラメーターは、optimization_levelパラメーターがo2に設定されている場合に必要です。 キャリブレーションデータのデータ型は、テストデータのデータ型と同じである。
[]
custom_ops
リスト [ストリング]
不可
カスタム演算子ライブラリのパス。 モデルがカスタム演算子ライブラリに依存している場合は、カスタム演算子ライブラリのパスをリストに追加する必要があります。
[]
verbose
BOOL
不可
ログを表示するかどうかを指定します。 有効な値:
True: より多くのログを表示します。
False: ログは表示されません。
False
config
blade.Config
不可
高度な設定。 詳細については、ブレードのパラメーターについて説明している次の表をご参照ください。
N/A
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
静的シェイプコンパイルを有効にするかどうかを指定します。 有効な値:
False: 静的シェイプのコンパイルを無効にします。
True: 静的シェイプのコンパイルを有効にします。
False
enable_dynamic_shape_compilation_opt
不可
BOOL
動的シェイプコンパイルを有効にするかどうかを指定します。 有効な値:
False: 動的シェイプコンパイルを無効にします。
True: 動的シェイプコンパイルを有効にします。
True
quant_config
不可
DICT [ストリング、ストリング]
量子化構成。 weight_adjustmentキーのみがサポートされています。 キーは、モデルパラメータを調整することによって精度の損失を減らすかどうかを指定します。 weight_adjustmentの有効な値:
"true": 有効
"false": 無効
None
レスポンス
3つの要素を含むタプルが返されます。 タプルのデータ型は、タプル [Any, OptimizeSpec, OptimizeReport] である。 次の表に、3つの要素を示します。
いいえ
要素
データ型
説明
1
最適化モデル
複数のタイプ
最適化されたモデルのタイプは、元のモデルのタイプと同じです。 たとえば、TensorFlowのSavedModelファイルを最適化するように指定した場合、GraphDefオブジェクトが返されます。
2
外部依存関係
OptimizeSpec
環境変数やコンパイルキャッシュなどの外部依存関係により、最適化の結果が期待どおりになります。 Pythonで
WITH
ステートメントを使用して、外部依存関係を有効にすることができます。 このパラメーターはSDKでは必要ありません。3
最適化レポート
OptimizeReport
詳細については、「最適化レポート」をご参照ください。