22
22
import nncf
23
23
from nncf .common .logging .track_progress import track
24
24
from tests .post_training .pipelines .base import DEFAULT_VAL_THREADS
25
+ from tests .post_training .pipelines .base import FX_BACKENDS
25
26
from tests .post_training .pipelines .base import ErrorReport
26
27
from tests .post_training .pipelines .base import PTQTestPipeline
27
28
@@ -35,18 +36,15 @@ def prepare_calibration_dataset(self):
35
36
36
37
self .calibration_dataset = nncf .Dataset (loader , self .get_transform_calibration_fn ())
37
38
38
- def _validate (self ) -> List [ErrorReport ]:
39
- val_dataset = datasets .ImageFolder (root = self .data_dir / "imagenet" / "val" , transform = self .transform )
40
- val_loader = torch .utils .data .DataLoader (val_dataset , batch_size = 1 , num_workers = 2 , shuffle = False )
41
-
42
- dataset_size = len (val_loader )
43
-
44
- # Initialize result tensors for async inference support.
45
- predictions = np .zeros (dataset_size )
46
- references = - 1 * np .ones (dataset_size )
39
+ def _validate_ov (
40
+ self ,
41
+ val_loader : torch .utils .data .DataLoader ,
42
+ predictions : np .ndarray ,
43
+ references : np .ndarray ,
44
+ dataset_size : int ,
45
+ ):
47
46
48
47
core = ov .Core ()
49
-
50
48
if os .environ .get ("INFERENCE_NUM_THREADS" ):
51
49
# Set CPU_THREADS_NUM for OpenVINO inference
52
50
inference_num_threads = os .environ .get ("INFERENCE_NUM_THREADS" )
@@ -75,6 +73,34 @@ def process_result(request, userdata):
75
73
references [i ] = target
76
74
77
75
infer_queue .wait_all ()
76
+ return predictions , references
77
+
78
+ def _validate_torch_compile (
79
+ self , val_loader : torch .utils .data .DataLoader , predictions : np .ndarray , references : np .ndarray
80
+ ):
81
+ compiled_model = torch .compile (self .compressed_model .cpu (), backend = "openvino" )
82
+ for i , (images , target ) in enumerate (val_loader ):
83
+ # W/A for memory leaks when using torch DataLoader and OpenVINO
84
+ pred = compiled_model (images )
85
+ pred = torch .argmax (pred , dim = 1 )
86
+ predictions [i ] = pred .numpy ()
87
+ references [i ] = target .numpy ()
88
+ return predictions , references
89
+
90
+ def _validate (self ) -> List [ErrorReport ]:
91
+ val_dataset = datasets .ImageFolder (root = self .data_dir / "imagenet" / "val" , transform = self .transform )
92
+ val_loader = torch .utils .data .DataLoader (val_dataset , batch_size = 1 , num_workers = 2 , shuffle = False )
93
+
94
+ dataset_size = len (val_loader )
95
+
96
+ # Initialize result tensors for async inference support.
97
+ predictions = np .zeros (dataset_size )
98
+ references = - 1 * np .ones (dataset_size )
99
+
100
+ if self .backend in FX_BACKENDS and self .torch_compile_validation :
101
+ predictions , references = self ._validate_torch_compile (val_loader , predictions , references )
102
+ else :
103
+ predictions , references = self ._validate_ov (val_loader , predictions , references , dataset_size )
78
104
79
105
acc_top1 = accuracy_score (predictions , references )
80
106
0 commit comments