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
出力例は次のとおりです。
[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