バッチ、形状、レイアウト

OpenVINO™ モデルサーバーでのバッチ処理

  • batch_size パラメーターはオプションです。デフォルトでは、バッチサイズはモデルから派生し、モデル・オプティマイザーで設定されます。

  • このパラメーターが数値である場合、サービス開始時のモデルのバッチサイズが変更されます。値 auto も受け入れます - このコマンドにより、提供されるモデルは実行時に受信データに基づいてバッチサイズを自動的に設定します。

  • 入力データによってバッチサイズが変更されるたびに、モデルが再ロードされます。最初の要求では追加の応答遅延が発生する可能性があります。この機能は、同じバッチサイズの順次推論要求に役立ちます。

注: 予測要求でバッチサイズが頻繁に変更される場合、有向非巡回グラフ・スケジューラー逆多重化機能の使用を検討してください。これは、batch_size 自動設定などの要求間のモデルのリロードによる余分なオーバーヘッドがないため、そのような状況ではよりパフォーマンスが高くなります。この機能の使用例は、dynamic_batch_size のドキュメントに記載されています。

  • OpenVINO™ モデルサーバーは、デフォルトで最初の入力の最初の次元のサイズに基づいてバッチサイズを決定します。例えば、入力形状 (1、3、225、225) の場合、バッチサイズは 1 に設定されます。入力形状 (8、3、225、225) では、バッチサイズは 8 に設定されます。--layout パラメーターを適用してバッチ N を別の位置に指定することで、バッチの位置を変更することができます。

注: オブジェクト検出などの一部のモデルは、batch_size パラメーターで変更されたバッチサイズでは正しく動作しません。通常、これらはモデルであり、その出力の最初の次元は入力側とは異なりバッチサイズを表しません。このモデルでのバッチサイズの変更は、shape パラメーターを適切に設定するか、--layout パラメーター (以下を参照) を使用してバッチ位置を指定することにより、ネットワークの再形成で行うことができます。

OpenVINO™ モデルサーバーでのモデルの再形成

  • shape パラメーターはオプションであり、batch_size パラメーターより優先されます。形状が引数として定義されている場合、batch_size 値は無視されます。

  • 形状引数は、必要なパラメーターに合わせてモデルサーバーで有効なモデルを変更できます。3 つの形式の値を受け入れます。

    • "auto" フレーズ - モデルサーバーは、入力データ行列と一致する形状でモデルをリロードします。

    • タプル (例: "(1,3,224,224)") - 単一入力を持つモデルに対するすべての受信要求に使用される形状を定義します。

    • JSON オブジェクト (例: {"input1":"(1,3,224,224)","input2":"(1,3,50,50)"}) - モデルに含まれるすべての入力の形状を定義します。

注: 一部のモデルは形状操作をサポートしていません。形状推論ドキュメントのすべての制限を含む、サポートされているモデルのグラフレイヤーの詳細をご覧ください。モデルを再形成できない場合、モデルは元のパラメーターのままになり、互換性のない入力形式を持つ要求はエラーになります。モデルサーバーは、そのような問題もログに報告します。

注: 予測要求で形状が頻繁に変更される場合、OpenVINO™ のネイティブ動的形状機能の使用を検討してください。このようなエンドポイントは、-1--shape パラメーターに渡すことで構成できます (例: (-1,3,-1,-1))。これ は、任意のバッチ、高さ、幅が受け入れられることを意味します。モデル・オプティマイザーは、動的形状を含む動的モデルをエクスポートできます。その場合、パラメーターは省略できます。形状変更にはモデルのリロードが必要ないため、これは auto よりも優先されるべきです。

モデルの入出力レイアウトの変更

