diff --git a/backends/openvino/preprocess.py b/backends/openvino/preprocess.py index 6af45ff63f9..6380d0d3b78 100644 --- a/backends/openvino/preprocess.py +++ b/backends/openvino/preprocess.py @@ -44,7 +44,7 @@ def preprocess( for spec in module_compile_spec: compile_options[spec.key] = spec.value.decode() - compiled = openvino_compile(edge_program.module(), *args, options=compile_options, executorch=True) + compiled = openvino_compile(edge_program.module(), *args, options=compile_options) model_bytes = compiled.export_model() return PreprocessResult(processed_bytes=model_bytes) diff --git a/backends/openvino/tests/models/test_classification.py b/backends/openvino/tests/models/test_classification.py new file mode 100644 index 00000000000..59558b397ab --- /dev/null +++ b/backends/openvino/tests/models/test_classification.py @@ -0,0 +1,34 @@ +from executorch.backends.openvino.tests.ops.base_openvino_op_test import BaseOpenvinoOpTest +import torch +import timm +import torchvision.models as torchvision_models +from transformers import AutoModel + +classifier_params = [ + {'model': ['torchvision', 'resnet50', (1, 3, 224, 224)] }, + {'model': ['torchvision', 'mobilenet_v2', (1, 3, 224, 224)] }, + ] + +# Function to load a model based on the selected suite +def load_model(suite: str, model_name: str): + if suite == "timm": + return timm.create_model(model_name, pretrained=True) + elif suite == "torchvision": + if not hasattr(torchvision_models, model_name): + raise ValueError(f"Model {model_name} not found in torchvision.") + return getattr(torchvision_models, model_name)(pretrained=True) + elif suite == "huggingface": + return AutoModel.from_pretrained(model_name) + else: + raise ValueError(f"Unsupported model suite: {suite}") + +class TestClassifier(BaseOpenvinoOpTest): + + def test_classifier(self): + for params in classifier_params: + with self.subTest(params=params): + module = load_model(params['model'][0], params['model'][1]) + + sample_input = (torch.randn(params['model'][2]),) + + self.execute_layer_test(module, sample_input) diff --git a/backends/openvino/tests/test_openvino_delegate.py b/backends/openvino/tests/test_openvino_delegate.py index bbf61d1ea09..eaabcf2603b 100644 --- a/backends/openvino/tests/test_openvino_delegate.py +++ b/backends/openvino/tests/test_openvino_delegate.py @@ -40,16 +40,25 @@ def parse_arguments(): parser.add_argument( "-p", "--pattern", - help="Pattern to match test files. Provide complete file name to run individual op tests", + help="Pattern to match test files. Provide complete file name to run individual tests", type=str, default="test_*.py", ) + parser.add_argument( + "-t", + "--test_type", + help="Specify the type of tests ('ops' or 'models')", + type=str, + default="ops", + choices={"ops", "models"}, + ) args, ns_args = parser.parse_known_args(namespace=unittest) test_params = {} test_params["device"] = args.device test_params["build_folder"] = args.build_folder test_params["pattern"] = args.pattern + test_params["test_type"] = args.test_type return test_params if __name__ == "__main__": @@ -60,6 +69,6 @@ def parse_arguments(): test_params = parse_arguments() loader.suiteClass.test_params = test_params # Discover all existing op tests in "ops" folder - suite = loader.discover("ops", pattern=test_params['pattern']) + suite = loader.discover(test_params['test_type'], pattern=test_params['pattern']) # Start running tests unittest.TextTestRunner().run(suite)