プラグインのテスト¶
OpenVINO テストインフラでは、事前定義された機能テストとユーティリティーのセットを提供します。これらは、OpenVINO パブリック API を使用してプラグインを検証するのに使用されます。すべてのテストは Google Test C++ フレームワークで記述されています。
OpenVINO プラグインテストは、OpenVINO リポジトリー内に構築される openvino::funcSharedTests
の CMake ターゲットに含まれています (CMake を使用したプラグインのビルドガイドを参照)。このライブラリーには、プラグインが特定の機能、サポートされる操作セットのテスト用のパラメーターのセットなどをサポートするかに応じて、プラグインでパラメーター化およびインスタンス化できるテスト定義 (テスト本体) が含まれています。
テスト定義は、テストクラス宣言 (src/tests/functional/plugin/shared/include
を参照) とテストクラス実装 (src/tests/functional/plugin/shared/src
を参照) に分割され、プラグイン適合性テストの次のスコープが含まれます。
動作テスト (
behavior
サブフォルダー) は、プラグインが OpenVINO の基本的な概念 (プラグインの作成、複数のコンパイル済みモデルのサポート、複数の同期および非同期推論要求のサポートなど) を満たしていることを確認する別個のテストグループです。プラグイン固有のパラメーターを使用してテスト定義クラスをインスタンス化する方法の詳細は、次のセクションを参照してください。単一レイヤーのテスト (
single_layer_tests
サブフォルダー) は、デバイス上で特定の単一レイヤーを推論できるかどうか確認します。
openvino::funcSharedTests
ライブラリーのテスト定義に基づくテストのインスタンス化の例:畳み込みテストクラスの宣言から、それがパラメーターの
convLayerTestParamsSet
タプルを持つパラメーター化された GoogleTest ベースのクラスであることが分かります。それに基づいて、テンプレート・プラグインの機能テストのインスタンス化パラメーターのセットを定義します。
const std::vector<ov::element::Type> model_types = { ov::element::f32, ov::element::f16, }; /* ============= 2D Convolution ============= */ const std::vector<std::vector<size_t>> kernels = {{3, 3}, {3, 5}}; const std::vector<std::vector<size_t>> strides = {{1, 1}, {1, 3}}; const std::vector<std::vector<ptrdiff_t>> padBegins = {{0, 0}, {0, 3}}; const std::vector<std::vector<ptrdiff_t>> padEnds = {{0, 0}, {0, 3}}; const std::vector<std::vector<size_t>> dilations = {{1, 1}, {3, 1}}; const std::vector<size_t> numOutChannels = {1, 5}; const std::vector<ov::op::PadType> padTypes = {ov::op::PadType::EXPLICIT, ov::op::PadType::VALID}; const auto conv2DParams_ExplicitPadding = ::testing::Combine(::testing::ValuesIn(kernels), ::testing::ValuesIn(strides), ::testing::ValuesIn(padBegins), ::testing::ValuesIn(padEnds), ::testing::ValuesIn(dilations), ::testing::ValuesIn(numOutChannels), ::testing::Values(ov::op::PadType::EXPLICIT));
標準の GoogleTest マクロ
INSTANTIATE_TEST_SUITE_P
を使用してテスト自体をインスタンス化します。INSTANTIATE_TEST_SUITE_P( Convolution2D_ExplicitPadding, ConvolutionLayerTest, ::testing::Combine(conv2DParams_ExplicitPadding, ::testing::ValuesIn(model_types), ::testing::Values(ov::test::static_shapes_to_test_representation({{1, 3, 30, 30}})), ::testing::Values(ov::test::utils::DEVICE_TEMPLATE)), ConvolutionLayerTest::getTestCaseName);
サブグラフテスト (
subgraph_tests
サブフォルダー)。このグループのテストは、小さなパターンまたはレイヤーの組み合わせをテストするように設計されています。例えば、特定のトポロジーがプラグインで有効になっている場合、TF ResNet-50 では、トポロジー全体をテストに追加する必要はありません。逆に、特定の繰り返しサブグラフまたはパターンをResNet-50
から抽出してテストに追加することができます。サブグラフテストのインスタンス化は、単一レイヤーテストと同じ方法で行われます。注
このようなサブグラフまたはサブグラフテストのパターンは、最初に
openvino::ov_models
ライブラリーに追加し (このライブラリーは小さなov::Model
の事前定義されたセットです)、その後のサブグラフテストで再利用する必要があります。HETERO テスト (
subgraph_tests
サブフォルダー) には、HETERO
シナリオのテスト (手動または自動のアフィニティー設定、query_model
のテスト) が含まれています。-
その他のテストには、他のシナリオのテストが含まれており、次の種類のテストがあります。
実行グラフのテスト
その他
これらのテストを独自のプラグイン開発に使用するには、openvino::funcSharedTests
ライブラリーをテストバイナリーにリンクし、必要なパラメーター値を使用してテストケースをインスタンス化します。
注
プラグインには、ハードウェア固有のユースケースや、広範なテストが必要なユースケースの独自のテストが含まれている場合があります。
テストバイナリーを他のビルド・アーティファクトと一緒にビルドするには、make all
コマンドを使用します。詳細は、CMake を使用してプラグインをビルドを参照してください。
OpenVINO プラグインテストを拡張する方法¶
OpenVINO プラグインテストは皆さんの協力を受け付けています。すべてのプラグインに適用できる共通のテストケース定義を、OpenVINO リポジトリー内の openvino::funcSharedTests
ターゲットに追加します。その後、対応する機能をサポートする他のプラグインが、新しいテストをインスタンス化できます。
注
新しいサブグラフのテストを実装するとき、テストが存在しない場合は、サブグラフの各操作に対して新しい単一レイヤーのテストを追加します。