モデル・リポジトリーの準備¶
OpenVINO™ モデルサーバーによって提供される AI モデルは、次の 5 つの形式でなければいけません。
OpenVINO IR: グラフは .bin および .xml ファイルで表されます。
ONNX: .onnx ファイルを使用します
PaddlePaddle: .pdiparams および .pdmodel ファイルを使用します
TensorFlow: SavedModel、MetaGraph、またはフリーズされた Protobuf 形式を使用します
TensorFlow Lite: .tflite ファイルを使用します
他の形式でトレーニングされたモデルを使用するには、それらを変換する必要があります。これには、OpenVINO の IR 用変換ツール、または ONNX 用のコンバーターを使用します。
モデルは、次のルールに従って、特定のディレクトリー構造に配置およびマウントされる必要があります: モデルがクラウドストレージでホストされている場合、正常にインポートするにはモデルをフリーズします。
tree models/
models/
├── model1
│ ├── 1
│ │ ├── ir_model.bin
│ │ └── ir_model.xml
│ └── 2
│ ├── ir_model.bin
│ └── ir_model.xml
├── model2
│ └── 1
│ ├── ir_model.bin
│ ├── ir_model.xml
│ └── mapping_config.json
├── model3
│ └── 1
│ └── model.onnx
├── model4
│ └── 1
│ ├── model.pdiparams
│ └── model.pdmodel
├── model5
│ └── 1
│ ├── model.pdiparams
│ └── model.pdmodel
└── model6
└── 1
├── variables
└── saved_model.pb
各モデルは専用のディレクトリーに保存する必要があります。例: model1 と model2 など。
-
各モデルのディレクトリーには、各バージョン (1、2 など) のサブフォルダーが含まれる必要があります。バージョンのフォルダー名は正の整数値である必要があります。
注: バージョンは事前定義されたバージョンポリシーに従って有効になります。クライアントがパラメーターでバージョン番号を指定しない場合、デフォルトで最新バージョンが設定されます。 すべてのバージョンフォルダーには、モデルファイル (IR の場合は .bin と .xml、ONNX の場合は .onnx、Paddlepaddle の場合は .pdiparams と .pdmodel) が含まれます。ファイル名は任意です。
各モデルは、AI グラフの入力テンソルと出力テンソルを定義します。クライアントは、要求入力マップ内の適切なエントリーを配置することによって、データをモデル入力テンソルに渡します。
応答出力マップから予測結果を読み取ることができます。デフォルトでは、OpenVINO™ モデルサーバーは、予測要求と応答の入力名と出力名としてモデルのテンソル名を使用します。クライアントは入力値を要求に渡し、対応する出力名を参照して結果を読み取ります。
クライアント・コードの例を示します。
input_tensorname = 'input'
request.inputs[input_tensorname].CopyFrom(make_tensor_proto(img, shape=(1, 3, 224, 224)))
.....
output_tensorname = 'resnet_v1_50/predictions/Reshape_1'
predictions = make_ndarray(result.outputs[output_tensorname])
-
この動作は、
mapping_config.json
というオプションの .json ファイルを追加することで調整できます。入力キーと出力キーを適切なテンソルにマッピングできます。このマッピングを使用すると、難解なテンソル名を持つモデルに分かりやすい名前を設定できます。以下は、mapping_config.json
の例です。
{
"inputs":{
"tensor_name":"grpc_custom_input_name"
},
"outputs":{
"tensor_name1":"grpc_output_key_name1",
"tensor_name2":"grpc_output_key_name2"
}
}
クラウド・ホスト・モデルの使い方の詳細については、記事を参照してください。