リモート・コンテキスト¶
ov::RemoteContext class functionality:
デバイス固有の推論コンテキストを表します。
リモートデバイス固有のテンソルを作成できるようにします。
注
プラグインが独自のリモート・コンテキストのパブリック API を提供する場合、その API はヘッダーのみであり、プラグイン・ライブラリーに依存しません。
RemoteContext クラス¶
OpenVINO プラグイン API は、プラグイン固有のリモート・コンテキストの基本クラスとして使用するインターフェイス ov::IRemoteContext を提供します。これに基づいて、コンパイルされたモデルクラスの宣言は次のようになります。
class RemoteContext : public ov::IRemoteContext {
public:
RemoteContext();
const std::string& get_device_name() const override;
const ov::AnyMap& get_property() const override;
ov::SoPtr<IRemoteTensor> create_tensor(const ov::element::Type& type,
const ov::Shape& shape,
const ov::AnyMap& params = {}) override;
private:
std::string m_name;
ov::AnyMap m_property;
};
クラスフィールド¶
サンプルクラスにはいくつかのフィールドがあります。
m_name
- デバイス名m_property
- デバイス固有のコンテキスト・プロパティー。これを使用して、RemoteContext をデバイス固有のタイプにキャストできます。
RemoteContext コンストラクター¶
このコンストラクターは、リモート・コンテキスト・デバイス名とプロパティーを初期化する必要があります。
RemoteContext::RemoteContext() : m_name("TEMPLATE") {}
get_device_name()¶
この関数はリモート・コンテキストからデバイス名を返します。
const std::string& RemoteContext::get_device_name() const {
return m_name;
}
get_property()¶
実装はリモート・コンテキストのプロパティーを返します。
const ov::AnyMap& RemoteContext::get_property() const {
return m_property;
}
create_tensor()¶
このメソッドは、デバイス固有のリモートテンソルを作成します。
ov::SoPtr<ov::IRemoteTensor> RemoteContext::create_tensor(const ov::element::Type& type,
const ov::Shape& shape,
const ov::AnyMap& params) {
std::shared_ptr<ov::IRemoteTensor> tensor;
switch (type) {
case ov::element::boolean:
tensor =
std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::boolean>::value_type>>(type, shape);
break;
case ov::element::bf16:
tensor =
std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::bf16>::value_type>>(type, shape);
break;
case ov::element::f16:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::f16>::value_type>>(type, shape);
break;
case ov::element::f32:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::f32>::value_type>>(type, shape);
break;
case ov::element::f64:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::f64>::value_type>>(type, shape);
break;
case ov::element::i8:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::i8>::value_type>>(type, shape);
break;
case ov::element::i16:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::i16>::value_type>>(type, shape);
break;
case ov::element::i32:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::i32>::value_type>>(type, shape);
break;
case ov::element::i64:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::i64>::value_type>>(type, shape);
break;
case ov::element::u8:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::u8>::value_type>>(type, shape);
break;
case ov::element::u16:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::u16>::value_type>>(type, shape);
break;
case ov::element::u32:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::u32>::value_type>>(type, shape);
break;
case ov::element::u64:
tensor = std::make_shared<VectorTensorImpl<ov::element_type_traits<ov::element::u64>::value_type>>(type, shape);
break;
default:
OPENVINO_THROW("Cannot create remote tensor for unsupported type: ", type);
}
return std::make_shared<VectorImpl>(tensor);
}
デバイス固有のテンソルをサポートする次のステップは、デバイス固有の Remote Tensor クラスを作成することです。