AI アクセラレーターの使用

テストモデルの準備

ResNet50 モデルをダウンロードします。

mkdir models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models openvino/ubuntu20_dev:latest omz_downloader --name resnet-50-tf --output_dir /models
docker run -u $(id -u):$(id -g) -v ${PWD}/models:/models:rw openvino/ubuntu20_dev:latest omz_converter --name resnet-50-tf --download_dir /models --output_dir /models --precisions FP32
mv ${PWD}/models/public/resnet-50-tf/FP32 ${PWD}/models/public/resnet-50-tf/1

インテル統合 GPU、インテル® データセンター GPU フレックス・シリーズ、およびインテル® Arc™ GPU を使用した Docker コンテナの開始

GPU プラグインは、ディープ・ニューラル・ネットワーク用インテル® コンピューティング・ライブラリー (clDNN) を使用してディープ・ニューラル・ネットワークを推論します。推論の実行には、インテル® HD グラフィックス、インテル® Iris® グラフィックス、インテル® Iris® Xe グラフィックス、インテル® Iris® Xe MAX グラフィックスを含むインテル® プロセッサー・グラフィックスが採用されています。

GPU を OpenVINO モデルサーバーのターゲットデバイスとして使用する前に、次を行う必要があります。

  • 必要なドライバーをインストールします - OpenVINO インストール・ガイドを参照してください。

  • --device /dev/dri 追加パラメーターを使用して Docker コンテナを起動し、デバイス・コンテキストを渡します。

  • --target_device のパラメーターを GPU に設定します。

  • GPU 依存関係を含む openvino/model_server:latest-gpu イメージを使用します。

GPU で推論を実行するには、モデル・サーバー・プロセスのセキュリティー・コンテキスト・アカウントに適切なアクセス許可が必要です。これは、コマンドで指定されたレンダーグループに属している必要があります。

stat -c "group_name=%G group_id=%g" /dev/dri/render*

Docker イメージ内のデフォルトのアカウントは事前構成されています。セキュリティー・コンテキストを変更する場合、次のコマンドを使用してモデルサーバーのコンテナを起動します。

docker run --rm -it  --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) -u $(id -u):$(id -g) \
-v ${PWD}/models/public/resnet-50-tf:/opt/model -p 9001:9001 openvino/model_server:latest-gpu \
--model_path /opt/model --model_name resnet --port 9001 --target_device GPU

GPU デバイスは、Windows Subsystem for Linux 2 (WSL2) を備えた Windows* ホストでも使用できます。このようなシナリオでは、追加の docker パラメーターが必要になります。次のコマンドを参照してください。/dev/dri の代わりにデバイス /dev/dxg を使用してボリューム /usr/lib/wsl をマウントします。

docker run --rm -it  --device=/dev/dxg --volume /usr/lib/wsl:/usr/lib/wsl -u $(id -u):$(id -g) \
-v ${PWD}/models/public/resnet-50-tf:/opt/model -p 9001:9001 openvino/model_server:latest-gpu \
--model_path /opt/model --model_name resnet --port 9001 --target_device GPU

注: パブリック Docker イメージには、バージョン 22.28 (RedHat*) および 22.35 (Ubuntu*) 向けの GPU 用 OpenCL* ドライバーが含まれています。

異なるドライバーのバージョンで OpenVINO モデルサーバーをビルドする必要がある場合は、ソースからのビルドを参照してください。

マルチデバイス・プラグインを使用

複数の推論デバイス (Myriad VPU や CPU など) を利用できる場合は、マルチデバイス・プラグインを有効にすることで推論のスループットを向上することができます。推論要求を複数のデバイスに分散し、負荷を分散します。詳細については、OpenVINO のマルチデバイス・プラグインのドキュメントを参照してください。

OpenVINO モデルサーバーでこの機能を使用するには、次の 2 つのいずれかを選択できます。

  1. .json 構成ファイルを使用して、--target_device パラメーターを MULTI:<DEVICE_1>,<DEVICE_2> の形式で設定します。デバイスの順序によって優先順位が定義され、この場合 device_1 が主な選択になります。

この config.json ファイルの例では、インテル® Movidius™ ニューラル・コンピュート・スティックと CPU をデバイスとして使用して、resnet モデルのマルチデバイス・プラグインをセットアップします。

echo '{"model_config_list": [
   {"config": {
      "name": "resnet",
      "base_path": "/opt/model",
      "batch_size": "1",
      "target_device": "MULTI:GPU,CPU"}
   }]
}' >> models/public/resnet-50-tf/config.json

OpenVINO モデルサーバーを起動するには、説明されている構成ファイルを ./models/config.json として配置し、grpc_workers パラメーターを config.json の nireq フィールドと一致するように設定し、次のように run コマンドを使用します。

docker run -d --rm --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) \
-u $(id -u):$(id -g) -v ${PWD}/models/public/resnet-50-tf/:/opt/model:ro -p 9001:9001 \
openvino/model_server:latest-gpu --config_path /opt/model/config.json --port 9001
  1. 単一モデルのみを使用する場合は、config.json ファイルなしで OpenVINO モデルサーバーを起動できます。これには、次のように run コマンドを追加パラメーターとともに使用します。

docker run -d --rm --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) \
-u $(id -u):$(id -g) -v ${PWD}/models/public/resnet-50-tf/:/opt/model:ro -p 9001:9001 \
openvino/model_server:latest-gpu --model_path /opt/model --model_name resnet --port 9001 --target_device 'MULTI:GPU,CPU'

