blob: 2ab342dc08db0c11f63f92469b34dfa432c283c5 [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 unittest
from e2e_test_framework.definitions import common_definitions, iree_definitions
import export_benchmark_config
COMMON_MODEL = common_definitions.Model(
id="tflite",
name="model_tflite",
tags=[],
source_type=common_definitions.ModelSourceType.EXPORTED_TFLITE,
source_url="",
entry_function="predict",
input_types=["1xf32"])
COMMON_GEN_CONFIG = iree_definitions.ModuleGenerationConfig.build(
imported_model=iree_definitions.ImportedModel.from_model(COMMON_MODEL),
compile_config=iree_definitions.CompileConfig.build(
id="1",
tags=[],
compile_targets=[
iree_definitions.CompileTarget(
target_backend=iree_definitions.TargetBackend.LLVM_CPU,
target_architecture=common_definitions.DeviceArchitecture.
RV64_GENERIC,
target_abi=iree_definitions.TargetABI.LINUX_GNU)
]))
COMMON_EXEC_CONFIG = iree_definitions.ModuleExecutionConfig.build(
id="exec",
tags=[],
loader=iree_definitions.RuntimeLoader.EMBEDDED_ELF,
driver=iree_definitions.RuntimeDriver.LOCAL_SYNC)
class ExportBenchmarkConfigTest(unittest.TestCase):
def test_filter_and_group_run_configs_set_all_filters(self):
device_spec_a = common_definitions.DeviceSpec.build(
id="dev_a_cpu",
device_name="dev_a_cpu",
architecture=common_definitions.DeviceArchitecture.RV64_GENERIC,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_b = common_definitions.DeviceSpec.build(
id="dev_a_gpu",
device_name="dev_a_gpu",
architecture=common_definitions.DeviceArchitecture.ARM_VALHALL,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_c = common_definitions.DeviceSpec.build(
id="dev_c",
device_name="dev_c",
architecture=common_definitions.DeviceArchitecture.CUDA_SM80,
host_environment=common_definitions.HostEnvironment.LINUX_X86_64,
tags=[])
matched_run_config_a = iree_definitions.E2EModelRunConfig.build(
module_generation_config=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_a,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
unmatched_run_config_b = iree_definitions.E2EModelRunConfig.build(
module_generation_config=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_b,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
matched_run_config_c = iree_definitions.E2EModelRunConfig.build(
module_generation_config=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_c,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
matchers = [(lambda config: config.target_device_spec.architecture.
architecture == "cuda"),
(lambda config: config.target_device_spec.host_environment.
platform == "android")]
run_config_map = export_benchmark_config.filter_and_group_run_configs(
run_configs=[
matched_run_config_a, unmatched_run_config_b, matched_run_config_c
],
target_device_names={"dev_a_cpu", "dev_c"},
preset_matchers=matchers)
self.assertEqual(run_config_map, {
"dev_a_cpu": [matched_run_config_a],
"dev_c": [matched_run_config_c],
})
def test_filter_and_group_run_configs_include_all(self):
device_spec_a = common_definitions.DeviceSpec.build(
id="dev_a_cpu",
device_name="dev_a_cpu",
architecture=common_definitions.DeviceArchitecture.RV64_GENERIC,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_b = common_definitions.DeviceSpec.build(
id="dev_a_gpu",
device_name="dev_a_gpu",
architecture=common_definitions.DeviceArchitecture.ARM_VALHALL,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_c = common_definitions.DeviceSpec.build(
id="dev_a_second_gpu",
device_name="dev_a_gpu",
architecture=common_definitions.DeviceArchitecture.QUALCOMM_ADRENO,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
run_config_a = iree_definitions.E2EModelRunConfig.build(
module_generation_config=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
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=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
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=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_c,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
run_config_map = export_benchmark_config.filter_and_group_run_configs(
run_configs=[run_config_a, run_config_b, run_config_c])
self.maxDiff = 100000
self.assertEqual(run_config_map, {
"dev_a_cpu": [run_config_a],
"dev_a_gpu": [run_config_b, run_config_c],
})
def test_filter_and_group_run_configs_set_target_device_names(self):
device_spec_a = common_definitions.DeviceSpec.build(
id="dev_a",
device_name="dev_a",
architecture=common_definitions.DeviceArchitecture.RV64_GENERIC,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_b = common_definitions.DeviceSpec.build(
id="dev_b",
device_name="dev_b",
architecture=common_definitions.DeviceArchitecture.ARM_VALHALL,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
run_config_a = iree_definitions.E2EModelRunConfig.build(
module_generation_config=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
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=COMMON_GEN_CONFIG,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_b,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
run_config_map = export_benchmark_config.filter_and_group_run_configs(
run_configs=[run_config_a, run_config_b],
target_device_names={"dev_a", "dev_b"})
self.assertEqual(run_config_map, {
"dev_a": [run_config_a],
"dev_b": [run_config_b],
})
def test_filter_and_group_run_configs_set_preset_matchers(self):
small_model = common_definitions.Model(
id="small_model",
name="small_model",
tags=[],
source_type=common_definitions.ModelSourceType.EXPORTED_TFLITE,
source_url="",
entry_function="predict",
input_types=["1xf32"])
big_model = common_definitions.Model(
id="big_model",
name="big_model",
tags=[],
source_type=common_definitions.ModelSourceType.EXPORTED_TFLITE,
source_url="",
entry_function="predict",
input_types=["1xf32"])
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)
compile_config = iree_definitions.CompileConfig.build(
id="1", tags=[], compile_targets=[compile_target])
small_gen_config = iree_definitions.ModuleGenerationConfig.build(
imported_model=iree_definitions.ImportedModel.from_model(small_model),
compile_config=compile_config)
big_gen_config = iree_definitions.ModuleGenerationConfig.build(
imported_model=iree_definitions.ImportedModel.from_model(big_model),
compile_config=compile_config)
device_spec_a = common_definitions.DeviceSpec.build(
id="dev_a",
device_name="dev_a",
architecture=common_definitions.DeviceArchitecture.RV64_GENERIC,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
device_spec_b = common_definitions.DeviceSpec.build(
id="dev_b",
device_name="dev_b",
architecture=common_definitions.DeviceArchitecture.ARM_VALHALL,
host_environment=common_definitions.HostEnvironment.ANDROID_ARMV8_2_A,
tags=[])
run_config_a = iree_definitions.E2EModelRunConfig.build(
module_generation_config=small_gen_config,
module_execution_config=COMMON_EXEC_CONFIG,
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=big_gen_config,
module_execution_config=COMMON_EXEC_CONFIG,
target_device_spec=device_spec_b,
input_data=common_definitions.ZEROS_MODEL_INPUT_DATA,
tool=iree_definitions.E2EModelRunTool.IREE_BENCHMARK_MODULE)
run_config_map = export_benchmark_config.filter_and_group_run_configs(
run_configs=[run_config_a, run_config_b],
preset_matchers=[
lambda config: config.module_generation_config.imported_model.model.
id == "small_model"
])
self.assertEqual(run_config_map, {
"dev_a": [run_config_a],
})
if __name__ == "__main__":
unittest.main()