CPU 拡張#

OpenVINO でサポートされていない CPU レイヤーは、共有ライブラリーとして実装できます。CPU 拡張機能として OVMS にロードされていると、モデルの実行に役立ちます。ここで示す例は、OpenVINO™ リポジトリーのコード (拡張テンプレート) に基づいています。

これには、既存の公開モデルの多くに適用できる Relu レイヤーの実証的な実装が含まれています。モデルサーバーに実装が表示されると、カスタム拡張機能の実行に関する情報がログに記録されます。

cpu_extension ライブラリーの作成#

モデルサーバーのリポジトリーのルート・ディレクトリーで make cpu_extension BASE_OS=ubuntu を実行して、ライブラリーをコンパイルします。このライブラリーの実装は、OpenVINO™ リポジトリーのテンプレートとは若干異なっており、SampleCpuExtension directory ディレクトリーで参照できます。

lib フォルダー内に共有ライブラリーが生成されます。このようなライブラリーは、--cpu_extension 引数を使用してモデルサーバーを実行する際に使用できます。

git clone https://github.com/openvinotoolkit/model_server.git 
cd model_server 
# UBI ベースイメージを使用する場合は 'redhat` に置き換えます 
export BASE_OS=ubuntu 
make cpu_extension BASE_OS=${BASE_OS}

resnet50 モデルの準備#

cpu_extension ライブラリーの使用法を示すために、resnet モデルにいくつかの小さな変更を加えています。このサンプルでは、ReLU レイヤータイプの 1 つを CustomReLU に変更しています。これにより、このレイヤーは cpu_extension を利用します。

mkdir -p resnet50-binary-0001/1 
curl https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml -o resnet50-binary-0001/1/resnet50-binary-0001.xml 
curl https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin -o resnet50-binary-0001/1/resnet50-binary-0001.bin sed -i '0,/ReLU/s//CustomReLU/' resnet50-binary-0001/1/resnet50-binary-0001.xml

OVMS のデプロイ#

$ docker run -it --rm -p 9000:9000 -v `pwd`/lib/${BASE_OS}:/extension:ro -v `pwd`/resnet50-binary-0001:/resnet openvino/model_server \
 --port 9000 --model_name resnet --model_path /resnet --cpu_extension /extension/libcustom_relu_cpu_extension.so

OpenVINO 拡張の詳細については、こちらをご覧ください。