デプロイされたモデルは、インテル® Movidius™ ニューラル・コンピュート・スティックと CPU の両方で推論を実行します。合計スループットは、CPU とインテル® Movidius™ ニューラル・コンピュート・スティックのスループットの合計にほぼ等しくなります。

ヘテロジニアス・プラグインを使用

HETERO プラグインを使用すると、1 つのモデルの推論負荷を複数のコンピューティング・デバイスに分散できます。そうすることで、ディープラーニング・ネットワークのさまざまな部分を、それぞれの計算タイプに最適なデバイスで実行できます。OpenVINO はネットワークを自動的に分割してプロセスを最適化します。

ヘテロジニアス・プラグインは、--target_device パラメーターを使用して HETERO:<DEVICE_1>,<DEVICE_2> の形式で構成できます。デバイスの順序によって優先順位が定義され、この場合、device_1 がプライマリー、device_2 がフォールバックになります。

これは、GPU をプライマリー・デバイスとして、CPU をフォールバックとして使用するヘテロジニアス・プラグインを使用した構成例です。

echo '{"model_config_list": [
   {"config": {
      "name": "resnet",
      "base_path": "/opt/model",
      "batch_size": "1",
      "target_device": "HETERO:GPU,CPU"}
   }]
}' >> models/public/resnet-50-tf/config.json

AUTO プラグインを使用

Auto デバイス (略して AUTO) は、OpenVINO ツールキットの新しい特別な “仮想” または “プロキシー” デバイスであり、特定のタイプの HW デバイスにバインドされません。AUTO は、(HW デバイスを介して) HW デバイス選択のロジックをコーディングし、そのデバイス上で最適な最適化設定を推定するのに必要なアプリケーションの複雑さを解決します。AUTO は常に最適なデバイスを選択します。そのデバイスでモデルのコンパイルが失敗した場合、AUTO はいずれかのデバイスが成功するまで、次に最適なデバイスでのコンパイルを試みます。デバイスを渡し、Docker イメージに使用するデバイスにアクセスしていることを確認してください。例えば次のようになります。
--device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) -u $(id -u):$(id -g)

以下は、ターゲットデバイスとして AUTO プラグインを使用したコマンドの例です。これには、CPU のほかに GPU (/dev/dri) を有効にする追加の Docker パラメーターが含まれます。

docker run --rm -d --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) \
-u $(id -u):$(id -g) -v ${PWD}/models/public/resnet-50-tf:/opt/model -p 9001:9001 openvino/model_server:latest-gpu \
--model_path /opt/model --model_name resnet --port 9001 \
--target_device AUTO

Auto デバイスプラグインは、プラグインのパフォーマンス・モードを指定できる PERFORMANCE_HINT プラグイン構成プロパティーを使用することもできます。

注: NUM_STREAMS と PERFORMANCE_HINT を同時に使用しないでください。

アプリケーションのパフォーマンス・ヒントを有効にするには、次のコマンドを使用します。

LATENCY

docker run --rm -d --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) -u $(id -u):$(id -g) \
-v ${PWD}/models/public/resnet-50-tf:/opt/model -p 9001:9001 openvino/model_server:latest-gpu \
--model_path /opt/model --model_name resnet --port 9001 \
--plugin_config '{"PERFORMANCE_HINT": "LATENCY"}' \
--target_device AUTO

THROUGHPUT

docker run --rm -d --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) -u $(id -u):$(id -g) \
-v ${PWD}/models/public/resnet-50-tf:/opt/model -p 9001:9001 openvino/model_server:latest-gpu \
--model_path /opt/model --model_name resnet --port 9001 \
--plugin_config '{"PERFORMANCE_HINT": "THROUGHPUT"}' \
--target_device AUTO

注: 現在、GPU デバイスが有効になっている間は、AUTO プラグインを --shape auto パラメーターと同時に使用することはできません。

NVIDIA プラグインを使用

OpenVINO モデルサーバーは、github リポジトリー openvino_contrib の NVIDIA プラグインを使用することで、NVIDIA GPU カードでも使用できます。NVIDIA のサポートを含む OpenVINO モデルサーバーの Docker イメージはソースからビルドできます。

git clone https://github.com/openvinotoolkit/model_server.git
cd model_server
make docker_build NVIDIA=1 OV_USE_BINARY=0
cd ..

ソースからのビルドも確認してください。

NVIDIA サポートを使用してコンテナを実行するコマンドの例:

docker run -it --gpus all -p 9000:9000 -v ${PWD}/models/public/resnet-50-tf:/opt/model openvino/model_server:latest-cuda --model_path /opt/model --model_name resnet --port 9000 --target_device NVIDIA

NVIDIA プラグインでサポートされていないレイヤーを持つモデルの場合は、コロンの後にリストされる複数のデバイスを利用できる仮想プラグイン HETERO を使用できます。

docker run -it --gpus all -p 9000:9000 -v ${PWD}/models/public/resnet-50-tf:/opt/model openvino/model_server:latest-cuda --model_path /opt/model --model_name resnet --port 9000 --target_device HETERO:NVIDIA,CPU

サポートされている構成パラメーターレイヤーを確認してください

現在、AUTO および MULTI 仮想プラグインは、代替デバイスとして NVIDIA プラグインをサポートしていません。