[PyOV] Add properties of GPU plugin to bindings (#15089)

This commit is contained in:
Jan Iwaszkiewicz
2023-01-13 16:14:50 +01:00
committed by GitHub
parent 879a7de889
commit 8178b046f8
3 changed files with 123 additions and 0 deletions

View File

@@ -75,6 +75,42 @@ void regmodule_properties(py::module m) {
ov::intel_cpu::sparse_weights_decompression_rate,
"sparse_weights_decompression_rate");
// Submodule intel_gpu
py::module m_intel_gpu =
m_properties.def_submodule("intel_gpu",
"openvino.runtime.properties.intel_gpu submodule that simulates ov::intel_gpu");
wrap_property_RO(m_intel_gpu, ov::intel_gpu::device_total_mem_size, "device_total_mem_size");
wrap_property_RO(m_intel_gpu, ov::intel_gpu::uarch_version, "uarch_version");
wrap_property_RO(m_intel_gpu, ov::intel_gpu::execution_units_count, "execution_units_count");
wrap_property_RO(m_intel_gpu, ov::intel_gpu::memory_statistics, "memory_statistics");
wrap_property_RW(m_intel_gpu, ov::intel_gpu::enable_loop_unrolling, "enable_loop_unrolling");
// Submodule hint (intel_gpu)
py::module m_intel_gpu_hint = m_intel_gpu.def_submodule(
"hint",
"openvino.runtime.properties.intel_gpu.hint submodule that simulates ov::intel_gpu::hint");
// `ThrottleLevel` enum is conflicting with `priorities.hint.Priority` in bindings.
// `ov::intel_gpu::hint::ThrottleLevel` workaround proxy class:
class ThrottleLevelProxy {};
py::class_<ThrottleLevelProxy, std::shared_ptr<ThrottleLevelProxy>> m_throttle_level(
m_intel_gpu_hint,
"ThrottleLevel",
"openvino.runtime.properties.intel_gpu.hint.ThrottleLevel that simulates ov::intel_gpu::hint::ThrottleLevel");
m_throttle_level.attr("LOW") = ov::intel_gpu::hint::ThrottleLevel::LOW;
m_throttle_level.attr("MEDIUM") = ov::intel_gpu::hint::ThrottleLevel::MEDIUM;
m_throttle_level.attr("HIGH") = ov::intel_gpu::hint::ThrottleLevel::HIGH;
m_throttle_level.attr("DEFAULT") = ov::intel_gpu::hint::ThrottleLevel::DEFAULT;
wrap_property_RW(m_intel_gpu_hint, ov::intel_gpu::hint::queue_throttle, "queue_throttle");
wrap_property_RW(m_intel_gpu_hint, ov::intel_gpu::hint::queue_priority, "queue_priority");
wrap_property_RW(m_intel_gpu_hint, ov::intel_gpu::hint::host_task_priority, "host_task_priority");
wrap_property_RW(m_intel_gpu_hint, ov::intel_gpu::hint::available_device_mem, "available_device_mem");
// Submodule device
py::module m_device =
m_properties.def_submodule("device", "openvino.runtime.properties.device submodule that simulates ov::device");
@@ -132,6 +168,27 @@ void regmodule_properties(py::module m) {
m_capability.attr("WINOGRAD") = ov::device::capability::WINOGRAD;
m_capability.attr("EXPORT_IMPORT") = ov::device::capability::EXPORT_IMPORT;
// Submodule memory_type (intel_gpu)
class FakeMemoryType {};
py::class_<FakeMemoryType, std::shared_ptr<FakeMemoryType>> m_memory_type(
m_intel_gpu,
"MemoryType",
"openvino.runtime.properties.intel_gpu.MemoryType submodule that simulates ov::intel_gpu::memory_type");
m_memory_type.attr("surface") = ov::intel_gpu::memory_type::surface;
m_memory_type.attr("buffer") = ov::intel_gpu::memory_type::buffer;
// Submodule capability (intel_gpu)
class FakeCapabilityGPU {};
py::class_<FakeCapabilityGPU, std::shared_ptr<FakeCapabilityGPU>> m_capability_gpu(
m_intel_gpu,
"CapabilityGPU",
"openvino.runtime.properties.intel_gpu.CapabilityGPU submodule that simulates ov::intel_gpu::capability");
m_capability_gpu.attr("HW_MATMUL") = ov::intel_gpu::capability::HW_MATMUL;
// Submodule log
py::module m_log =
m_properties.def_submodule("log", "openvino.runtime.properties.log submodule that simulates ov::log");

View File

@@ -9,6 +9,7 @@
#include "openvino/runtime/properties.hpp"
#include "openvino/runtime/intel_cpu/properties.hpp"
#include "openvino/runtime/intel_gpu/properties.hpp"
#include "pyopenvino/core/properties/properties.hpp"
namespace py = pybind11;

View File

@@ -90,6 +90,33 @@ def test_properties_enums(ov_enum, expected_values):
assert int(property_obj) == property_int
@pytest.mark.parametrize(
("proxy_enums", "expected_values"),
[
(
(
properties.intel_gpu.hint.ThrottleLevel.LOW,
properties.intel_gpu.hint.ThrottleLevel.MEDIUM,
properties.intel_gpu.hint.ThrottleLevel.HIGH,
properties.intel_gpu.hint.ThrottleLevel.DEFAULT,
),
(
("Priority.LOW", 0),
("Priority.MEDIUM", 1),
("Priority.HIGH", 2),
("Priority.MEDIUM", 1),
),
),
],
)
def test_conflicting_enum(proxy_enums, expected_values):
assert len(proxy_enums) == len(expected_values)
for i in range(len(proxy_enums)):
assert str(proxy_enums[i]) == expected_values[i][0]
assert int(proxy_enums[i]) == expected_values[i][1]
###
# Read-Only properties
###
@@ -110,6 +137,10 @@ def test_properties_enums(ov_enum, expected_values):
(properties.device.gops, "DEVICE_GOPS"),
(properties.device.thermal, "DEVICE_THERMAL"),
(properties.device.capabilities, "OPTIMIZATION_CAPABILITIES"),
(properties.intel_gpu.device_total_mem_size, "GPU_DEVICE_TOTAL_MEM_SIZE"),
(properties.intel_gpu.uarch_version, "GPU_UARCH_VERSION"),
(properties.intel_gpu.execution_units_count, "GPU_EXECUTION_UNITS_COUNT"),
(properties.intel_gpu.memory_statistics, "GPU_MEMORY_STATISTICS"),
],
)
def test_properties_ro(ov_property_ro, expected_value):
@@ -207,6 +238,31 @@ def test_properties_ro(ov_property_ro, expected_value):
"LOG_LEVEL",
((properties.log.Level.NO, properties.log.Level.NO),),
),
(
properties.intel_gpu.enable_loop_unrolling,
"GPU_ENABLE_LOOP_UNROLLING",
((True, True),),
),
(
properties.intel_gpu.hint.queue_throttle,
"GPU_QUEUE_THROTTLE",
((properties.intel_gpu.hint.ThrottleLevel.LOW, properties.hint.Priority.LOW),),
),
(
properties.intel_gpu.hint.queue_priority,
"GPU_QUEUE_PRIORITY",
((properties.hint.Priority.LOW, properties.hint.Priority.LOW),),
),
(
properties.intel_gpu.hint.host_task_priority,
"GPU_HOST_TASK_PRIORITY",
((properties.hint.Priority.LOW, properties.hint.Priority.LOW),),
),
(
properties.intel_gpu.hint.available_device_mem,
"AVAILABLE_DEVICE_MEM_SIZE",
((128, 128),),
),
],
)
def test_properties_rw(ov_property_rw, expected_value, test_values):
@@ -261,6 +317,15 @@ def test_properties_capability():
assert properties.device.Capability.EXPORT_IMPORT == "EXPORT_IMPORT"
def test_properties_memory_type_gpu():
assert properties.intel_gpu.MemoryType.surface == "GPU_SURFACE"
assert properties.intel_gpu.MemoryType.buffer == "GPU_BUFFER"
def test_properties_capability_gpu():
assert properties.intel_gpu.CapabilityGPU.HW_MATMUL == "GPU_HW_MATMUL"
def test_properties_hint_model():
# Temporary imports
from tests.test_utils.test_utils import generate_add_model