2222import nncf
2323from nncf .common .logging .track_progress import track
2424from tests .post_training .pipelines .base import DEFAULT_VAL_THREADS
25+ from tests .post_training .pipelines .base import FX_BACKENDS
2526from tests .post_training .pipelines .base import ErrorReport
2627from tests .post_training .pipelines .base import PTQTestPipeline
2728
@@ -35,18 +36,15 @@ def prepare_calibration_dataset(self):
3536
3637 self .calibration_dataset = nncf .Dataset (loader , self .get_transform_calibration_fn ())
3738
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+ ):
4746
4847 core = ov .Core ()
49-
5048 if os .environ .get ("INFERENCE_NUM_THREADS" ):
5149 # Set CPU_THREADS_NUM for OpenVINO inference
5250 inference_num_threads = os .environ .get ("INFERENCE_NUM_THREADS" )
@@ -75,6 +73,34 @@ def process_result(request, userdata):
7573 references [i ] = target
7674
7775 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 )
78104
79105 acc_top1 = accuracy_score (predictions , references )
80106
0 commit comments