2022.1 以降、モデル・オプティマイザーはデフォルトで元のモデルのレイアウトを保持します。IR 形式に変換する前にモデルで NHWC レイアウトが使用されている場合、それは変換後も保持されます。モデル・オプティマイザーを使用して転置ステップを追加し、レイアウトを目的のレイアウトに変更することもできます。画像データを処理するモデルは通常、NCHW または NHWC レイアウトでエクスポートされます。OpenCV や Pillow などの画像変換ライブラリーは、NHWC レイアウトを使用します。転置操作によって生じるオーバーヘッドを最小限に抑えるには、NHWC レイアウトを使用してモデルをエクスポートすることを推奨します。

NCHW レイアウトのモデルがすでにあり、それを再エクスポートしたくない場合、OpenVINO™ モデルサーバーでは、CLI または config.json を介して --layout パラメーターを使用して実行時に入出力レイアウトを変更できます。前処理ステップとして転置操作を追加してモデルを変更することに注意してください。

レイアウト・パラメーターはオプションです。デフォルトでは、レイアウトは OpenVINO™ モデルから継承されます。このパラメーターを使用して、ONNX 形式と中間表現形式の両方でモデルを調整できます。モデルのエクスポート・ステージでレイアウトが指定されなかった場合、OpenVINO™ モデルサーバーが設定するデフォルトのレイアウトは N... です。これは、既知の次元のみが最初のバッチ (N であり、バッチの後に未定義数の次元が存在することを意味します。スカラーテンソルの場合、デフォルトのレイアウトは ... に設定されます。

レイアウト変更は、NCHWD?... の文字を受け入れるさまざまな組み合わせでサポートされます。各次元は 1 回だけ出現できます。例外は ? で、これは複数回出現する可能性があり、特定の位置に未知の次元があることを意味します。... は、指定された次元の間に未知数の次元が存在することを意味します。

例:

  • NHW - バッチ高さの 3 つの次元があることを意味します。

  • N??C - 4 つの次元があることを意味します。最初の次元はバッチ、4 番目はチャネル、2 番目と 3 番目の位置に 2 つの未知の次元があります。

  • NC...W - 次元数が未定義であることを意味します。最初の次元はバッチ、2 番目はチャネル、最後の次元はです。

次の 2 つの形式の値を指定できます。

  • 文字列 - 例: NCHW (NCHW:NCHW に展開) または NHWC:NCHW。どちらも単一の入力テンソルを持つモデルにのみ適用されます。

  • JSON オブジェクト - 例: {"input1":"NHWC:NCHW", "input2":"NHWC:NCHW", "output1":"CN:NC"}。複数の入力と出力のレイアウトを名前で指定できます。

<target_layout>:<source_layout> 表記は次のことを意味します。

  • <target_layout> 入力データのレイアウトを要求

  • <source_layout> モデルが想定するレイアウト

モデルレイアウトが変更された後、要求は、<target_layout> パラメーターに一致する新しい (転置によって更新された) 形状と一致する必要があります。

例: --layout NHWC:NCHW パラメーターを指定する場合

モデルから継承

期待される新しいメタデーター

shape

(1, 3, 224, 224)

(1, 224, 224, 3)

layout

N...

NHWC

コロン (:) を省略して、単一のレイアウト・パラメーターを渡すこともできます (例: --layout CN)。これにより転置ステップは追加されませんが、モデルサーバーが入力をバッチサイズが 2 番目の位置であるかのように処理できるようになります。これは、エクスポートされたモデルの任意の位置にバッチがあり、--batch_size auto が使用される場合に重要です。これにより、要求のバッチ次元に一致する新しいバッチサイズでモデルがリロードされます。

重要

入力名と出力名が同じモデルでは、レイアウトの変更はサポートされていません。
DAG に含まれるモデルでは、ネットワークの形状と精度と同様に、後続のノードのレイアウトが一致する必要があります。

警告: 2022.1 リリース以降、--layout パラメーターの意味が変更され、設定には後方互換性がありません。以前は NCHW から NHWC に変更するには --layout NHWC を渡す必要がありましたが、現在は --layout NHWC:NCHW を渡す必要があります。以前のバージョンでは前処理ステップは追加されず、エクスポートされたモデルの間違ったレイアウトについて通知するだけでした。