| #!/usr/bin/env python3 | |
| # Copyright 2022 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| import pathlib | |
| import unittest | |
| from common.benchmark_definition import IREE_DRIVERS_INFOS | |
| from common.benchmark_suite import BenchmarkCase, BenchmarkSuite | |
| from e2e_test_framework.definitions import common_definitions, iree_definitions | |
| from e2e_test_artifacts import iree_artifacts | |
| class BenchmarkSuiteTest(unittest.TestCase): | |
| def test_filter_benchmarks(self): | |
| model = common_definitions.Model( | |
| id="model", | |
| name="model", | |
| tags=[], | |
| source_type=common_definitions.ModelSourceType.EXPORTED_STABLEHLO_MLIR, | |
| source_url="", | |
| entry_function="predict", | |
| input_types=["1xf32"], | |
| ) | |
| exec_config = iree_definitions.ModuleExecutionConfig.build( | |
| id="exec", | |
| tags=[], | |
| loader=iree_definitions.RuntimeLoader.EMBEDDED_ELF, | |
| driver=iree_definitions.RuntimeDriver.LOCAL_SYNC, | |
| ) | |
| device_spec = common_definitions.DeviceSpec.build( | |
| id="dev", | |
| device_name="dev", | |
| architecture=common_definitions.DeviceArchitecture.RV64_GENERIC, | |
| host_environment=common_definitions.HostEnvironment.LINUX_X86_64, | |
| device_parameters=[], | |
| tags=[], | |
| ) | |
| compile_target = iree_definitions.CompileTarget( | |
| target_backend=iree_definitions.TargetBackend.LLVM_CPU, | |
| target_architecture=common_definitions.DeviceArchitecture.RV64_GENERIC, | |
| target_abi=iree_definitions.TargetABI.LINUX_GNU, | |
| ) | |
| dummy_run_config = iree_definitions.E2EModelRunConfig.build( | |
| module_generation_config=iree_definitions.ModuleGenerationConfig.build( | |
| imported_model=iree_definitions.ImportedModel.from_model(model), | |
| compile_config=iree_definitions.CompileConfig.build( | |
| id="1", tags=[], compile_targets=[compile_target] | |
| ), | |
| ), | |
| module_execution_config=exec_config, | |
| target_device_spec=device_spec, | |
| input_data=common_definitions.ZEROS_MODEL_INPUT_DATA, | |
| tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE, | |
| ) | |
| case1 = BenchmarkCase( | |
| model_name="deepnet", | |
| model_tags=[], | |
| bench_mode=["1-thread", "full-inference"], | |
| target_arch=common_definitions.DeviceArchitecture.ARMV8_2_A_GENERIC, | |
| driver_info=IREE_DRIVERS_INFOS["iree-llvm-cpu"], | |
| benchmark_case_dir=pathlib.Path("case1"), | |
| benchmark_tool_name="tool", | |
| run_config=dummy_run_config, | |
| ) | |
| case2 = BenchmarkCase( | |
| model_name="deepnetv2", | |
| model_tags=["f32"], | |
| bench_mode=["full-inference"], | |
| target_arch=common_definitions.DeviceArchitecture.ARM_VALHALL, | |
| driver_info=IREE_DRIVERS_INFOS["iree-vulkan"], | |
| benchmark_case_dir=pathlib.Path("case2"), | |
| benchmark_tool_name="tool", | |
| run_config=dummy_run_config, | |
| ) | |
| case3 = BenchmarkCase( | |
| model_name="deepnetv3", | |
| model_tags=["f32"], | |
| bench_mode=["full-inference"], | |
| target_arch=common_definitions.DeviceArchitecture.X86_64_CASCADELAKE, | |
| driver_info=IREE_DRIVERS_INFOS["iree-llvm-cpu-sync"], | |
| benchmark_case_dir=pathlib.Path("case3"), | |
| benchmark_tool_name="tool", | |
| run_config=dummy_run_config, | |
| ) | |
| suite = BenchmarkSuite([case1, case2, case3]) | |
| cpu_and_gpu_benchmarks = suite.filter_benchmarks( | |
| available_drivers=["local-task", "vulkan"], | |
| available_loaders=["embedded-elf"], | |
| target_architectures=[ | |
| common_definitions.DeviceArchitecture.ARMV8_2_A_GENERIC, | |
| common_definitions.DeviceArchitecture.ARM_VALHALL, | |
| ], | |
| driver_filter=None, | |
| mode_filter=".*full-inference.*", | |
| model_name_filter="deepnet.*", | |
| ) | |
| gpu_benchmarks = suite.filter_benchmarks( | |
| available_drivers=["local-task", "vulkan"], | |
| available_loaders=["embedded-elf"], | |
| target_architectures=[ | |
| common_definitions.DeviceArchitecture.ARM_VALHALL, | |
| ], | |
| driver_filter="vulkan", | |
| mode_filter=".*full-inference.*", | |
| model_name_filter="deepnet.*", | |
| ) | |
| all_benchmarks = suite.filter_benchmarks( | |
| available_drivers=None, | |
| target_architectures=None, | |
| driver_filter=None, | |
| mode_filter=None, | |
| model_name_filter=None, | |
| ) | |
| self.assertEqual(cpu_and_gpu_benchmarks, [case1, case2]) | |
| self.assertEqual(gpu_benchmarks, [case2]) | |
| self.assertEqual(all_benchmarks, [case1, case2, case3]) | |
| def test_load_from_run_configs(self): | |
| model_tflite = common_definitions.Model( | |
| id="tflite", | |
| name="model_tflite", | |
| tags=[], | |
| source_type=common_definitions.ModelSourceType.EXPORTED_TFLITE, | |
| source_url="", | |
| entry_function="predict", | |
| input_types=["1xf32"], | |
| ) | |
| model_tf = common_definitions.Model( | |
| id="tf", | |
| name="model_tf", | |
| tags=["fp32"], | |
| source_type=common_definitions.ModelSourceType.EXPORTED_STABLEHLO_MLIR, | |
| source_url="", | |
| entry_function="predict", | |
| input_types=["1xf32"], | |
| ) | |
| exec_config_a = iree_definitions.ModuleExecutionConfig.build( | |
| id="exec_a", | |
| tags=["defaults"], | |
| loader=iree_definitions.RuntimeLoader.EMBEDDED_ELF, | |
| driver=iree_definitions.RuntimeDriver.LOCAL_SYNC, | |
| ) | |
| exec_config_b = iree_definitions.ModuleExecutionConfig.build( | |
| id="exec_b", | |
| tags=["experimental"], | |
| loader=iree_definitions.RuntimeLoader.EMBEDDED_ELF, | |
| driver=iree_definitions.RuntimeDriver.LOCAL_TASK, | |
| ) | |
| device_spec_a = common_definitions.DeviceSpec.build( | |
| id="dev_a", | |
| device_name="a", | |
| architecture=common_definitions.DeviceArchitecture.RV32_GENERIC, | |
| host_environment=common_definitions.HostEnvironment.LINUX_X86_64, | |
| device_parameters=[], | |
| tags=[], | |
| ) | |
| device_spec_b = common_definitions.DeviceSpec.build( | |
| id="dev_b", | |
| device_name="b", | |
| architecture=common_definitions.DeviceArchitecture.RV64_GENERIC, | |
| host_environment=common_definitions.HostEnvironment.LINUX_X86_64, | |
| device_parameters=[], | |
| tags=[], | |
| ) | |
| compile_target = iree_definitions.CompileTarget( | |
| target_backend=iree_definitions.TargetBackend.LLVM_CPU, | |
| target_architecture=common_definitions.DeviceArchitecture.RV64_GENERIC, | |
| target_abi=iree_definitions.TargetABI.LINUX_GNU, | |
| ) | |
| run_config_a = iree_definitions.E2EModelRunConfig.build( | |
| module_generation_config=iree_definitions.ModuleGenerationConfig.build( | |
| imported_model=iree_definitions.ImportedModel.from_model(model_tflite), | |
| compile_config=iree_definitions.CompileConfig.build( | |
| id="1", tags=[], compile_targets=[compile_target] | |
| ), | |
| ), | |
| module_execution_config=exec_config_a, | |
| target_device_spec=device_spec_a, | |
| input_data=common_definitions.ZEROS_MODEL_INPUT_DATA, | |
| tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE, | |
| ) | |
| run_config_b = iree_definitions.E2EModelRunConfig.build( | |
| module_generation_config=iree_definitions.ModuleGenerationConfig.build( | |
| imported_model=iree_definitions.ImportedModel.from_model(model_tflite), | |
| compile_config=iree_definitions.CompileConfig.build( | |
| id="2", tags=[], compile_targets=[compile_target] | |
| ), | |
| ), | |
| module_execution_config=exec_config_b, | |
| target_device_spec=device_spec_b, | |
| input_data=common_definitions.ZEROS_MODEL_INPUT_DATA, | |
| tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE, | |
| ) | |
| run_config_c = iree_definitions.E2EModelRunConfig.build( | |
| module_generation_config=iree_definitions.ModuleGenerationConfig.build( | |
| imported_model=iree_definitions.ImportedModel.from_model(model_tf), | |
| compile_config=iree_definitions.CompileConfig.build( | |
| id="3", tags=[], compile_targets=[compile_target] | |
| ), | |
| ), | |
| module_execution_config=exec_config_a, | |
| target_device_spec=device_spec_a, | |
| input_data=common_definitions.ZEROS_MODEL_INPUT_DATA, | |
| tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE, | |
| ) | |
| run_configs = [run_config_a, run_config_b, run_config_c] | |
| root_dir = pathlib.Path("root") | |
| suite = BenchmarkSuite.load_from_run_configs( | |
| run_configs=run_configs, root_benchmark_dir=root_dir | |
| ) | |
| loaded_run_configs = [case.run_config for case in suite.filter_benchmarks()] | |
| self.assertEqual( | |
| loaded_run_configs, | |
| [ | |
| run_config_a, | |
| run_config_b, | |
| run_config_c, | |
| ], | |
| ) | |
| run_config_c_case_dir = pathlib.Path( | |
| iree_artifacts.get_module_dir_path( | |
| run_config_c.module_generation_config, root_dir | |
| ) | |
| ) | |
| self.assertEqual( | |
| suite.filter_benchmarks( | |
| target_architectures=[ | |
| common_definitions.DeviceArchitecture.RV32_GENERIC | |
| ], | |
| model_name_filter="model_tf.*fp32", | |
| mode_filter="defaults", | |
| ), | |
| [ | |
| BenchmarkCase( | |
| model_name=model_tf.name, | |
| model_tags=model_tf.tags, | |
| bench_mode=exec_config_a.tags, | |
| target_arch=common_definitions.DeviceArchitecture.RV32_GENERIC, | |
| driver_info=IREE_DRIVERS_INFOS["iree-llvm-cpu-sync"], | |
| benchmark_tool_name="iree-benchmark-module", | |
| benchmark_case_dir=run_config_c_case_dir, | |
| run_config=run_config_c, | |
| ) | |
| ], | |
| ) | |
| if __name__ == "__main__": | |
| unittest.main() |