C API インターフェイスのデモ (C/C++)#
このデモでは、OpenVINO モデルサーバーの C API を使用して C および C++ アプリケーションを作成する方法を示します。アプリケーションのビルドは、エンドツーエンドの使用フローを示すため Docker コンテナ内で実行されます。C API の完全なドキュメントを確認してください。
デモ画像を準備#
サンプルのあるディレクトリーに移動し、すべての依存関係とサンプルを含むデモ Docker イメージをビルドします。このイメージは、openvino/model_server-capi
という名前です。サンプルイメージには、アプリケーションに必要なダミーモデルと config.json が含まれています。
git clone https://github.com/openvinotoolkit/model_server.git
cd model_server/demos/c_api_minimal_app
make
make コマンドは、ウェブから ovms.tar.gz
パッケージをダウンロードし、c_api_minimal_app/capi_files/demos/MakefileCapi を実行してアプリケーションをビルドします。そして、イメージ環境で /ovms/bin/demo1 アプリケーションと /ovms/bin/demo2_c アプリケーションを実行します。
サンプル・アプリケーションのソースコードは、ovms リポジトリー・パス src/main_capi.c および src/main_capi.cpp にあります。または、ビルドされたイメージを変更します。
docker run -it openvino/model_server-capi:latest cat main_capi.c cat main_capi.cpp
その後、MakefileCapi ルールを使用して、変更したサンプルをリビルドして実行します。
make -f MakefileCapi c
make -f MakefileCapi cpp
main_capi.cpp バイナリーを /ovms/lib の libovms_shared.so
ライブラリーとリンクし、/ovms/include ディレクトリーのヘッダーを使用します。
g++ main_capi.cpp -I/ovms/include -L/ovms/lib -lovms_shared -o main_capi ./main_capi
出力例は次のとおりです:
[2022-12-19 11:39:41.428][14][serving][info][modelinstance.cpp:797] Loaded model dummy; version: 1; batch size: 30; No of InferRequests: 12
[2022-12-19 11:39:41.428][14][serving][debug][modelversionstatus.cpp:88] setAvailable: dummy - 1 (previous state: LOADING) -> error: OK
[2022-12-19 11:39:41.428][14][serving][info][modelversionstatus.cpp:113] STATUS CHANGE: Version 1 of model dummy status change.New status: ( "state": "AVAILABLE", "error_code": "OK" )
[2022-12-19 11:39:41.428][14][serving][info][model.cpp:88] Updating default version for model: dummy, from: 0
[2022-12-19 11:39:41.428][14][serving][info][model.cpp:98] Updated default version for model: dummy, to: 1
[2022-12-19 11:39:41.428][14][modelmanager][info][modelmanager.cpp:478] Configuration file doesn't have custom node libraries property.
[2022-12-19 11:39:41.428][14][modelmanager][info][modelmanager.cpp:495] Configuration file doesn't have pipelines property.
[2022-12-19 11:39:41.428][14][serving][info][servablemanagermodule.cpp:44] ServableManagerModule started Server ready for inference
[2022-12-19 11:39:41.428][14][serving][debug][capi.cpp:606] Processing C-API inference request for servable: dummy; version: 1
[2022-12-19 11:39:41.428][14][serving][debug][modelmanager.cpp:1350] Requesting model: dummy; version: 1.
[2022-12-19 11:39:41.428][14][serving][debug][modelinstance.cpp:1013] Model: dummy, version: 1 already loaded
[2022-12-19 11:39:41.428][14][serving][debug][modelinstance.cpp:1187] Getting infer req duration in model dummy, version 1, nireq 0: 0.002 ms
[2022-12-19 11:39:41.428][478][modelmanager][info][modelmanager.cpp:900] Started model manager thread
[2022-12-19 11:39:41.428][14][serving][debug][modelinstance.cpp:1195] Preprocessing duration in model dummy, version 1, nireq 0: 0.000 ms
[2022-12-19 11:39:41.428][14][serving][debug][modelinstance.cpp:1205] Deserialization duration in model dummy, version 1, nireq 0: 0.019 ms
[2022-12-19 11:39:41.428][479][modelmanager][info][modelmanager.cpp:920] Started cleaner thread
[2022-12-19 11:39:41.429][14][serving][debug][modelinstance.cpp:1213] Prediction duration in model dummy, version 1, nireq 0: 0.369 ms
[2022-12-19 11:39:41.429][14][serving][debug][modelinstance.cpp:1222] Serialization duration in model dummy, version 1, nireq 0: 0.011 ms
[2022-12-19 11:39:41.429][14][serving][debug][modelinstance.cpp:1230] Postprocessing duration in model dummy, version 1, nireq 0: 0.000 ms
[2022-12-19 11:39:41.429][14][serving][debug][capi.cpp:650] Total C-API req processing time: 0.474 ms
output is correct
No more job to be done, will shut down
[2022-12-19 11:39:41.429][14][serving][info][grpcservermodule.cpp:177] GRPCServerModule shutting down
[2022-12-19 11:39:41.429][14][serving][info][grpcservermodule.cpp:180] Shutdown gRPC server
[2022-12-19 11:39:41.429][14][serving][info][grpcservermodule.cpp:184] GRPCServerModule shutdown
[2022-12-19 11:39:41.429][14][serving][info][httpservermodule.cpp:54] HTTPServerModule shutting down [evhttp_server.cc : 320] NET_LOG: event_base_loopexit() exits with value 0 [evhttp_server.cc : 253] NET_LOG: event_base_dispatch() exits with value 1
[2022-12-19 11:39:41.604][14][serving][info][httpservermodule.cpp:59] Shutdown HTTP server
[2022-12-19 11:39:41.604][14][serving][info][servablemanagermodule.cpp:54] ServableManagerModule shutting down
[2022-12-19 11:39:41.604][478][modelmanager][info][modelmanager.cpp:916] Stopped model manager thread
[2022-12-19 11:39:41.604][479][modelmanager][info][modelmanager.cpp:930] Stopped cleaner thread
[2022-12-19 11:39:41.604][14][serving][info][modelmanager.cpp:985] Shutdown model manager
[2022-12-19 11:39:41.604][14][serving][info][modelmanager.cpp:993] Shutdown cleaner thread
[2022-12-19 11:39:41.604][14][serving][info][servablemanagermodule.cpp:57] ServableManagerModule shutdown
カスタムモデルを使用することもできますが、その場合はビルドイメージにコピーし、それに応じて構成とサンプル・アプリケーションを調整する必要があります。結果として得られるデモイメージの変更を永続的にするには、c_api_minimal_app/capi_files/ ディレクトリー内にある次の dockerfile を変更します: Dockerfile.ubuntu Dockerfile.redhat
そして、OS 固有の引数を指定してデモ make を実行します:
make BASE_OS=redhat
Capi ベンチマーク#
このガイドでは、OpenVINO モデルサーバー C-API を使用してベンチマーク・テストを実行する方法を示します。モデルサーバーを起動し、合成データを含む順次要求を送信するマルチスレッド・クライアントからのロードを開始します。特定のモデル、構成、C-API 呼び出しの予想されるスループットとレイテンシーを実証できます。
OpenVINO™ モデルサーバー GitHub リポジトリーのクローンを作成し、トップ・ディレクトリーに移動します。
git clone https://github.com/openvinotoolkit/model_server.git
cd model_server/demos/c_api_minimal_app
ツールをビルド
make
コマンド
docker run openvino/model_server-capi:latest -c /ovms/bin/capi_benchmark
OpenVINO Model Server
Usage:
/ovms/bin/capi_benchmark [OPTION...]
-h, --help Show this help message and exit
--log_level LOG_LEVEL serving log level - one of TRACE, DEBUG,
INFO, WARNING, ERROR (default: ERROR)
--config_path CONFIG_PATH
Config file path for OVMS to read (default:
/ovms/src/test/c_api/config_benchmark.json)
--niter NITER number of inferences to conduct (default:
1000)
--nstreams NSTREAMS nstreams from OVMS configuration (default:
1)
--servable_name MODEL_NAME
Model name to sent request to
--servable_version MODEL_VERSION
workload threads per ireq, if not set
version will be set by default model
version policy (default: 0)
--mode MODE Workload mode.Possible values:
INFERENCE_ONLY, RESET_BUFFER, RESET_REQUEST
(default: INFERENCE_ONLY)
--seed SEED Random values generator seed.
利用可能なモード#
INFERENCE_ONLY (デフォルト) は、C-API を使用して推論を実行するのにかかる時間のみを測定します
RESET_BUFFER は、推論要求データバッファーの再作成にかかる時間を含みます
RESET_REQUEST は、推論要求全体を再作成するのにかかる時間を含みます
サンプルモデルを使用して測定を実行します。config_path
オプションを使用して別のモデルを指定し、目的の構成ファイルを指定できます。
docker run openvino/model_server-capi:latest -c '/ovms/bin/capi_benchmark --servable_name dummy --nstreams 12 --config_path /ovms/demos/config_benchmark.json'
Mode requested: INFERENCE_ONLY
Server ready for inference
Benchmark starting workload
FPS: 235128
Average latency : 0.053ms
main() exit