blob: 208c35ec7e37f615c142b553abfc2be615af425c [file] [log] [blame]
#!/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()