OpenVINO™ モデルサーバーのデマルチプレクサーによる動的バッチサイズ¶
はじめに¶
このドキュメントでは、モデルをリロードせずに任意のバッチサイズで予測要求を送信するように DAG スケジューラーのパイプラインを構成する方法を示します。
OpenVINO™ モデルサーバーを使用すると、クライアント・アプリケーションから送信された逆多重化推論要求にはさまざまなバッチサイズを指定でき、バッチサイズを変更してもモデルをリロードする必要はありません。
この機能の詳細については、多重分離の動的バッチサイズを参照してください。
注: パイプライン内に存在できる動的デマルチプレクサー (値が
-1
のdemultiply_count
) は 1 つだけです。
Python grpc_predict_resnet.py のサンプル・クライアントを使用して、パイプラインを要求できます。
--dag-batch-size-auto
フラグを使用して、逆多重化機能に必要な次元を入力形状に追加します。この例ではモデル resnet を使用します。
grpc_predict_resnet.py で resnet モデルを使用する場合、スクリプトはサーバーからの出力を処理し、ラベルを含む事前に準備されたファイルを使用して推論結果を表示します。このファイル内では、各画像に正しい認識結果を示す番号が割り当てられています。
ステップ¶
OpenVINO™ モデルサーバー GitHub リポジトリーのクローンを作成し、model_server
ディレクトリーに移動します。
git clone https://github.com/openvinotoolkit/model_server.git
cd model_server
事前トレーニング済みモデルをダウンロード¶
モデルファイルをダウンロードして、models
ディレクトリーに保存します。
mkdir -p models/resnet/1
curl https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml -o models/resnet/1/resnet50-binary-0001.bin -o models/resnet/1/resnet50-binary-0001.xml
chmod -R 755 ./models
最新の OVMS イメージを dockerhub から取得¶
OpenVINO™ モデルサーバーの最新バージョンを Docker Hub から取得します。
docker pull openvino/model_server:latest
OVMS 構成ファイル¶
models
ディレクトリーに移動します。
cd models
config.json
という名前の新しいファイルを作成します。
echo '{
"model_config_list": [
{
"config": {
"name": "resnet",
"base_path": "/models/resnet",
"plugin_config": {
"NUM_STREAMS" : "1"
}
}
}
],
"pipeline_config_list": [
{
"name": "resnet50DAG",
"inputs": [
"0"
],
"demultiply_count" : -1,
"nodes": [
{
"name": "resnetNode",
"model_name": "resnet",
"type": "DL model",
"inputs": [
{
"0": {
"node_name": "request",
"data_item": "0"
}
}
],
"outputs": [
{
"data_item": "1463",
"alias": "1463"
}
]
}
],
"outputs": [
{"1463": {
"node_name": "resnetNode",
"data_item": "1463"}}
]
}
]
}' >> config.json
ダウンロードしたモデルで OVMS Docker コンテナを起動¶
前の手順で取得したイメージを使用して OVMS コンテナを起動し、models
ディレクトリーをマウントします。
docker run --rm -d -v $(pwd):/models -p 9000:9000 openvino/model_server:latest --config_path /models/config.json --port 9000
メタデータの確認¶
cd ../client/python/tensorflow-serving-api/samples
virtualenv .venv
. .venv/bin/activate
pip install -r requirements.txt
python grpc_get_model_metadata.py --grpc_port 9000 --model_name resnet50DAG
...
Getting model metadata for model: resnet50DAG
Inputs metadata:
Input name: 0; shape: [-1, 1, 3, 224, 224]; dtype: DT_FLOAT
Outputs metadata:
Output name: 1463; shape: [-1, 1, 1000]; dtype: DT_FLOAT
注: 動的バッチ機能を使用している間、入力形状と出力形状の両方に追加の次元があり、これは分割バッチサイズを表します。バッチ・サイズ・パラメーターを
--batchsize 8
に設定すると、入力形状が[8,1,3,244,244]
に設定され、出力形状は[8,1,1000]
に設定されます。
クライアントの実行¶
python grpc_predict_resnet.py --grpc_port 9000 --images_numpy_path ../../imgs.npy --labels_numpy_path ../../lbs.npy --input_name 0 --output_name 1463 --model_name resnet50DAG --dag-batch-size-auto --transpose_input False --batchsize 1 > b1.txt && python grpc_predict_resnet.py --grpc_port 9000 --images_numpy_path ../../imgs.npy --labels_numpy_path ../../lbs.npy --input_name 0 --output_name 1463 --model_name resnet50DAG --dag-batch-size-auto --transpose_input False --batchsize 8 > b8.txt;
注: クライアントの実行結果は、現在のディレクトリーの .txt ファイルにあります。
スクリプトの出力¶
b1.txt
に保存された batchsize 1
の出力:
cat b1.txt
Image data range: 0.0 : 255.0
Start processing:
Model name: resnet50DAG
Iterations: 10
Images numpy path: ../../imgs.npy
Numpy file shape: (10, 3, 224, 224)
Iteration 1; Processing time: 21.16 ms; speed 47.25 fps
imagenet top results in a single batch:
0 airliner 404 ; Correct match.
Iteration 2; Processing time: 8.08 ms; speed 123.79 fps
imagenet top results in a single batch:
0 Arctic fox, white fox, Alopex lagopus 279 ; Correct match.
Iteration 3; Processing time: 104.76 ms; speed 9.55 fps
imagenet top results in a single batch:
0 bee 309 ; Correct match.
Iteration 4; Processing time: 8.86 ms; speed 112.83 fps
imagenet top results in a single batch:
0 golden retriever 207 ; Correct match.
Iteration 5; Processing time: 19.05 ms; speed 52.48 fps
imagenet top results in a single batch:
0 gorilla, Gorilla gorilla 366 ; Correct match.
Iteration 6; Processing time: 9.31 ms; speed 107.47 fps
imagenet top results in a single batch:
0 magnetic compass 635 ; Correct match.
Iteration 7; Processing time: 7.10 ms; speed 140.81 fps
imagenet top results in a single batch:
0 peacock 84 ; Correct match.
Iteration 8; Processing time: 6.83 ms; speed 146.50 fps
imagenet top results in a single batch:
0 pelican 144 ; Correct match.
Iteration 9; Processing time: 6.74 ms; speed 148.26 fps
imagenet top results in a single batch:
0 snail 113 ; Correct match.
Iteration 10; Processing time: 7.08 ms; speed 141.26 fps
imagenet top results in a single batch:
0 zebra 340 ; Correct match.
processing time for all iterations
average time: 19.50 ms; average speed: 51.28 fps
median time: 8.00 ms; median speed: 125.00 fps
max time: 104.00 ms; min speed: 9.62 fps
min time: 6.00 ms; max speed: 166.67 fps
time percentile 90: 29.30 ms; speed percentile 90: 34.13 fps
time percentile 50: 8.00 ms; speed percentile 50: 125.00 fps
time standard deviation: 28.63
time variance: 819.45
Classification accuracy: 100.00
b8.txt
に保存された batchsize 8
の出力:
cat b8.txt
Image data range: 0.0 : 255.0
Start processing:
Model name: resnet50DAG
Iterations: 1
Images numpy path: ../../imgs.npy
Numpy file shape: (10, 3, 224, 224)
Iteration 1; Processing time: 121.12 ms; speed 66.05 fps
imagenet top results in a single batch:
0 airliner 404 ; Correct match.
1 Arctic fox, white fox, Alopex lagopus 279 ; Correct match.
2 bee 309 ; Correct match.
3 golden retriever 207 ; Correct match.
4 gorilla, Gorilla gorilla 366 ; Correct match.
5 magnetic compass 635 ; Correct match.
6 peacock 84 ; Correct match.
7 pelican 144 ; Correct match.
processing time for all iterations
average time: 121.00 ms; average speed: 66.12 fps
median time: 121.00 ms; median speed: 66.12 fps
max time: 121.00 ms; min speed: 66.12 fps
min time: 121.00 ms; max speed: 66.12 fps
time percentile 90: 121.00 ms; speed percentile 90: 66.12 fps
time percentile 50: 121.00 ms; speed percentile 50: 66.12 fps
time standard deviation: 0.00
time variance: 0.00
Classification accuracy: 100.00
各反復では、各推論要求の結果とバッチ内の各画像の詳細が表示されます。
この機能により、モデルのリロードによるパフォーマンスへの影響なく、異なるバッチ・サイズ・パラメーターを使用してクライアントを同時に実行することができました。