summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/python_demos/OpenVINO_benchmark_app/main.patch
blob: 99afb40e6448af462d85d19b4585bab8879cf1fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
--- /nfs/site/disks/swip_dla_1/resources/inference_engine/2023.3.0_with_dev_tools/1/linux64/suse12/python/openvino/tools/benchmark/main.py	2024-03-01 14:01:50.466871000 -0500
+++ main.py	2024-10-29 11:10:06.569928000 -0400
@@ -7,11 +7,11 @@
 
 from openvino.runtime import Dimension,properties
 
-from openvino.tools.benchmark.benchmark import Benchmark
+import benchmark as openvino_benchmark
 from openvino.tools.benchmark.parameters import parse_args
 from openvino.tools.benchmark.utils.constants import MULTI_DEVICE_NAME, \
     CPU_DEVICE_NAME, GPU_DEVICE_NAME, \
-    BLOB_EXTENSION, AUTO_DEVICE_NAME
+    BIN_EXTENSION, AUTO_DEVICE_NAME
 from openvino.tools.benchmark.utils.inputs_filling import get_input_data
 from openvino.tools.benchmark.utils.logging import logger
 from openvino.tools.benchmark.utils.utils import next_step, get_number_iterations, pre_post_processing, \
@@ -41,13 +41,13 @@
     if args.report_type == "average_counters" and MULTI_DEVICE_NAME in args.target_device:
         raise Exception("only detailed_counters report type is supported for MULTI device")
 
-    _, ext = os.path.splitext(args.path_to_model)
-    is_network_compiled = True if ext == BLOB_EXTENSION else False
-    is_precisiton_set = not (args.input_precision == "" and args.output_precision == "" and args.input_output_precision == "")
+    if args.number_infer_requests != 1 and "FPGA" in args.target_device:
+        logger.warning(f"If the target FPGA design uses JTAG to access the CSRs on the FPGA AI Suite IP "\
+                       "(e.g. the Agilex 5E Premium Development Kit JTAG Design Example), "\
+                       "then the number of inference request must be 1.")
 
-    if is_network_compiled and is_precisiton_set:
-        raise Exception("Cannot set precision for a compiled model. " \
-                        "Please re-compile your model with required precision.")
+    _, ext = os.path.splitext(args.path_to_model)
+    is_network_compiled = True if ext == BIN_EXTENSION else False
 
     return args, is_network_compiled
 
@@ -84,7 +84,7 @@
         # ------------------------------ 2. Loading OpenVINO Runtime -------------------------------------------
         next_step(step_id=2)
 
-        benchmark = Benchmark(args.target_device, args.number_infer_requests,
+        benchmark = openvino_benchmark.Benchmark(args.target_device, args.number_infer_requests,
                               args.number_iterations, args.time, args.api_type, args.inference_only)
 
         if args.extensions:
@@ -166,8 +166,11 @@
             supported_properties = benchmark.core.get_property(device, properties.supported_properties())
             if device not in config.keys():
                 config[device] = {}
-
             ## high-level performance modes
+            # The orginial OV 2022.3 Python API fails with the pc flag, so we comment it out
+            # for both the HETERO and FPGA devices in our patched version of the Python demos
+            if device in ['HETERO', 'FPGA']:
+                continue
             set_performance_hint(device)
 
             if is_flag_set_in_command_line('nireq'):
@@ -429,16 +432,21 @@
             next_step()
 
             start_time = datetime.utcnow()
-            compiled_model = benchmark.core.import_model(args.path_to_model, benchmark.device, device_config)
-            duration_ms = f"{(datetime.utcnow() - start_time).total_seconds() * 1000:.2f}"
-            logger.info(f"Import model took {duration_ms} ms")
-            if statistics:
-                statistics.add_parameters(StatisticsReport.Category.EXECUTION_RESULTS,
-                                          [
-                                              ('import model time (ms)', duration_ms)
-                                          ])
-            app_inputs_info, _ = get_inputs_info(args.shape, args.data_shape, args.layout, args.batch_size, args.scale_values, args.mean_values, compiled_model.inputs)
-            batch_size = get_network_batch_size(app_inputs_info)
+            try:
+                with open(args.path_to_model, "rb") as model_stream:
+                    model_bytes = model_stream.read()
+                compiled_model = benchmark.core.import_model(model_bytes, device_name)
+                duration_ms = f"{(datetime.utcnow() - start_time).total_seconds() * 1000:.2f}"
+                logger.info(f"Import model took {duration_ms} ms")
+                if statistics:
+                    statistics.add_parameters(StatisticsReport.Category.EXECUTION_RESULTS,
+                                            [
+                                                ('import model time (ms)', duration_ms)
+                                            ])
+                app_inputs_info, _ = get_inputs_info(args.shape, args.data_shape, args.layout, args.batch_size, args.scale_values, args.mean_values, compiled_model.inputs)
+                batch_size = get_network_batch_size(app_inputs_info)
+            except Exception as e:
+                raise RuntimeError(f"Cannot open or import compiled model file: {args.path_to_model}. Error: {str(e)}")
 
         # --------------------- 8. Querying optimal runtime parameters --------------------------------------------------
         next_step()
@@ -653,7 +661,7 @@
             exeDevice = compiled_model.get_property("EXECUTION_DEVICES")
             logger.info(f'Execution Devices:{exeDevice}')
         except:
-            pass
+            exeDevice = None
         logger.info(f'Count:            {iteration} iterations')
         logger.info(f'Duration:         {get_duration_in_milliseconds(total_duration_sec):.2f} ms')
         if MULTI_DEVICE_NAME not in device_name:
@@ -692,4 +700,4 @@
                 [('error', str(e))]
             )
             statistics.dump()
-        sys.exit(1)
+        sys.exit(1)
\ No newline at end of file