CPU 拡張

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

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

cpu 拡張ライブラリーの作成

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

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

git clone https://github.com/openvinotoolkit/model_server.git
cd model_server
# replace to 'redhat' if using UBI base image
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 拡張の詳細については、こちらをご覧ください。